Saturday, September 8, 2012

Compiling GNURadio on the Raspberry Pi (Raspi)


I've been meaning to post this for a few weeks so today I'm going to jot down just the most pertinent information, in hopes that someone may benefit from what I learned.

So a few weeks ago I set out to compile Gnuradio on my Raspberry Pi. It took a lot of digging (googling) but thanks to many users who encountered similar challenges, I was able to piece together the recipe below, that should result in a compiled gnu radio installation.

Although Patch VonBraun's GNURadio build script didn't do the trick, I used it for reference when coming up with the following steps.

In the following section, lines starting with "#" should be executed as the root user. Lines starting with "$" may be executed as your favorite raspberry pi user.


build and activate an 800MB swap

(Credit to bredman@raspberrypi.org for posting these steps on the forum - thank you)


  # swapoff
  # swapoff -a
  # sudo dd if=/dev/zero of=/myswap bs=1024 count=800k
  # mkswap /myswap
  # free -m
  # swapon /myswap
  # free -m

 

Prerequisites

* Raspberry pi wheezy/sid (make sure to get a suitable image)    *** Image 2014-06-20-wheezy-raspbian.zip (Wheezy 7.5) is too new, not supported by build script yet.
    *** Image 2014-01-07-wheezy-raspbian.zip (Wheezy 7.2) should work perfectly with this procedure :)
    *** Raspian images prior to January 2014 should work as long as the version is listed: "*6.0*|*wheezy*|*sid*|*7.1*|*7.0*|*7.2*|*7.3*|*7.4*)"



Option-1: build-gnuradio script (recommended) 

As the pi user (or another user with sudo access) run the following commands

$ cd; mkdir gnuradio; cd gnuradio
$ wget http://www.sbrac.org/files/build-gnuradio
$ chmod 755 ./build-gnuradio
$ ./build-gnuradio -v

Monitor the screen for the first 20 minutes and make it doesn't exit with an error. If it does, try running it a second time. Otherwise if it seems to be running, let it run, and come back in 24 hours :)

Big thanks to patchvonbraun for building and maintaining the build-gnuradio script!

Option-2: build from source manually

Install prerequisite packages

  # apt-get install python-cheetah libboost-all-dev python-lxml python-wxgtk2.8 python-numpy python-lxml libfftw3-dev libsdl1.2-dev python-scipy python-matplotlib python-tk octave liboctave-dev libgsl0-dev python-sphinx libcppunit-dev libuhd-dev swig python-qt4-dev libqwt-dev git

Check-out the latest copy of the gnuradio source tree

  $ cd ; mkdir gnuradio; cd gnuradio
  $ time git clone http://gnuradio.org/git/gnuradio.git

cd into the build directory and run cmake.

  $ cmake -Dhave_mfpu_neon=0 -DCMAKE_CXX_FLAGS:STRING="-march=armv6 -mfpu=vfp -mfloat-abi=hard" -DCMAKE_C_FLAGS:STRING="-march=armv6 -mfpu=vfp -mfloat-abi=hard" ../
 

Compile (Takes about 24 hours!)

  $ make
 

Install

  $ sudo make install



Remaining Tasks
  • Get osmosdr, gr-baz, and any other extras to compile.

11 comments:

  1. are you able to use gnuradio-companion? does the pi have enough horsepower to use gnu radio blocks to do even simple fm demodulation?

    ReplyDelete
  2. Hi!
    I compiled on the basis of the above description and the GnuRadio, rtlsdr. The GRC start simple (signal source - audio sink) works, but if it is complex-float conversion, or the like, you can freeze it all. What went wrong? Please help me!

    ReplyDelete
  3. cmake -Dhave_mfpu_neon=0 -DCMAKE_CXX_FLAGS:STRING="-march=armv6 -mfpu=vfp -mfloat-abi=hard" -DCMAKE_C_FLAGS:STRING="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
    CMake Error at CMakeLists.txt:22 (message):
    Prevented in-tree build. This is bad practice.


    -- Configuring incomplete, errors occurred!

    ReplyDelete
    Replies
    1. 2013-02-09-wheezy-raspbian ,had the same problem.
      compiling can be started by inserting a # in front of line 21,22,23 in file CMakeLists.txt. Sure that i doesn't solve
      the problem of this "bad practice" but still allows the script to continue with compiling.

      Thank you for providing this info , helped me a lot

      Delete
  4. works fine with latest and updated raspbian-img.
    Thank you for this guide!

    ReplyDelete
  5. Thanks for the guide, it works flawlessly! I had a little trouble while compiling. That common smsc95xx kernel error. Discovered it while the make run in the kernel log. It slowed down the make process. I had to disable smsc95xx turbo mode at the kernel (cmdline.txt), then continue make from 37%. I think it was because of the mmc0 being written hard. (I'm using an UHS-I card.) Thanks again!

    ReplyDelete
  6. /It could be better to do this on nfs or an USB-HDD. Oh well, nice to know that the SDHC card I use is tough enough./ :)

    ReplyDelete
  7. This comment has been removed by the author.

    ReplyDelete
  8. Twice I did the compiling. Once with distcc and once on the Pi alone. And both times I get the same issues not finding the libraries:

    E.g:
    gnuradio-config-info: error while loading shared libraries: libgnuradio-runtime-3.7.3git.so.0.0.0: cannot open shared object file: No such file or directory

    Any suggestions?

    ReplyDelete
    Replies
    1. Found the solution - just run "sudo ldconfig" and everything is fine :) You could add that to this great guide

      Delete