InstallingGRFromSource on Raspberry Pi: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
(replicate Ubuntu 18 + libpthread-stubs0-dev)
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<p>These instructions have been tested with the <q>Raspbian Buster with desktop and recommended software</q> Operating System on a Raspberry Pi 3B+. A 32GB microSD card is recommended.</p>
<!-- InstallingGRFromSource_on_Raspberry_Pi -->
Note that there is a pre-built 32-bit SDR flavored Raspberry Pi OS distro, [https://github.com/luigifcruz/pisdr-image PiSDR] that includes GNU Radio and other SDR utilities.  Alternatively, you can install from source using the steps in the remainder of this page.
 
These instructions have been tested with the <q>Raspberry Pi OS (previously called Raspbian) (32-bit) with desktop and recommended software</q> on a Raspberry Pi 3B+. A 32GB microSD card is recommended.
 
== Set up a swap file ==
 
A swap file will improve the compile time greatly.
 
<pre>
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
</pre>
<p>To make the swap file permanent, add this line to /etc/fstab</p>
<pre>
/swapfile  none  swap  sw  0  0
</pre>


== Load prerequisites ==
== Load prerequisites ==
<p>You may have some of these prerequisites already, but it doesn't hurt to get them again and check for the latest versions.</p>
 
You may have some of these prerequisites already, but it doesn't hurt to get them again and check for the latest versions.
 
<pre>
<pre>
sudo apt update --allow-releaseinfo-change
sudo apt update --allow-releaseinfo-change
Line 10: Line 30:
libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 \
libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 \
liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins \
liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins \
python3-zmq python3-scipy libpthread-stubs0-dev
python3-zmq python3-scipy libpthread-stubs0-dev libusb-1.0-0 libusb-1.0-0-dev \
libudev-dev python3-setuptools build-essential liborc-0.4-0 liborc-0.4-dev \
python3-gi-cairo
</pre>
 
You might, or might not, need:
 
<pre>
sudo apt install python3-docutils python3-pip
pip install pygccxml
</pre>
 
== Install UHD from source ==
 
If you want to use GNU Radio with a USRP, install the UHD package from source using the following instructions.
UHD sits at the same level as GNU Radio as an independent driver, which gr-uhd references.  So if you want gr-uhd enabled, you <b>FIRST</b> must clone and install UHD.
 
For this example, we will start in the home directory to parallel the steps in [[InstallingGR#From_Source]].
 
<pre>cd ~/</pre>
 
Clone the code into your home directory:
 
<pre>
git clone https://github.com/EttusResearch/uhd.git
cd ~/uhd
</pre>
</pre>


== Set up a swap file ==
<b>Note:</b> In the following command, change <code>v4.0.0.0</code> to some other branch or tag if you want to build a different version.
<p>A swap file will improve the compile time greatly.</p>
<pre>
git checkout v4.0.0.0
</pre>
 
<b>Note:</b> Unlike most build processes, UHD builds under the <code>host</code> directory.
<pre>
cd host
mkdir build
cd build
</pre>
 
<b>Note:</b> In the following command, we will use <code>-DCMAKE_INSTALL_PREFIX=/usr/local</code> to install UHD into the same prefix as GNU Radio. When compiling for ARM platforms, the assumption is made that NEON extensions are available if the arm_neon.h header is found. However, for platforms such as Raspberry Pi, one must specify -DNEON_SIMD_ENABLE=OFF in the following command.
 
<pre>
cmake -DNEON_SIMD_ENABLE=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../
</pre>
 
<b>Note:</b> In the following command, if your computer's CPU has multiple cores, you can use the argument <code>-j#</code> to speed compilation; <br> e.g., <code>make -j3</code> will use 3 threads in the build. Specify at least one less than the number of CPU cores so the system does not appear to 'freeze' during the build. If not specified, then a single thread is used for the build; this is not necessarily a bad thing, but it will take roughly 2 times as long to build as using 2 threads, and roughly 3 times as long to build as using 3 threads.<br>
 
<pre>
make -j3
make test
sudo make install
</pre>
 
If you're running Linux, then always do the following command after installing any library:
 
<pre>sudo ldconfig</pre>
 
You can now download the UHD FPGA Images for this installation.
<pre>
sudo uhd_images_downloader
</pre>
 
On Linux, udev handles USB plug and unplug events. The following commands install a udev rule so that non-root users may access the device.
<pre>
<pre>
sudo fallocate -l 2G /swapfile
cd ~/uhd/host/utils
sudo chmod 600 /swapfile
sudo cp uhd-usrp.rules /etc/udev/rules.d/
sudo mkswap /swapfile
sudo udevadm control --reload-rules
sudo swapon /swapfile
sudo udevadm trigger
</pre>
</pre>
<p>To make the swap file permanent, add this line to /etc/fstab</p>
 
The installation of UHD is now complete. At this point, connect the USRP to the host computer and run:
<pre>
<pre>
/swapfile  none  swap  sw  0  0
uhd_usrp_probe
</pre>
</pre>


== Build ==
== Install GNU Radio ==
<p>The next steps will take two or more hours. Be patient. The terminal does show the progress.</p>
 
<b>The next steps will take two or more hours. Be patient. The terminal does show the progress.</b>


Click [[InstallingGR#To_install_system_wide|here]] to show install instructions.
Click [[InstallingGR#From_Source]] to go to the install instructions.

Revision as of 18:15, 23 April 2022

Note that there is a pre-built 32-bit SDR flavored Raspberry Pi OS distro, PiSDR that includes GNU Radio and other SDR utilities. Alternatively, you can install from source using the steps in the remainder of this page.

These instructions have been tested with the Raspberry Pi OS (previously called Raspbian) (32-bit) with desktop and recommended software on a Raspberry Pi 3B+. A 32GB microSD card is recommended.

Set up a swap file

A swap file will improve the compile time greatly.

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

To make the swap file permanent, add this line to /etc/fstab

/swapfile  none  swap  sw  0  0

Load prerequisites

You may have some of these prerequisites already, but it doesn't hurt to get them again and check for the latest versions.

sudo apt update --allow-releaseinfo-change
sudo apt upgrade
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 libpthread-stubs0-dev libusb-1.0-0 libusb-1.0-0-dev \
libudev-dev python3-setuptools build-essential liborc-0.4-0 liborc-0.4-dev \
python3-gi-cairo

You might, or might not, need:

sudo apt install python3-docutils python3-pip
pip install pygccxml

Install UHD from source

If you want to use GNU Radio with a USRP, install the UHD package from source using the following instructions. UHD sits at the same level as GNU Radio as an independent driver, which gr-uhd references. So if you want gr-uhd enabled, you FIRST must clone and install UHD.

For this example, we will start in the home directory to parallel the steps in InstallingGR#From_Source.

cd ~/

Clone the code into your home directory:

git clone https://github.com/EttusResearch/uhd.git
cd ~/uhd

Note: In the following command, change v4.0.0.0 to some other branch or tag if you want to build a different version.

git checkout v4.0.0.0

Note: Unlike most build processes, UHD builds under the host directory.

cd host
mkdir build
cd build

Note: In the following command, we will use -DCMAKE_INSTALL_PREFIX=/usr/local to install UHD into the same prefix as GNU Radio. When compiling for ARM platforms, the assumption is made that NEON extensions are available if the arm_neon.h header is found. However, for platforms such as Raspberry Pi, one must specify -DNEON_SIMD_ENABLE=OFF in the following command.

cmake -DNEON_SIMD_ENABLE=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../

Note: In the following command, if your computer's CPU has multiple cores, you can use the argument -j# to speed compilation;
e.g., make -j3 will use 3 threads in the build. Specify at least one less than the number of CPU cores so the system does not appear to 'freeze' during the build. If not specified, then a single thread is used for the build; this is not necessarily a bad thing, but it will take roughly 2 times as long to build as using 2 threads, and roughly 3 times as long to build as using 3 threads.

make -j3
make test
sudo make install

If you're running Linux, then always do the following command after installing any library:

sudo ldconfig

You can now download the UHD FPGA Images for this installation.

sudo uhd_images_downloader

On Linux, udev handles USB plug and unplug events. The following commands install a udev rule so that non-root users may access the device.

cd ~/uhd/host/utils
sudo cp uhd-usrp.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

The installation of UHD is now complete. At this point, connect the USRP to the host computer and run:

uhd_usrp_probe

Install GNU Radio

The next steps will take two or more hours. Be patient. The terminal does show the progress.

Click InstallingGR#From_Source to go to the install instructions.