在 Ubuntu 上构建 GNU Radio

在 Ubuntu 上构建 GNU Radio

Building GNU Radio on Ubuntu Linux

GNU Radio 发行版 3.2

GNU Radio 最新发行版 3.2, 已经对 Ubuntu 9.04 (Jaunty) 有二进制的安装包(binary package )。再也不需预先手动安装构建工具和进行从繁琐的源码安装了。而且 USRP 和 USRP2 的安装和配置是自动完成的。这是最快和最简洁的方法让 GNU Radio 平台运行在你的系统上。

以下的篇幅有点过时而且布局也需做些调整。

安 装选项

这儿提供的信息和脚本用于编译和安装 GNU Radio 及所需的后台程序、库,其可用于  Ubuntu Linux 6.10 ("Edgy") 或其后的版本;也可能适用于此前的版本但这些没有被测试过。
在  Ubuntu 6.10 ("Edgy") 上安装 GNU Radio 可以 由 二进制的安装包(binary package)和软件包管理器基本上完成,但是也有部分软件包需要下载源码以及从源码编译。
在  Ubuntu 7.04 ("Feisty") 及其后的版本上安装 GNU Radio 可以完全 由 二进制的安 装包(binary package)和软件包管理器完成,或者由下载源码再编译也可。

备注:
 GNU Radio 版本 3.0.3 及更早的版本安装在  Ubuntu 7.04 ("Feisty") 上时使用 USRP 功能不稳定; USRP 工作一阵子便死机,需 USRP 或 Ubuntu 重新启动。 在 SVN 可以找到对此的修补。

基于源码构建时的先决条件

以下软件包是安装 GNU Radio 到 Ubuntu 上为编译源码所需。 这些软件包可以通过  "synaptic"、 "dselect"、 或 "apt-get"  来安装。除非有明确的强调,在此便认为各个软件包都应该安装最新的版本。
  • 开发用工具 (编译时所需)
    • g++
    • subversion
    • make
    • autoconf, automake, libtool
    • sdcc (从 "universe"; 2.4 或 更新的)
    • guile (1.6 或更新的)
    • ccache (不是必须的, 如果频繁编译的话建议安装)
  • 库 (实时运行和编译所需)
    • python-dev
    • FFTW 3.X (fftw3, fftw3-dev)
    • cppunit (libcppunit 和 libcppunit-dev)
    • Boost 1.35 (或更新的)
    • libusb and libusb-dev
    • wxWidgets (wx-common) 和 wxPython (python-wxgtk2.8)
    • python-numpy (籍借 python-numpy-ext) (for SVN on or after 2007-May-28)
    • ALSA (alsa-base, libasound2 和 libasound2-dev)
    • Qt (libqt3-mt-dev 用于比 8.04 更早的版本; version 4 用于 8.04 和以后的 )
    • SDL (libsdl-dev)
    • GSL GNU Scientific Library (libgsl0-dev >= 1.10 required for SVN trunk, not in binary repositories for 7.10 and earlier)
  • SWIG (1.3.31 或 更新的)
    • Edgy 及以前版本: 基于源码安装时所需
    • Feisty 或更新的版本: 使用标准软件包安装(swig)
  • QWT (可选项) (5.0.0 或更新的版本)
    • 必须由源码安装 (注:当下 2008-01-15).
    • 8.04 和 8.10 应当使用 qt4. 键入如下命令 : 
sudo apt-get update      便可升级为合适的 qt4.
  • QWT Plot3d Lib
    • 必须安装从而使 gr-qtgui 能够工作。 Ubuntu 8.04 和 8.10 最好使用 qt4。
  • 例程(Polyphase Filter Bank examples)
    • 以便使 gnuradio-examples/python/pfb 下的例程能够工作,需要安装 python-scipy, python-matplotlib, 和 python-tk
  • 其它
    • doxygen (以便能够从源码生成文档)
    • octave (from "universe")

安装脚本

籍希望能提供足够多的指导来将 GNU Radio 设置并运行于 Ubuntu 上,如下脚本的目的是用来“牵手”大多数的用户将 GNU Radio 安装在一个典型的 Ubuntu 上。

  • Edgy 
此部分仅针对 Edgy 或更早的版本(除非是想去除 CDROM 功能,对于 Feisty 或新于它的版本而言,不需做任何更改):
通过如下两种方法之一手动注释所 有的库使得包含 "universe" 和 "multiverse" 
sudo <EDITOR> /etc/apt/sources.list  (方法之一)

通过图形界面 GUI:沿着 System -> Administration -> Software Sources。然后键入 admin 的密码进入。在 "Ubuntu" tab 上,确认所有的 "main restricted universe multiverse" 的选项被选中而其它部分没有被选中(或者做认为对设置合适的工作)。顺序点击"Close" 和 "Reload" 来更新软件包的列单。文件 "/etc/apt/sources.list" 内被注释的行列将会如下一般读入 (DIST 是其具体的发行版本名,诸如:edgy, feisty, gusty, 等等):
deb http://us.archive.ubuntu.com/ubuntu/ DIST main restricted universe multiverse
deb http://us.archive.ubuntu.com/ubuntu/ DIST-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ DIST-security main restricted universe multiverse

更新 本地 dpkg 缓存:
sudo apt-get update

安装所需的包(有些似乎已经被 Ubuntu 缺省的安装上了;有一些似乎同其它的相重叠;无论如何这些包含了除 Edgy 之外所需的所有软件包)

  • Lucid (10.04):
sudo apt-get -y install libfontconfig1-dev libxrender-dev libpulse-dev swig g++ automake libtool python-dev libfftw3-dev \
libcppunit-dev libboost-all-dev libusb-dev fort77 sdcc sdcc-libraries \
libsdl1.2-dev python-wxgtk2.8 subversion git-core guile-1.8-dev \
libqt4-dev python-numpy ccache python-opengl libgsl0-dev \
python-cheetah python-lxml doxygen qt4-dev-tools \
libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools
  • Karmic (9.10):
sudo apt-get -y install swig g++ automake libtool python-dev libfftw3-dev \
libcppunit-dev libboost1.38-dev libusb-dev fort77 sdcc sdcc-libraries \
libsdl1.2-dev python-wxgtk2.8 subversion git-core guile-1.8-dev \
libqt4-dev python-numpy ccache python-opengl libgsl0-dev \
python-cheetah python-lxml doxygen qt4-dev-tools \
libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools
  • Jaunty (9.04): 
需安装软件包 sdcc-nf needs  (而不是 sdcc)
sudo apt-get -y install swig g++ automake1.9 libtool python2.5-dev fftw3-dev \
libcppunit-dev libboost1.35-dev sdcc-nf libusb-dev \
libsdl1.2-dev python-wxgtk2.8 subversion git guile-1.8-dev \
libqt4-dev python-numpy ccache python-opengl libgsl0-dev \
python-cheetah python-lxml doxygen qt4-dev-tools \
libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools
如果 安装是来自对旧版本的升级,那就是说安装了python-wxgtk2.6。其原因是 python-wxgtk2.6 比 python-wxgtk2.8 有更高的优先级被安装,它必须使用如下指令被去除: 

sudo apt-get remove python-wxgtk2.6 
  • Intrepid (8.10): 
需安装软件包 sdcc-nf needs  (而不是 sdcc)
sudo apt-get -y install swig g++ automake1.9 libtool python-dev fftw3-dev \
libcppunit-dev libboost1.35-dev sdcc-nf libusb-dev \
libsdl1.2-dev python-wxgtk2.8 subversion git guile-1.8-dev \
libqt4-dev python-numpy ccache python-opengl libgsl0-dev \
python-cheetah python-lxml doxygen qt4-dev-tools \
libqwt5-qt4-dev libqwtplot3d-qt4-dev pyqt4-dev-tools
  • Hardy (8.04): 
如  README.building-boost 所阐述的一样 应当安装  Boost。
sudo apt-get -y install swig g++ automake1.9 libtool python-dev fftw3-dev \
libcppunit-dev sdcc libusb-dev libasound2-dev libsdl1.2-dev \
python-wxgtk2.8 subversion guile-1.8-dev libqt4-dev python-numpy-ext \
ccache python-opengl libgsl0-dev python-cheetah python-lxml doxygen \
libqwt5-qt4-dev libqwtplot3d-qt4-dev qt4-dev-tools
  • Gutsy (7.10): 
如  README.building-boost 文档所阐述的一样 应当安装  Boost。也需要 GSL 。
sudo apt-get -y install g++ automake libtool python-dev fftw3-dev \
libcppunit-dev sdcc libusb-dev libasound2-dev \
libsdl1.2-dev python-wxgtk2.8 subversion guile-1.8-dev libgsl0-dev \
libqt3-mt-dev python-numpy-ext swig ccache
  • Feisty (7.04): 
如  README.building-boost 文档所阐述的一样 应当安装  Boost。也需要 GSL 。
sudo apt-get -y install g++ automake1.9 libtool python-dev fftw3-dev \
libcppunit-dev sdcc libusb-dev libasound2-dev \
libsdl1.2-dev python-wxgtk2.8 subversion guile-1.6-dev\
libqt3-mt-dev python-numpy-ext swig ccache
  • Edgy (6.10): 
强 烈建议使用上面的新发行版之一
sudo apt-get -y install g++ automake1.9 libtool python-dev fftw3-dev \
libcppunit-dev libboost-dev sdcc libusb-dev libasound2-dev \
libsdl1.2-dev python-wxgtk2.6 subversion guile-1.6-dev \
libqt3-mt-dev python-numpy-ext ccache
备注:如上的 Edgy 安装  python-wxgtk-2.6。这对于 GNURadio 以前的版本的用户是没问题,但对于最新 GNURadio 的  svn snapshots  (svn 快照技术)显得过于古老。若想基于最新的  svn 快照技术 (svn snapshot)构建 GNURadio,便需  wxgtk version 2.8 或更新。
可以到  wxwidgets debian 和 ubuntu 的知识栈库安装最新的版本的  wxwidgets。
查阅   Installing latest wxgtk-2.8 packages on debian or Ubuntu 进行选项安装;有些也许已经在以前的命令中已经被成功地安装到系统中。
sudo apt-get -y install gkrellm wx-common libwxgtk2.8-dev alsa-base autoconf xorg-dev g77 gawk bison openssh-server emacs cvs usbview octave
(以下)仅适于 Edgy :  获取、编译、然后安装 SWIG 
wget http://prdownloads.sourceforge.net/swig/swig-1.3.33.tar.gz
tar zxf swig-1.3.33.tar.gz
cd swig-1.3.33
./configure
make
sudo make install
cd ..
可选项 获取、编译、然后安装  QWT 5.0.0 (或 更新): 
备注: 不必设置诸如  "QTDIR" 或 "QWT_CFLAGS" 的环境变量,  (在此) 不必理睬这些。
wget http://superb-east.dl.sourceforge.net/sourceforge/qwt/qwt-5.0.2.tar.bz2
tar jxf qwt-5.0.2.tar.bz2
cd qwt-5.0.2
  • 现在编辑 qwtconfig.pri:
将  UNIX 版本的  "INSTALLBASE”置换为 “/usr/local ”(原为  "/usr/local/qwt-5.0.2" );
将原来的  "doc.path" 变换为 "$$INSTALLBASE/doc/qwt" ;
Save, exit(保存,推出)。


"doc" 是由 HTML 和 man 格式构建,这些都位于  /usr/local/doc/{html,man}。它不是标准路径,但分离出这些似乎也不是一件容易的事情,所以对它弃之不予理睬:
qmake
make
sudo make install
cd ..

安装 Boost

对于 Ubuntu 8.04 或更早的版本,下载并安装 Boost 1.35 或更新版本如下(参阅文档 README.building-boost):

1) 在 boost.sourceforge.net 下载最新的 boost 的版本 (在写此文时 boost_1_37_0.tar.bz2 是最新的版本)。

2) 就地解压缩并进入该目录
$ cd boost_1_37_0

3) 选择前缀来安装。比如使用 /opt/boost_1_37_0

$ BOOST_PREFIX=/opt/boost_1_37_0
4) 配置
$ ./configure --prefix=$BOOST_PREFIX --with-libraries=thread,date_time,program_options
5) 编译
$ make
6) 安装
$ sudo make install

$ cd ..

安装 GNU Radio

  • 下载、bootstrap、配置,和编译 GNU Radio 软件包:
  • 使 用 git 来安装 GNU Radio
git clone http://gnuradio.org/git/gnuradio.git

cd gnuradio
export LD_LIBRARY_PATH=$BOOST_PREFIX/lib # As per the instructions for installing Boost

./bootstrap
./configure --with-boost=$BOOST_PREFIX # As per the instructions for installing Boost
make
可选项:运行 GNU Radio 的自检程序;这并不需 USRP。
make check
即使有一个甚至一些测试没能通过,但 GNU Radio 也有可能功能性正常工作。尽管如此,到邮件列表寻求解决的方案或者将解决的方案贡献到列表是比较理智的做法。有此善举之时,不要忘记附带如下信息:OS 类型、OS 版本、CPU 类型(诸如,使用 "uname -a"获得的)、任何有关硬件的特别之处、软件的版本 (诸如:gcc, g++, swig, sdcc, 等)以及如何安装(标准或非标软件包,源代码)。
  • 下面,就一般用途安装 GNU Radio (缺省安装到 /usr/local):
sudo make install
  • Ubuntu 使用 udev 来处理设备的热插拔问题,而且缺省地不给 non-root 用户提供读取 USRP 的权限。以 下脚本摘自 directions,它赋予群在无论在在线或热插拔状态下,都能够通过 USB 掌控 USRP。
sudo addgroup usrp
sudo usermod -G usrp -a <YOUR_USERNAME>
echo 'ACTION=="add", BUS=="usb", SYSFS{idVendor}=="fffe", SYSFS{idProduct}=="0002", GROUP:="usrp", MODE:="0660"' > tmpfile
sudo chown root.root tmpfile
sudo mv tmpfile /etc/udev/rules.d/10-usrp.rules
  • 至此,配置后的 Ubuntu 知道如何处置在 USB 上检测到的 USRP,除非该“udev”需要重载更新,以便包含刚产生的新规约。如下可能如此, 如果异常的话,重启计算机将肯定如愿。
sudo udevadm control --reload-rules
sudo /etc/init.d/udev stop
sudo /etc/init.d/udev start
sudo killall -HUP udevd
当 USRP 被插入系统后,可以使用如下命令通过检查  /dev/bus/usb 来查看是否被认知:
ls -lR /dev/bus/usb | grep usrp
结果会显示一、两行信息(每个USRP 占据一行)如下:
crw-rw---- 1 root usrp 189, 514 Mar 24 09:46 003
每个设备文件的列表将以‘usrp' 作为群( group )、  'crw-rw----' 作为状态( mode)。
    • 备注:如果系统是 Feisty 或更新的,或许需要重启计算机以便使得 GNU Radio 正常接口 USRP。但对于 Edgy 这似乎是多余的。
  • USRP 一旦被 Ubuntu 确认,接下来便是确认 GNU Radio 同 USRP 是否配合得当(没有安装 USRP,当然可以略过这一步)。或许 "usrp_benchmark_usb" 检测表明无法达到满负荷的 32 MB/s,但是先保证脚本至少可以运行正常;如果有问题(脚本无法运行正常),要么可能是 GNU Radio 系统出问题,要么可能是 USRP 无法读取。在目录 "gnuradio" 下,确认以下步骤工作正常:
    • Python 和 USRP 的接口;
测试宿主机和 USRP 之间一个大致的最大数据吞吐量(以 2 的幂来表示)。
cd gnuradio-examples/python/usrp
./usrp_benchmark_usb.py
    • C++ 和 USRP 的接口;
测试宿主机和 USRP 之间一个大致的最大数据吞吐量(非量化)
cd usrp/host/apps
./test_usrp_standard_tx
./test_usrp_standard_rx
  • 升级系统,操作完成后或许需要重启系统:
sudo apt-get -y upgrade
  • 升级 Linux 的发布版本信息库,完成后需重启系统:
sudo apt-get -y dist-upgrade

Debian 和 Ubuntu 系统的的 libtool 故障

Debian 和 Ubuntu 系统在完善 libtool 的 upstream version 不尽人意,它们在安装代码和库之前会失去测试的这些代码和库能力。但是安装之前的测试不失是个好主意。为了解决这个问题,请将把 $PREFIX/lib (和 64 位机器的 $PREFIX/lib64) 包含在 /etc/ld.so.conf 之中。


如果没有这样做的话(把 $PREFIX/lib包含在 /etc/ld.so.conf 之中),在构建的链接阶段便会看见出错信息。这现象将会在多处出现。最有可能是在构建 mblocks 第一次出现。这不是 mblocks 的问题,是 Debian/Ubuntu 自身的问题。

如下步骤便可解决这些“问题”:

1) 将当前的 ld.so.conf 文件拷贝并保存到 temp 目录下如下:
cp /etc/ld.so.conf /tmp/ld.so.conf
2) 添加路径 /usr/local/lib:
echo /usr/local/lib >> /tmp/ld.so.conf
3)如果手动安装 Boost (比如:version 1_37_0),添加它的库函数路径如下: 
echo /opt/boost_1_37_0/lib >> /tmp/ld.so.conf
4) 删除原 ld.so.conf 文件,用如上编辑后的文件替代它:
sudo mv /tmp/ld.so.conf /etc/ld.so.conf
5) 运行 ldconfig:
sudo ldconfig

你可能感兴趣的:(在 Ubuntu 上构建 GNU Radio)