关于Ettus usrp E312 RFNOC环境搭建的详细总结

       前言

        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以为就都没办法使用了。

二、交叉编译方法

这个方法上面的链接中已经介绍的比较详细了,就先不展开写了(主要是因为懒= =),过后想到什么了再补充。

如有错误,欢迎指正。

 

你可能感兴趣的:(关于Ettus usrp E312 RFNOC环境搭建的详细总结)