前言
RFNoc(RF network on chip)是ettus公司推出的以流图的方式调用FPGA资源的开源开发框架,可以在一定程度上降低在USRP设备上的FPGA开发难度。在目前基于ZYNQ系列的硬件设备E3XX系列和X3XX系列上都可以使用。官方的应用笔记给的还算详细,其中由于E系列是嵌入式设备,所以不光需要在PC上搭建环境,还要在设备上搭建运行环境。
Ettus官方提供的系统镜像中UHD是比较旧的3.9.2版本,没有预装rfnoc,编译的时候需要把rfnoc设置为on才行。在现在的最新版本3.14.X中,已经集成到一起了。
这篇官方的应用笔记里有笔记详细的安装方法,PC上的搭建就不详细说了,应用笔记里介绍了在电脑上用交叉编译的方法搭建环境的流程,其实也可以把UHD和GNURadio的源码下到e312上编译,流程稍微简单一些,但是因为处理器的能力没有电脑强所以会比较慢。
https://kb.ettus.com/Software_Development_on_the_E3xx_USRP_-_Building_RFNoC_UHD_/_GNU_Radio_/_gr-ettus_from_Source
一、在E312上直接用源码编译
下载UHD的源码: $ git clone -b rfnoc-devel https://github.com/EttusResearch/uhd.git
下载GNURadio源码: $ git clone -b v3.7.10.2 --recursive https://github.com/gnuradio/gnuradio.git
版本可以根据自己实际需要的来下载,UHD推荐用最新的,但是对于GNURadio,由于ettus提供的镜像中的文件系统里面的很多依赖版本都比较旧,太新的GNURadio版本编译时会遇到很多不兼容问题需要更新依赖,比较麻烦,建议跟旧版本保持一致。
1、修改系统时间:
$ date -s 月/日/年
$ date -s 时/分/秒(UTC时间)
一定要先修改时间再编译,不然系统会认为要编译的文件来自未来,会报错。
2、安装UHD
$ cd uhd-XXXX
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_E300=ON -DENABLE_B100=OFF -DENABLE_B200=OFF -DENABLE_USRP1=OFF -DENABLE_USRP2=OFF -DENABLE_X300=OFF -DENABLE_N230=OFF -DENABLE_N300=OFF -DENABLE_N320=OFF -DENABLE_RFNOC=ON ..
(cmake 时把不需要的适配其他型号的东西关掉可以让速度快一点)
$ make -j2
(漫长的等待,可以去干点别的)
$ make install
3、安装GNURadio
编译gnuradio的时候会出现内存不足的情况,可以使用交换分区来解决,就类似电脑上的虚拟内存吧,下面64M×16就是增加了1G的内存分区。
先创建交换分区:
$ dd if=/dev/zero of=/swapfile bs=64M count=16
$ mkswap /swapfile
$ swapon /swapfile
然后编译:
$ cd gnuradio
$ mkdir build
$ cd build
$ cmake ../
$ make
$ make install
(这里我没有开-j2,因为分配的交换分区不太对,编译swig相关的时候开了双核还是会因为内存不足退出,如果时间充足就不开慢慢编,如果想快一点,可以把交换分区开大一点用-j2来编,或者先用-j2来编,报错退出了再用单核继续。。。。)
注意:UHD一定要在GNURadio之前装,不然UHD没办法用,后面使用的时候如果更换了UHD的版本,gnuradio也需要重新编译一下,不然版本会错误。
如果觉得存储空间不算很充裕,编译完成和可以把交换分区删掉:
$ swapoff /swapfile
$ rm /swapfileile
还需要安装gr-ettus,安装方法就跟普通的安装oot模块一样,不详细写了。
用 ? 更新一下fpga的软件版本
$ uhd_images_downloader
可以用uhd_usrp_probe命令来查看一下当前的镜像信息,最下面一部分会显示当前已有的rfnoc模块:
| | | RFNoC blocks on this device:
| | |
| | | * Radio_0
| | | * FIFO_0
| | | * Window_0
| | | * FFT_0
| | | * fosphor_0
| | | * FIFO_1
| | | * FIR_0
全部安装完成之后,可以把源码删掉来释放存储空间,之后就可以愉快的开始使用了。
4、使用总结
虽然RFNoc这种开发架构能降低开发难度,但是为了方便增减模块,框架本身比较臃肿,片上资源的利用率不高,而且因为e312本身使用的Z7020芯片的FPGA资源也不是十分充足,就造成能添加的RFNoc模块数量十分有限。上面显示的这些,基本就是e312能同时使用的极限了,如果想用DDC和DUC模块,那么上面的这些模块除了Radio以为就都没办法使用了。
二、交叉编译方法
这个方法上面的链接中已经介绍的比较详细了,就先不展开写了(主要是因为懒= =),过后想到什么了再补充。
如有错误,欢迎指正。