2020-04-16
此教程专为Ubuntu系统中没有网或网速较慢时安装UHD + GRC。
主要过程是先在win10下网络情况较好,下载好需要用到的依赖包及安装包,然后再去ubuntu系统下安装即可。
本页总结了设置UHD和GNU Radio的脱机安装所涉及的分步过程。
前期准备
在win10下安装一个Ubuntu的虚拟机,在虚拟机中先下载好需要用到的依赖包和安装包。
安装虚拟机并在虚拟机上安装Ubuntu18.04系统
此过程不赘述,自行百度即可。
下载依赖包及安装包
在新的虚拟机Ubuntu下执行:
sudo apt clean
# 确保在/var/cache.apt/archives下没有安装包:
ls -al /var/cache.apt/archives
下载依赖包:
在虚拟机中打开终端:
sudo apt-get --download-only install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit-1.14-0 libcppunit-dev libcppunit-doc ncurses-bin cpufrequtils python-numpy python-numpy-doc python-numpy-dbg python-scipy python-docutils qt4-bin-dbg qt4-default qt4-doc libqt4-dev libqt4-dev-bin python-qt4 python-qt4-dbg python-qt4-dev python-qt4-doc python-qt4-doc libqwt6abi1 libfftw3-bin libfftw3-dev libfftw3-doc ncurses-bin libncurses5 libncurses5-dev libncurses5-dbg libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake autoconf libtool python-dev libfftw3-dev libcppunit-dev libboost-all-dev libusb-dev libusb-1.0-0-dev fort77 libsdl1.2-dev python-wxgtk3.0 git libqt4-dev python-numpy ccache python-opengl libgsl-dev python-cheetah python-mako python-lxml doxygen qt4-default qt4-dev-tools libusb-1.0-0-dev libqwtplot3d-qt5-dev pyqt4-dev-tools python-qwt5-qt4 cmake git wget libxi-dev gtk2-engines-pixbuf r-base-dev python-tk liborc-0.4-0 liborc-0.4-dev libasound2-dev python-gtk2 libzmq3-dev libzmq5 python-requests python-sphinx libcomedi-dev python-zmq libqwt-dev libqwt6abi1 python-six libgps-dev libgps23 gpsd gpsd-clients python-gps python-setuptools screen sshfs
在虚拟机终端中输入:
$ mkdir -p ~/offline
$ mkdir -p ~/offline/debs
$ mkdir -p ~/offline/src
将刚刚下载的.deb安装包移动到*~/offline/debs文件夹下:
$ cd ~/offline/debs
$ cp -v /var/cache/apt/archives/*.deb .
clone UHD和GNU Radio源文件:
clone时需要用到git命令,先下载git命令,再clone源文件:
$ sudo apt install git
# Then you can clone the UHD and GNU Radio repositories:
$ cd ~/offline/src
$ git clone --recursive https://github.com/EttusResearch/uhd
$ git clone --recursive https://github.com/gnuradio/gnuradio
# Optionally, if you're using RFNoC, fetch gr-ettus:
$ git clone https://github.com/EttusResearch/gr-ettus.git
压缩offline文件夹
$ cd ~/
$ tar zcvf offline.tgz offline/
把压缩包复制到离线环境中去,安装时候使用。
在离线环境中安装
重新配置默认Shell
将主机上的默认Shell从Dash切换到Bash。在某些Linux发行版中(例如Ubuntu),Dash设置为默认外壳程序,这可能会导致一些问题。 建议通过在终端中运行以下命令将shell设置为Bash。 在第一个命令提示时选择“No”,第二个命令将验证将使用Bash。
$ sudo dpkg-reconfigure dash
# Verify Bash is the default shell.
$ ll /bin/sh
# Expected Output:
# lrwxrwxrwx 1 root root 4 Apr 2 22:00 /bin/sh -> bash*
解压缩安装源
$ tar zxvf offline.tgz
注意:本教程中默认解压后的路径为~/offline/。如果你解压到别的地方,下文中相应的位置也要改变。
安装DEB安装包
$ cd ~/offline/debs
$ sudo dpkg -i *.deb
当有些安装包安装失败时,重新执行:
$ sudo dpkg -i *.deb
安装UHD
$ cd ~/offline/src/uhd
选择uhd版本:
# Example for UHD 3.9.5:
$ git checkout release_003_009_005
# or example for UHD 3.13.0.2:
$ git checkout v3.13.0.2
在签出带标签的分支后更新git子模块:
$ git submodule update
最后build UHD
$ cd host
$ mkdir build
$ cd build
$ cmake ../
$ make -j4
$ sudo make install
$ sudo ldconfig
配置USB
在Linux上,udev处理USB插拔事件。以下命令将安装udev规则,以便非root用户可以访问设备。仅对于使用USB连接到主机的设备(例如B200,B210和B205mini),才需要执行此步骤。此设置应立即生效,不需要重新启动或注销/登录。运行这些命令时,请确保没有通过USB连接USRP设备。
cd ~/offline/src/uhd/host/utils
sudo cp uhd-usrp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
配置线程优先级
当UHD产生新线程时,它可能会尝试提高线程的调度优先级。如果设置新的优先级失败,UHD软件将向控制台打印警告,如下所示。该警告是无害的。它只是意味着线程将保留正常或默认的调度优先级。
UHD Warning:
Unable to set the thread priority. Performance may be negatively affected.
Please see the general application notes in the manual for instructions.
EnvironmentError: OSError: error in pthread_setschedparam
要解决此问题,需要为非特权(非root)用户授予特殊权限以更改计划优先级。
为此,首先创建一个Linux组usrp:
sudo groupadd usrp
添加你的用户到这个组里:
sudo usermod -aG usrp $USER
在/etc/security/limits.conf文件的末尾添加:
@usrp - rtprio 99
Build GNU Radio
$ cd ~/offline/src/gnuradio
选择GNU Radio版本:
$ git checkout v3.7.10.2
# or
$ git checkout v3.7.13.4
更新子模块:
$ git submodule update
最后build GNU Radio:
$ mkdir build
$ cd build
$ cmake ../
$ make -j4
$ sudo make install
$ sudo ldconfig
提取UHD FPGA images
现在,您需要为UHD安装下载相应的FPGA images。
识别要下载的FPGA映像包
运行命令(在离线计算机上):
对于<3.11.x.x的UHD版本,它将打印出要下载到输出中的FPGA图像的确切URL。
$ uhd_images_downloader
$ sudo uhd_images_downloader
Images destination: /usr/local/share/uhd/images
Downloading images from: http://files.ettus.com/binaries/images/uhd-images_003.009.005-release.zip
Downloading images to: /tmp/tmpySQA9q/uhdimages_003.009.005-release.zip
Downloader raised an unhandled exception:HTTPConnectionPool(host='files.ettus.com', port=80): Max retries exceeded with url:/binaries/images/uhd-images_003.009.005-release.zip (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f207225fe90>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))
You can run this again with the '--verbose' flag to see more information
If the problem persists, please email the output to: support@ettus.com
对于UHD版本<3.11.x.x,您将需要附加命令行参数-l列出目标:
$ sudo uhd_images_downloader -l
[INFO] Images destination: /usr/local/share/uhd/images
[INFO] Potential targets in manifest file:
TARGET:RELATIVE_URL
b2xx_b200_fpga_default : b2xx/fpga-494ae8bb/b2xx_b200_fpga_default-g494ae8bb.zip
b2xx_b200mini_fpga_default : b2xx/fpga-494ae8bb/b2xx_b200mini_fpga_default-g494ae8bb.zip
b2xx_b205mini_fpga_default : b2xx/fpga-494ae8bb/b2xx_b205mini_fpga_default-g494ae8bb.zip
b2xx_b210_fpga_default : b2xx/fpga-494ae8bb/b2xx_b210_fpga_default-g494ae8bb.zip
b2xx_common_fw_default : b2xx/uhd-3ff4186b/b2xx_common_fw_default-g3ff4186b.zip
e3xx_e310_fpga_default : e3xx/fpga-494ae8bb/e3xx_e310_fpga_default-g494ae8bb.zip
e3xx_e310_fpga_rfnoc : e3xx/fpgad6a878b/e3xx_e310_fpga_rfnoc-gd6a878b.zip
e3xx_e320_fpga_aurora : e3xx/fpga-494ae8bb/e3xx_e320_fpga_aurora-g494ae8bb.zip
e3xx_e320_fpga_default : e3xx/fpga-494ae8bb/e3xx_e320_fpga_default-g494ae8bb.zip
e3xx_e320_mender_default : e3xx/meta-ettusv3.13.1.0/e3xx_e320_mender_default-v3.13.1.0.zip
e3xx_e320_sdimg_default : e3xx/meta-ettusv3.13.1.0/e3xx_e320_sdimg_default-v3.13.1.0.zip
e3xx_e320_sdk_default : e3xx/meta-ettusv3.13.1.0/e3xx_e320_sdk_default-v3.13.1.0.zip
n230_n230_fpga_default : n230/fpga-494ae8bb/n230_n230_fpga_default-g494ae8bb.zip
n3xx_common_mender_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_mender_defaultv3.13.1.0.zip
n3xx_common_sdimg_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_sdimg_default-v3.13.1.0.zip
n3xx_common_sdk_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_sdk_default-v3.13.1.0.zip
n3xx_n300_fpga_default : n3xx/fpga-494ae8bb/n3xx_n300_fpga_default-g494ae8bb.zip
n3xx_n310_fpga_default : n3xx/fpga-494ae8bb/n3xx_n310_fpga_default-g494ae8bb.zip
n3xx_common_mender_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_mender_defaultv3.13.1.0.zip
n3xx_common_sdimg_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_sdimg_default-v3.13.1.0.zip
n3xx_common_sdk_default : n3xx/meta-ettusv3.13.1.0/n3xx_common_sdk_default-v3.13.1.0.zip
n3xx_n300_fpga_default : n3xx/fpga-494ae8bb/n3xx_n300_fpga_default-g494ae8bb.zip
n3xx_n310_fpga_default : n3xx/fpga-494ae8bb/n3xx_n310_fpga_default-g494ae8bb.zip
octoclock_octoclock_fw_default : octoclock/uhd-14000041/octoclock_octoclock_fw_defaultg14000041.zip
usb_common_windrv_default : usb/uhd-14000041/usb_common_windrv_default-g14000041.zip
usrp1_b100_fpga_default : usrp1/fpga-6bea23d/usrp1_b100_fpga_default-g6bea23d.zip
usrp1_b100_fw_default : usrp1/fpga-6bea23d/usrp1_b100_fw_default-g6bea23d.zip
usrp1_usrp1_fpga_default : usrp1/fpga-6bea23d/usrp1_usrp1_fpga_default-g6bea23d.zip
usrp2_n200_fpga_default : usrp2/fpga-6bea23d/usrp2_n200_fpga_default-g6bea23d.zip
usrp2_n200_fw_default : usrp2/fpga-6bea23d/usrp2_n200_fw_default-g6bea23d.zip
usrp2_n210_fpga_default : usrp2/fpga-6bea23d/usrp2_n210_fpga_default-g6bea23d.zip
usrp2_n210_fw_default : usrp2/fpga-6bea23d/usrp2_n210_fw_default-g6bea23d.zip
usrp2_usrp2_fpga_default : usrp2/fpga-6bea23d/usrp2_usrp2_fpga_default-g6bea23d.zip
usrp2_usrp2_fw_default : usrp2/fpga-6bea23d/usrp2_usrp2_fw_default-g6bea23d.zip
x3xx_x300_fpga_default : x3xx/fpga-494ae8bb/x3xx_x300_fpga_default-g494ae8bb.zip
x3xx_x310_fpga_default : x3xx/fpga-494ae8bb/x3xx_x310_fpga_default-g494ae8bb.zip
注意:上面的示例使用UHD3.13.0.2,RELATIVE_URL值将针对不同的UHD版本而更改。
将设备的RELATIVE_URL值附加到以下URL:
http://files.ettus.com/binaries/cache/
例如,用于X310的FPGA映像将位于:
http://files.ettus.com/binaries/cache/x3xx/fpga-494ae8bb/x3xx_x310_fpga_defaultg494ae8bb.zip
对于UHD版本>=3.13.1.0,可以使用命令行选项--list-targets --url-only可打印出以下网址 FPGA软件包:
$ uhd_images_downloader --url-only --list-targets
[INFO] Images destination: /usr/local/share/uhd/images
http://files.ettus.com/binaries/cache/usrp1/fpga-6bea23d/usrp1_b100_fw_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/x3xx/fpgad0360f7/x3xx_x310_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_n210_fpga_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/n230/fpgad0360f7/n230_n230_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/n3xx/fpga-494ae8bb/n3xx_n300_fpga_aurora-g494ae8bb.zip
http://files.ettus.com/binaries/cache/usrp1/fpga-6bea23d/usrp1_b100_fpga_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/e3xx/fpga-494ae8bb/e3xx_e320_fpga_aurora-g494ae8bb.zip
http://files.ettus.com/binaries/cache/e3xx/metaettus-v3.13.1.0/e3xx_e320_sdk_defaultv3.13.1.0.zip
http://files.ettus.com/binaries/cache/b2xx/fpgad0360f7/b2xx_b200_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_n200_fpga_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/e3xx/fpgad0360f7/e3xx_e320_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/n3xx/fpgad0360f7/n3xx_n310_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/b2xx/fpgad0360f7/b2xx_b205mini_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/x3xx/fpgad0360f7/x3xx_x300_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/octoclock/uhd-14000041/octoclock_octoclock_fw_defaultg14000041.zip
http://files.ettus.com/binaries/cache/e3xx/metaettus-v3.13.1.0/e3xx_e320_sdimg_defaultv3.13.1.0.zip
http://files.ettus.com/binaries/cache/n3xx/fpga-6bea23d/n3xx_n310_cpld_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_usrp2_fw_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_n200_fw_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_usrp2_fpga_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/b2xx/uhd-3ff4186b/b2xx_common_fw_default-g3ff4186b.zip
http://files.ettus.com/binaries/cache/n3xx/fpga-494ae8bb/n3xx_n310_fpga_aurora-g494ae8bb.zip
http://files.ettus.com/binaries/cache/b2xx/fpgad0360f7/b2xx_b200mini_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/usrp1/fpga-6bea23d/usrp1_usrp1_fpga_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/n3xx/metaettus-v3.13.1.0/n3xx_common_mender_defaultv3.13.1.0.zip
http://files.ettus.com/binaries/cache/e3xx/metaettus-v3.13.1.0/e3xx_e320_mender_defaultv3.13.1.0.zip
http://files.ettus.com/binaries/cache/usb/uhd-14000041/usb_common_windrv_default-g14000041.zip
http://files.ettus.com/binaries/cache/e3xx/fpgad6a878b/e3xx_e310_fpga_rfnoc-gd6a878b.zip
http://files.ettus.com/binaries/cache/usrp2/fpga-6bea23d/usrp2_n210_fw_default-g6bea23d.zip
http://files.ettus.com/binaries/cache/n3xx/fpgad0360f7/n3xx_n300_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/n3xx/metaettus-v3.13.1.0/n3xx_common_sdk_defaultv3.13.1.0.zip
http://files.ettus.com/binaries/cache/e3xx/fpgad0360f7/e3xx_e310_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/b2xx/fpgad0360f7/b2xx_b210_fpga_default-gd0360f7.zip
http://files.ettus.com/binaries/cache/n3xx/metaettus-v3.13.1.0/n3xx_common_sdimg_defaultv3.13.1.0.zip
在连接了互联网的主机上,使用wget获取FPGA映像:
#Example for<UHD 3.11.x.x:
$ wget http://files.ettus.com/binaries/images/uhd-images_003.009.005-release.zip
#Example for>UHD 3.11.x.x.
$ wget http://files.ettus.com/binaries/cache/x3xx/fpga-494ae8bb/x3xx_x310_fpga_defaultg494ae8bb.zip
将下载的ZIP文件传输到您的离线环境。
Installing the FPGA Images to the UHD Images Directory
在~/offline目录中创建一个名为fpga_images的文件夹。该目录名称是任意的,并且仅在以下步骤中用作参考。将包含FPGA映像的zip文件放入此目录,然后解压缩。
解压到同一个文件夹下:
mkdir ~/images #最后解压完的文件都在这里
cd fpga_images
unzip -o '*.zip' -d ~/images
接下来,在UHD安装前缀中创建images/文件夹。
cd /usr/local/share/uhd/
mkdir images
cd images
将上面解压缩的FPGA映像复制到对应的位置。
sudo cp -v ~/images/* .
参考链接:
Building and Installing UHD and GNU Radio in an Offline Environment