前言
ADI前些年推出的ADALM-PLUTO SDR设备由于其轻便灵活的特点,外加价格相比于专业无线电相当实惠,受到了很多开源社区的欢迎,也诞生了许多的应用,如跟踪GPS、伪造GPS实现硬件级虚拟定位、电子钥匙重发攻击等(这些实际上HackRF做的更多)。同时对于学习通信的师生和对无线电感兴趣的业余玩家,也是个很不错的选择。
国内购买纯原版Pluto SDR有些困难,但好在国内也有很多企业或团队基于某些成熟的SDR平台衍生出的性能更强,适用固件更多的软件无线电平台,价格也并非难以承受。一台设备不仅可以体验到Pluto,还可以体验到FMCOMMS、UHD等著名无线电的固件(也就是可以跑它们对应的例程,做简单的开发)。
本文介绍一下拿到Pluto设备后,应当在自己的PC上做什么设置,才可以顺利的开始调试设备。
(作者使用的SDR也并非纯原版Pluto SDR,而是国内企业魔改的,但在使用Pluto固件的前提下,是可以兼容绝大多数关于Pluto SDR的教程或文章的)
声明:本文测试环境为Ubuntu22.04.4初始环境,流程验证无误,但在其他主机上仍然可能存在问题,若无法解决,请在官方求助论坛提问或寻求官方帮助,本文仅供参考。
安装libiio
首先安装一些依赖(这条命令很长,复制时请复制全):
sudo apt-get install build-essential libxml2 libzstd-dev libxml2-dev bison flex libcdk5-dev cmake libaio-dev libusb-1.0-0-dev libserialport-dev libxml2-dev libavahi-client-dev doxygen graphviz
然后拉取源码编译安装:
git clone https://github.com/analogdevicesinc/libiio.git --branch v0.25
cd libiio
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
sudo ldconfig
cd ../..
在命令行键入iio_info
,若输出版本信息,则安装成功。
安装libad9361-iio
步骤与之前相似:
git clone https://github.com/analogdevicesinc/libad9361-iio.git
cd libad9361-iio
cmake .
make -j$(nproc)
sudo make install
sudo ldconfig
cd ..
安装GNU Radio
此部分面向Ubuntu20或更新,若你是Ubuntu18及以前的版本,请参照官方教程的这一部分
实际上你可以直接通过apt安装,即sudo apt install gnuradio
,但这样安装的版本没办法指定版本,且安装的版本随着平台不同而不同(各别系统下安装的具体版本见这里,例如Ubuntu 22.04下为v3.10.1.1,Ubuntu20.04下需要添加GNU Radio源即可安装v3.10否则安装的也是v3.8),如果你对版本没有特殊需求,直接执行sudo apt install gnuradio
安装即可,并可跳过gr-iio的安装;如果你需要安装其他版本则推荐从源码编译,下面以v3.8为例讲解。
首先安装一些依赖(这条命令很长,复制时请复制全):
sudo apt install git cmake g++ libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx python3-lxml doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins python3-zmq python3-scipy python3-gi python3-gi-cairo gir1.2-gtk-3.0 libcodec2-dev libgsm1-dev libusb-1.0-0 libusb-1.0-0-dev libudev-dev
然后步骤仍和上面一样:
git clone https://github.com/gnuradio/gnuradio.git
cd gnuradio
git checkout maint-3.8
git submodule update --init --recursive
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 ..
make -j$(nproc)
sudo make install
cd ../..
sudo ldconfig
然后向.bashrc
写入环境变量:
vim ~/.bashrc
# 在文件末尾添加以下内容
export PYTHONPATH=$PYTHONPATH:/usr/lib/python3/dist-packages/iio:/usr/local/lib/python3/dist-packages
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib
# 保存退出
source ~/.bashrc
gnuradio-companion
可以在应用列表中找到GNU Radio Companion图标,在命令行键入gnuradio-companion
都可以打开GNU Radio,若能正常显示主界面则安装成功。
卸载GNU Radio
如果是通过源代码编译安装的:
cd gnuradio
sudo make uninstall
如果是通过包管理器(如apt
)安装的:
sudo apt remove gnuradio
sudo apt autoremove -y
安装gr-iio
由于GNU Radio v3.8没有自带与Pluto SDR通信的gr-iio,所以需要单独安装,如果之前安装的GNU Radio版本为v3.10或更新则已经自带gr-iio,无需安装(使用apt安装的GNU Radio则可以跳过这一步)。
安装过程同样非常解压:
sudo apt install liborc-dev
git clone -b upgrade-3.8 https://github.com/analogdevicesinc/gr-iio.git
cd gr-iio
cmake .
make -j$(nproc)
sudo make install
cd ..
sudo ldconfig
gnuradio-companion
安装完毕后打开GNU Radio,若能在右边的器件栏找到Pluto相关器件则环境配置完毕。
卸载gr-iio
cd gr-iio
sudo make uninstall
验证Pluto SDR与libiio
将Pluto SDR通过USB或以太网线连接到PC,等待SDR开机后,在PC命令行键入iio_info -s
,若显示出含有Analog Devices或Pluto字样的信息,记录开头的ip地址,如ip:192.168.2.1
,或是最后的usb:1.8.5
。
再键入iio_info -u 'ip:192.168.2.1'
或iio_info -u 'usb:1.8.5'
,打印出如图的大段内容则没问题(输出的是固件中有关于发射接收的各种属性)。
验证GNU Radio
现在使用GNU Radio和Pluto SDR创建一个简易频谱仪来测试功能是否正常,打开GNU Radio(通过应用列表点击GNU Radio图标或命令行键入gnuradio-companion),首先将左上角的Options和Variable按照下图修改,即为项目取个合法的名字,并且修改采样率为2.4MHz:
然后从右侧期间栏找到PlutoSDR Source和QT GUI Frequency Sink模块(位置见图),拖入到中间区域,并将二者相连:
并作如下图修改,即修改Pluto SDR的访问地址和采样率:
然后按下F6或在菜单栏找到执行按钮,即可开始运行程序,输出如图:
这样就证明了Pluto SDR和GNU Radio的联动成功。