本文内容直接参考这篇教程,不得不说,国内互联网对SDR的探讨太少了,希望咱们的软件无线电也可以发展起来。
目前网络上针对SDR——尤其是微型SDR,如HackRF One、Pluto SDR、LimeSDR等——的开发基本都是PC运行程序,向SDR发送数据或从SDR获取数据,在这个过程中,SDR仅仅是作为收发模块使用的,然而对于Pluto SDR,其搭载了一个单核A9,并且ADI官方还为其提供了一个基于Linux的专供固件,在这样的开发流程中,板载Linux并未发挥什么作用。
难道你就没有想过让SDR成为主机,而PC仅显示数据吗?难道你不觉得不利用起来ARM有些浪费吗?我来教你怎么通过交叉编译,让原先在PC运行的程序,运行在SDR之上。
前置条件
若你还没有配置好Pluto SDR的运行环境,请查看我的这一篇文章。
最好有一台物理Linux机器,而非虚拟机,这样能最大程度发挥硬件性能,同时避免某些奇怪的问题出现。Windows和MacOS其实也可以继续本教程,不过需要些额外步骤,可以参见顶部链接文章。
你还需要确定好自己的Pluto SDR运行的固件版本,一般每次ssh会话开始时都会打印固件版本,本文以v0.38为例讲解,如果你的Pluto SDR固件是其他版本,只需将后文涉及到固件版本的数字改为自己使用的版本即可。
最后你需要Pluto SDR运行固件的系统根目录,因为你在PC上直接编译的程序是以本机环境为标准的,但Pluto SDR的板载系统可能不支持你使用的库或函数,所以编译时需要使用Pluto SDR的环境,而这个环境可以通过两种方式来获得:
- 参考官方Pluto SDR固件库编译固件源码,编译完毕后找到staging文件夹,其中即为系统根目录;
- 直接从官方Pluto SDR固件Release页面下载对应版本的sysroot.tar.gz,解压到一个方便访问的位置。
本文采用第二种方法。
搭建环境
确保你的Linux主机安装有Xilinx或Linaro工具链,本文使用Linaro工具链,若要使用Xilinx,请参见顶部链接。
Linaro可以使用包管理器安装:
sudo apt install