InstallingGRFromSource on Raspberry Pi: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
(add UHD instructions)
(reorganize and update)
Line 1: Line 1:
<!-- InstallingGRFromSource_on_Raspberry_Pi -->
<!-- InstallingGRFromSource_on_Raspberry_Pi -->
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.
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.


<p>If you want to use GNU Radio with a USRP, install the UHD package from source using the following instructions.
== Set up a swap file ==
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.</p>
 
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 ==
 
You may have some of these prerequisites already, but it doesn't hurt to get them again and check for the latest versions.
 
<pre>
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 python-docutils build-essential liborc-0.4-0 liborc-0.4-dev
</pre>


== Install UHD from source ==
== Install UHD from source ==


For this example, we will start in the home directory to parallel the steps in [[InstallingGR#To_install_system_wide]].
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.


* <code>cd</code>
For this example, we will start in the home directory to parallel the steps in [[InstallingGR#From_Source]].


The following command line script will install all the required dependencies for UHD:
<pre>cd ~/</pre>
* <code>sudo apt-get install libboost-all-dev libusb-1.0-0-dev python-mako doxygen python-docutils cmake build-essential</code>


Clone the code into your home directory:
Clone the code into your home directory:
* <code>git clone git://github.com/EttusResearch/uhd.git</code>
* <code>cd ~/uhd</code>


<b>Note:</b> By default, you have the <code>master</code> branch after you have cloned from git. To get a list of available branches, enter <code>git branch</code>. To get a list of available tags, enter <code>git tag -l</code> (that's a lower case L). Use the following command to change to another branch or tag if you want to build a different version.
<pre>
* <code>git checkout <your branch or tag></code>
git clone git://github.com/EttusResearch/uhd.git
cd ~/uhd
</pre>
 
<b>Note:</b> In the following command, change <code>v3.15.0.0</code> to some other branch or tag if you want to build a different version.
<pre>
git tag -l
git checkout v3.15.0.0
</pre>


<b>Note:</b> Unlike most build processes, UHD builds under the <code>host</code> directory.
<b>Note:</b> Unlike most build processes, UHD builds under the <code>host</code> directory.
* <code>cd host</code>
<pre>
* <code>mkdir build</code>
cd host
* <code>cd build</code>
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 <code>-DNEON_SIMD_ENABLE=OFF</code> in the following command.
<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.
* <code>cmake -DNEON_SIMD_ENABLE=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../</code>
 
<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>
<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>
* <code>make -j3</code>


* <code>make test</code>
<pre>
* <code>sudo make install</code>
make -j3
make test
sudo make install
</pre>


If you're running Linux, then always do the following command after installing any library:
If you're running Linux, then always do the following command after installing any library:
* <code>sudo ldconfig</code>


== Install GNU Radio ==
<pre>sudo ldconfig</pre>


=== Load prerequisites ===
You can now download the UHD FPGA Images for this installation.
<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>
<pre>
<pre>
sudo apt update --allow-releaseinfo-change
sudo uhd_images_downloader
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
</pre>
</pre>


=== Set up a swap file ===
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.
<p>A swap file will improve the compile time greatly.</p>
<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]] to go to the install instructions.
Click [[InstallingGR#From_Source]] to go to the install instructions.

Revision as of 11:24, 7 July 2020

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 python-docutils build-essential liborc-0.4-0 liborc-0.4-dev

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 git://github.com/EttusResearch/uhd.git
cd ~/uhd

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

git tag -l
git checkout v3.15.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.