编译源码,大约需要10-30min时间,可以通过开启多线程编译可大大缩短编译时间,用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版本不匹配的话,无法直接运行上述测试程序,可以通过更新firmware image 和 FPGA image使之匹配。更新方法见第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] 。
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。在本次验证中,使用了超过1台的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 [4] ,cd 到/usr/local/lib/uhd/utils目录下,运行
sudo ./usrp2_recovery.py --ifc=eth0 --new-ip=10.144.97.123回车
以上方法需要防火墙允许UDP广播。需要注意的是,在虚拟机中运行Linux的话,需要将虚拟机的网卡配置为直连或者与主机共用IP。
图6 虚拟机网卡配置
设置IP后,可以ping一下USRP,命令行输入:
ping 10.144.97.123回车
此时应当看到ping通的信息,按Ctrl + Z可以退出ping的状态。
3.2 更新firmware image和FPGA image
如开篇所述,这两个镜像在Windows和Linux下是通用的,只要版本和驱动版本一致即可。NI-USRP 15.5提供的镜像和UHD 3.11.0提供的镜像是一致的。如果你的USRP在Windows下更新过镜像,可以跳过这一步。
在Ubuntu命令行中输入:
sudo uhd_images_downloader回车
这样可以自动地将网络上合适的镜像下载到本地计算机中。
再输入
uhd_image_loader --args="type=usrp2,addr=,reset"回车
将镜像下载到USRP设备中并重启设备,这里的镜像是自动选择版本的。