如何在Linux下构建USRP GNU Radio开发环境

更新 Jun 3, 2020

适用于

硬件

  • USRP Software Defined Radio Device

驱动

  • NI-USRP

操作系统

  • Linux
  • Windows

问题详述

GNU Radio是一个开源的软件无线电开发平台,可以通过图形界面或C ++和Python等文本语言快速开发软件无线电应用程序。本文介绍如何在Linux下构建GNU Radio无线电开发平台以及如何在此平台下使用NI USRP设备。

解决方案

  1. 概念描述

USRP设备需要固件(固件镜像)和FPGA镜像,并且版本需要相同才能正常工作。前者和后者不会受到主机使用环境的影响:Windows或Linux,即设备可以在Windows LabVIEW和Linux GNU Radio下使用相同的固件和FPGA镜像。
 
图1:Windows和Linux之间的比较
 
在Windows下运行时,可以通过NI-USRP Configuration Utility软件写入/更新固件和FPGA,如图2所示。这样,USRP设备可以通过NI-USRP驱动程序与主机通信。
图2:NI-USRP配置实用程序-N2xx / NI-29xx FPGA镜像配置器

在Linux GNU Radio下,UHD驱动程序取代了NI-USRP驱动程序的工作。您可以通过运行uhd_images_downloader从Internet下载映像,并使用uhd_image_loader更新镜像,稍后将对此进行详细介绍。
  1. 环境配置

2.1 安装Ubuntu系统

我们通常使用的计算机是Windows系统。有两种方法可以在您的计算机上运行Linux。第一种方法是安装双系统。第二种方法是安装虚拟机并在虚拟机中安装Linux。因为方法2不需要额外的分区,更改BIOS等,如果它不能正常工作,也不会导致Windows崩溃。因此,优先选择方法二。
 
这里使用虚拟机软件VMWare Workstation。可以从以下链接下载Ubuntu 16.04:https://ubuntu.com/download/desktop 。Ubuntu是Linux很受欢迎的发行版本之一。下载的文件是Ubuntu系统的.iso镜像文件。在VMWare中选择文件 - 新虚拟机。按照提示操作,然后单击“下一步”。配置VM硬件时,CPU数量和CPU内核数量与实际CPU相同。内存可以设置得稍大。例如,8G内存(共16G物理内存),硬盘设置40G(安装Ubuntu系统,安装完所有GNU Radio的相关软件后,实际使用8.1G)

启动虚拟机,然后按照向导简单配置Ubuntu,进入桌面并单击左上角的图标搜索终端命令行工具,如图3所示。
图3:查找Ubuntu命令行工具

打开命令行工具,输入
 sudo password(回车)

设置Super用户密码,即root密码。在用户设置密码之前,Ubuntu每次都会生成一个随机的root密码。请注意,输入密码时,不会显示“****”,而是不显示任何字符。这与我们的一般认知不同。

系统会提示您再次输入密码,第二次输入密码并确认密码,两次后密码设置成功。下一个输入
sudo apt-get update(回车)

更新源,系统将提示您输入刚刚设置的管理员密码,然后按Enter键。输入以下字段(或复制并粘贴,不要使用Ctrl C + V快捷键,而是在命令行窗口中单击鼠标右键 - 选择粘贴)
sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.13 -0v5 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python -qt4-dbg python -qt4-dev python -qt4-doc python -qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse -dev swig g ++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git-core libqt4-dev python- numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools python- qwt5-qt4 c make git-core wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq-dev libzmq1 python-requests python-sphinx libcomedi-dev python-ZMQ(回车)

该操作将下载约1G的依赖库和软件。等待下载完成后,下载编译并安装UHD驱动程序。

2.2 安装UHD驱动程序

UHD驱动程序以源代码形式提供。在命令行中输入

git clone https://github.com/EttusResearch/uhd (回车)

将UHD源复制到HOME路径,转到该路径并创建新的目录
cd uhd(回车)
cd host(回车)
mkdir build(回车)
cd build(回车)


输入
cmake../(回车)

生成Makefile,输入
make(回车)

编译源代码大约需要10-30分钟,通过打开多线程编译可以大大缩短编译时间,使用make -j4而不是make ,它将同时启用4个线程进行编译,通常情况下,计算机CPU线程的数量或虚拟机CPU线程的数量可以相同。如果编译在中间崩溃(由于内存不足,可能会出现在虚拟机中),重新编译时将继续先前的进度执行编译。完成安装已编译的库后,输入
 make test(回车)
sudo make install(回车)


更新共享库和环境
sudo ldconfig(回车)
export LD_LIBRARY_PATH = / usr / local / lib(回车)


此时,已经安装了UHD驱动程序并且可以输入如下命令:
uhd_find_devices(回车)

该命令可以用来查看驱动程序的版本,如果USRP设备在同一子网上,可以查看USRP设备的信息,如图4所示。
图4:验证UHD安装
 
一个小技巧:键入uhd_fin,然后按Tab键进行自动填充。对于某些长命令的输入,您可以通过自动填充来减少拼写错误,从而节省时间和精力。

找到设备后,可以执行以下命令查看CDMA手机的上行频谱。
uhd_fft -a addr = 10.144.97.123 -f 835M -s 10M(回车)


图5:UHD FFT测试程序

请注意,如果USRP中的镜像和UHD版本不匹配,则无法直接运行上述测试程序。它可以通过更新固件镜像和FPGA来匹配。有关更新方法,请参阅第3节。

2.3 安装GNU Radio

安装GNU Radio与安装UHD驱动程序类似。

 

首先,回到Home路径

CD $HOME(回车)
 
 
然后,安装GNU Radio源代码
 
git clone -recursive https://github.com/gnuradio/gnuradio(回车)

下载完成后,创建一个“Build”目录
cd gnuradio(回车)
mkdir build(回车)
cd build(回车)

生成Makefile并编译安装
cmake../(回车)
make(回车)
make test(回车)
sudo make install(回车)
sudo ldconfig(回车)

完成后,可以通过输入验证安装
gnuradio-companion(回车)

GNU Radio开发环境应该能够正确打开。此时,环境已配置完成。

3.执行GNU Radio程序

3.1 修改USRP IP地址并进行连接

这里使用USRP-2922。 USRP设备使用固定IP。默认IP为192.168.10.2。首先,通过网线将USRP设备直接连接到PC。将PC的IP设置为192.168.10.1,将子网掩码设置为255.255.255.0。您可以通过Windows下的NI-USRP Configuration Utility软件修改USRP设备的IP。在此验证中,使用了多个USRP。需要通过交换机与主机通信,并在同一子网的PC上查看PC的IP地址: windows徽标键 + R - >输入cmd回车 - >输入ipconfig并找到IPv4地址本地网卡的配置,例如10.144.97.17,并将两个USRP的IP设置为同一子网,例如10.144.97.123和10.144.97.124。

在Linux下,您可以修改设备IP, cd/ usr / local / lib / utils目录并运行
sudo ./usrp2_recovery.py --ifc = eth0 --new-ip = 10.144.97.123(回车)

上述方法要求防火墙允许UDP广播。请注意,如果Linux在虚拟机中运行,则需要将虚拟机的网卡配置为直接连接或与主机共享IP。



图6:虚拟机NIC配置

设置IP后,可以ping通USRP,命令行输入:
ping 10.144.97.123(回车)

此时,可以看到ping信息。按Ctrl + Z退出ping状态。

3.2 更新固件镜像和FPGA镜像

如开头段落中所述,这两个镜像在Windows和Linux下是通用的,只要版本和驱动程序版本相同即可。 NI-USRP 15.5提供的镜像与UHD 3.11.0提供的镜像相同。如果您的USRP已在Windows下更新了镜像,则可以跳过此步骤。

在Ubuntu命令行中输入:
sudo uhd_images_downloader(回车)

这将自动将适配的镜像从网络下载到本地计算机。

请重新输入
uhd_image_loader --args =“type = usrp2,addr = <IP地址>,reset”(回车)

将镜像下载到USRP并重启设备。此处的镜像是自动选择的版本。

3.3 GNU Radio中的编程

首先,输入命令行:
gnuradio-companion(回车)

运行GNU Radio开发环境,该环境也使用图形模块进行编程。可以在网上搜索详细的教程。在这里,您可以编写一个程序来在两个USRP-2922之间传输文件。使用随设备自带天线在915M ISM频段上运行。两个USRP TX / RX接口也可以通过一条传输线直接连接。注意:使用USRP传输无线电信号受当地法律法规的约束。
 
图7:GRC图


图8:程序运行界面
图9:程序运行结果