USRP Driver Installation
We now need to install the Ettus UHD driver to properly access the USRP devices. These need to be re-build for the Jetson platform.
Key Resources
The installation guide aims to be self-contained. However, the following resources are useful for troubleshooting and developers working with the Ettus UHD driver:
Note
This is also achieved using the script scripts/install-usrp.sh
Prerequisites
We need to install the following packages to build the UHD driver.
sudo apt-get install \
autoconf automake build-essential ccache cmake cpufrequtils \
doxygen ethtool g++ git inetutils-tools libboost-all-dev \
libncurses5 libncurses5-dev libusb-1.0-0 libusb-1.0-0-dev \
libusb-dev python3-dev python3-mako python3-numpy python3-requests \
python3-scipy python3-setuptools python3-ruamel.yaml ninja-build
Note
DPDK support is disabled by default.
Building UHD
For arm64, we need to build the UHD driver from source.
Get source code:
git clone https://github.com/EttusResearch/uhd.git
cd uhd/host
Configure and build:
mkdir build && cd build
cmake -DCMAKE_POLICY_DEFAULT_CMD0167=NEW -GNinja ..
ninja
ninja test
sudo ninja install
Download FPGA images:
sudo /usr/local/lib/uhd/utils/uhd_images_downloader.py
Post-build Configuration
We now need to access the configuration files to properly configure the USRP devices and grant access to the USB devices.
Re-build the linker cache:
sudo ldconfig
Set up USB permissions for non-root users:
sudo cp /usr/local/lib/uhd/utils/uhd-usrp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
Testing Installation
We can now verify the installation and access the USRP serial number.
Check USB device detection:
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
Bus 001 Device 067: ID 2500:0020 Ettus Research LLC USRP B210
Search for UHD devices:
uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 14.1.1 20240720; Boost_108300; UHD_4.7.0.0-0-ga5ed1872
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 32FCXXX
name: MyB210
product: B210
type: b200
Note
Please notice the serial number. It will be used to identify the USRP device in the 5G stack.
Get device details:
sudo uhd_usrp_probe
[INFO] [UHD] linux; GNU C++ version 14.1.1 20240720; Boost_108300; UHD_4.7.0.0-0-ga5ed1872
[INFO] [B200] Loading firmware image: /usr/local/share/uhd/images/usrp_b200_fw.hex...
...
[INFO] [B200] Actually got clock rate 16.000000 MHz.
...
| Device: B-Series Device
| _____________________________________________________
| /
| | Mboard: B210
| | serial: 32FCXXX
| | name: MyB210
| | product: 2
| | revision: 4
| | FW Version: 8.0
| | FPGA Version: 16.0
| |
| | Time sources: none, internal, external, gpsdo
| | Clock sources: internal, external, gpsdo
| | Sensors: ref_locked
...
And run a final performance test:
/usr/local/lib/uhd/examples/benchmark_rate --rx_rate 10e6 --tx_rate 10e6
[INFO] [UHD] linux; GNU C++ version 14.1.1 20240720; Boost_108300; UHD_4.7.0.0-0-ga5ed1872
...
Benchmark rate summary:
Num received samples: 100235043
Num dropped samples: 0
Num overruns detected: 0
Num transmitted samples: 100062000
Num sequence errors (Tx): 0
Num sequence errors (Rx): 0
Num underruns detected: 0
Num late commands: 0
Num timeouts (Tx): 0
Num timeouts (Rx): 0
Done!