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