gnss-sdr源代码编译

本文介绍在Ubuntu18.04LTS环境下编译GNSS-SDR源代码的方法,并解决了编译过程中遇到的问题,包括SignalSource实现未定义及gr-osmosdr连接失败等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

wy@wy-Vostro-3668:~/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

      经过对代码的追踪,发现在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装的啥?

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

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

     安装gr-osmosdr的时候有:


      其中有个:

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

      这个是个好东西,因为

      这个文件里用了

            // 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这个函数其是

      中的。

      然后是确保

-- ######################################################
-- # 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!

            

### 安装和使用 GNSS-SDR 的指南 要在 Ubuntu 系统上成功安装和使用 GNSS-SDR,需遵循以下方法: #### 1. 准备工作 确保您的系统已更新到最新状态,并安装必要的依赖项。可以通过以下命令完成: ```bash sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential cmake git libboost-all-dev \ libgflags-dev libgoogle-glog-dev libeigen3-dev python-cheetah \ libsdl2-dev doxygen graphviz imagemagick qtbase5-dev qtmultimedia5-dev \ qttools5-dev-tools libqt5svg5-dev libqwt-qt5-dev libusb-1.0-0-dev \ libcurl4-openssl-dev librtlsdr-dev libuhd-dev ``` 此步骤会安装编译所需的基础库以及 GNSS-SDR 所需的支持包[^1]。 #### 2. 克隆 GNSS-SDR 源码 从官方仓库获取最新的源代码: ```bash git clone https://github.com/gnss-sdr/gnss-sdr.git cd gnss-sdr/ mkdir build && cd build/ cmake .. make -j$(nproc) sudo make install ``` 上述操作将下载 GNSS-SDR源代码并进行构建。`next` 分支通常代表开发中的新特性,因此建议切换至稳定分支以减少潜在错误: ```bash git checkout release_0.0.16 ``` 如果需要特定版本号,则可通过 `gnss-sdr --version` 验证当前安装的版本是否满足要求[^3]。 #### 3. 安装额外组件 (可选) 为了增强功能,可能还需要安装其他相关模块,例如 gr-osmosdr 或 RTL-SDR 支持硬件驱动程序: ```bash git clone git://git.osmocom.org/gr-osmosdr cd gr-osmosdr/ mkdir build && cd build/ cmake ../ make -j$(nproc) sudo make install sudo ldconfig ``` 这些附加工具能够扩展兼容设备范围,从而适配更多类型的射频前端装置[^5]。 #### 4. 启动 GNSS-SDR 并连接设备 启动应用程序之前,请确认 USRP B2922 设备或其他支持型号已被正确识别并与主机相连。随后执行如下指令来初始化接收流程: ```bash gnss-sdr --rx_device=UHD --rf_freq=1575.42M --samp_rate=8Msps ``` 这里指定了 UHD(USRP Hardware Driver)作为输入接口,中心频率设为 GPS L1 波段标准值,采样率为每秒八百万样本点[^1]。 #### 5. 使用 gnss-sdr-monitor 工具辅助分析 对于更深入的数据解析或者教学演示用途来说,推荐搭配可视化插件一起运用。它具备实时追踪卫星轨迹、评估信噪比等功能优势[^4]: 访问其官网页面按照指引部署完毕之后即可开启图形化窗口观察各项指标表现情况。 --- ### 注意事项 - 如果发现任何异常现象比如崩溃退出等问题时,先核查日志文件内容定位具体原因所在; - 不同品牌规格之间可能存在细微差异所以务必参照各自手册说明文档来进行相应设置调整;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值