天天看点

gnss-sdr源代码编译1、安装         正如众多写blog的苦逼的程序员一样,事情如果这么顺利,那一定不正常,也就没有必要写一篇blog了。2、解决问题1       一般都没有这么顺利,我第一次是出现了错误:2、解决问题2

gnss-sdr源代码编译

作者微信公众号:小卫星

操作系统: Ubuntu18.04 LTS

1、安装

sudo apt-get install build-essential cmake git libboost-dev \
   libboost-date-time-dev libboost-system-dev libboost-filesystem-dev \
   libboost-thread-dev libboost-chrono-dev libboost-serialization-dev \
   libboost-program-options-dev libboost-test-dev liblog4cpp5-dev \
   libuhd-dev gnuradio-dev gr-osmosdr libblas-dev liblapack-dev \
   libarmadillo-dev libgflags-dev libgoogle-glog-dev libhdf5-dev \
   libgnutls-openssl-dev libmatio-dev python-mako python-six \
   libpcap-dev libgtest-dev googletest
           
git clone https://github.com/gnss-sdr/gnss-sdr
cd gnss-sdr/build
git checkout next
cmake ..
make
sudo make install
           

[email protected]:~/limegnss/gnss-sdr/install$ ./gnss-sdr --config_file=./../../limesdr_GPS_L1.conf

       记住,如果以前装过gnss-sdr,一定要在这个目录下这样运行,否则不是自己编译的结果。

         正如众多写blog的苦逼的程序员一样,事情如果这么顺利,那一定不正常,也就没有必要写一篇blog了。

2、解决问题1

       一般都没有这么顺利,我第一次是出现了错误:

E0616 22:13:53.212085 17236 gnss_block_factory.cc:1119] SignalSource.osmosdr_Signal_Source: Undefined implementation for block

gnss-sdr源代码编译1、安装         正如众多写blog的苦逼的程序员一样,事情如果这么顺利,那一定不正常,也就没有必要写一篇blog了。2、解决问题1       一般都没有这么顺利,我第一次是出现了错误:2、解决问题2

      经过对代码的追踪,发现在GNSSBlockFactory::GetBlock(...) 函数中

#if OSMOSDR_DRIVER

    else if (implementation.compare("Osmosdr_Signal_Source") == 0)

        {

            std::unique_ptr<GNSSBlockInterface> block_(new OsmosdrSignalSource(configuration.get(), role, in_streams,

                    out_streams, queue));

            block = std::move(block_);

        }

#endif

      其中,只有implementation和Osmosdr_Signal_Source完全相同时才会进行下去,因此将conf字段中

;######### SIGNAL_SOURCE CONFIG ############

SignalSource.implementation=Osmosdr_Signal_Source

      改的完全正确才可以,一个字符都不能差。

      话说这个问题花费了我几乎一个星期时间,几乎把gnss-sdr的跟踪前的代码都看了一遍,还加了n多的cout来追踪代码执行流程,不说了,泪多的很,不过阅读这个代码也不是毫无益处,(这个地方其实还涉及了gnuradio的代码),此容后表。

      话说写gnss-sdr的人真是gunradio的忠实粉丝啊,架构和编程语言的运用几乎和gnuradio风格高度一致,果然,高手都是相似的,不是我们凡人能理解的。

2、解决问题2

      第二次是这个问题

gr-osmosdr v0.1.4-98-gc653754d (0.1.5git) gnuradio 3.7.11

built-in source types: file fcd rtl_tcp uhd rfspace soapy redpitaya

[INFO] Make connection: ''

FATAL: Failed to make connection with ''

Trying to fill up 1 missing channel(s) with null source(s).

This is being done to prevent the application from crashing

due to gnuradio bug #528.

      这里暗示,在gr-osmosdr中没有支持osmosdr,what?没有osmosdr,那我的gr-osmosdr装的啥?

gnss-sdr源代码编译1、安装         正如众多写blog的苦逼的程序员一样,事情如果这么顺利,那一定不正常,也就没有必要写一篇blog了。2、解决问题1       一般都没有这么顺利,我第一次是出现了错误:2、解决问题2

      这个问题导致我再把gr-osmosdr的代码阅读了一遍,哎,泪啊~     

      解决问题的过程是艰难的,但是解决问题是容易的。     

     安装gr-osmosdr的时候有:

gnss-sdr源代码编译1、安装         正如众多写blog的苦逼的程序员一样,事情如果这么顺利,那一定不正常,也就没有必要写一篇blog了。2、解决问题1       一般都没有这么顺利,我第一次是出现了错误:2、解决问题2

      其中有个:

-- Installing: /usr/local/include/osmosdr/source.h

      这个是个好东西,因为

gnss-sdr / src / algorithms / signal_source / adapters / osmosdr_signal_source.cc

      这个文件里用了

            // 1. Make the driver instance

            try

            {

                    if (!osmosdr_args_.empty())

                        {

                        std::cout << "OsmoSdr arguments: " << osmosdr_args_ << std::endl;

                        LOG(INFO) << "OsmoSdr arguments: " << osmosdr_args_;

                        }

                    osmosdr_source_ = osmosdr::source::make(osmosdr_args_);

}

      make这个函数其是

gr-osmosdr / include / osmosdr / source.h

      中的。

      然后是确保

-- ######################################################

-- # Gnuradio enabled components                         

-- ######################################################

--   * Python support

--   * Osmocom IQ Imbalance Correction

--   * sysmocom OsmoSDR

--   * FUNcube Dongle

--   * FUNcube Dongle Pro+

--   * IQ File Source & Sink

--   * RTLSDR TCP Client

--   * Ettus USRP Devices

--   * RFSPACE Receivers

--   * SoapySDR support

--   * Red Pitaya SDR

--

-- ######################################################

      中使能列表里含有sysmocom OsmoSDR,当然,还有SoapySDR support。

      方法是在gr-osmosdr的cmake ../时加入参数,加啥参数呢?

      先执行下cmake ../,自然就有这个列表和诸如

-- Configuring sysmocom OsmoSDR support...

--   Dependency LIBOSMOSDR_FOUND = TRUE

--   Enabling sysmocom OsmoSDR support.

--   Override with -DENABLE_OSMOSDR=ON/OFF

的语句告诉你该咋样做。

      最后,告诉大家这第二个问题的解决方法:把gr-osmosdr重装一遍:

git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig      

Done!