日誌


2013/04/23

Ubuntu 12.04 に GNU Radio(UHD対応版)をインストール

Tweet ThisSend to Facebook | by 山田洋
Ubuntu 12.04 に gnuradio Release 3.6.4.1 をインストールしたメモ(成功)

1.インストールするマシンの環境
CPU+マザーボード: Core2Duo E8400 + Intel DG45ID
メモリ: 2GB(PC6400 DDR2-800)
ビデオ: Gigabyte GV-N94T-512H Geforce9400GT
OS:Ubuntu 12.04 インストール & update ずみ
デスクトップマシンで、ギガビットネットワークインタフェースは2個ある。一つはオンボードのネットワーク端子でインテルチップ、もう一つは拡張スロットにさしたRealtek製のチップが載ったカードである。

2.インストール方法の選択
まず、下記のページに目を通す。
http://gnuradio.org/redmine/projects/gnuradio/wiki/InstallingGR

すると、インストール方法には以下の4通りがあるとの記載がある。
  • Using the build-gnuradio script
  • Using Pre-compiled Binaries
  • Using pre-compiled binaries from Ettus Research
  • Installing manually from source
ここでは、build-gnuradio script を用いることにする。この方法は、最新リリース版のGNU RadioのソースコードをGitにより取得してビルドを自動的に行ってくれるので、とても便利。Marcus Leech さんという方が作成・公開下さっているそうです(感謝)。

3.ビルドスクリプトの実行
ホームディレクトリにsrcというフォルダを作成し、 cd src してから下記を実行した。
wget http://www.sbrac.org/files/build-gnuradio && chmod a+x ./build-gnuradio && ./build-gnuradio

上記のコマンドにより、おおよそ以下の作業が行われるようだ。

(1) Ubuntu側に必要なパッケージを調べ、なければインストール
(2) GNU Radioの最新リリース版のソースコードを取得して、ビルド・インストール
(3) UHD(USRP hardware driver)関連のビルド・インストール
(4) Ettus社から種々のUSRP用のFPGAイメージファイルとファームウエアをダウンロードしてUbuntuの所定ディレクトリに保管
(5) 最後に画面にちょっとした注意事項を表示

結果として、インストール作業を行ったディレクトリには、ソースコード一式が残るので、後日、それを参照することもできる。ちなみに、今回インストールした版のGNU Radioのソースコードパッケージは、下記にある。
http://gnuradio.org/releases/gnuradio/gnuradio-3.6.4.1.tar.gz
これを全く意識しなくても、build-gnuradio script がビルド作業を実施してくれる。ビルド作業時に画面に表示される内容は末尾に記載する。

4.インストール後の設定
注意表示に従い、
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
を.bashrc ファイルに追加
 
5.ネットワーク周りの設定
今回インストールしたデスクトップマシンには、ギガビットイーサネットワークインタフェース(GBE)が2個ある。そのうち、より性能が期待できるオンボードのインテル製チップのGBEを GNU Radio / USRP で使用し、Realtek製チップのGBEをインターネット接続に使用したい。ifconfigコマンドで確認すると、Realtekがeth0、インテルがeth1として認識されている。これを逆にしたほうが、GNU Radio用のスクリプトを異なるマシン間などで共用する場合に何かと都合が良い気がするので、/etc/udev/rules.d/70-persistent-net.rules を以下のように変更した(eth0とeth1を書き換えただけ)。

# PCI device 0x10ec:/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="4c:e6:76:d8:2c:4a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:19.0 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1c:c0:70:1a:0a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

また、eth0は固定IPアドレスとしてUSRPだけを接続し、eth1はDHCPでIPアドレスを割り当てしてインターネット閲覧に使用したいので、/etc/network/interfaces の内容を以下のように設定した(元々あった2行のあとに赤色文字の内容を追加した)。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.10.1
    netmask 255.255.255.0

auto eth1
iface eth1 inet dhcp


※その後、ファイル共有などのため、インターネットに接続するポートについても固定IPアドレスを割り振りした。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.10.1
    netmask 255.255.255.0

auto eth1
iface eth1 inet static
    address 172.18.xx.xxx
    netmask 255.255.255.0
    gateway 172.18.xx.1
    dns-nameservers 192.244.xx.xxx

6.USRP N210の準備
USRP N210のIPアドレス設定と、FPGAイメージファイルおよびファームウエアの書き込みを行う。
(参考)
http://files.ettus.com/uhd_docs/manual/html/usrp2.html#setup-the-host-interface

■重要なディレクトリ
/usr/local/lib/uhd/utils
にusrp_n2xx_net_burner.pyやusrp2_card_burner.pyがある。

/usr/local/share/uhd/images
に各種のUSRP用のFPGAイメージファイルやファームウエアがある。

/usr/local/bin
に uhd_find_devices や uhd_fft や uhd_usrp_probe などがある。

/usr/local/share/doc/gnuradio-3.6.4.1/html
にDoxygenで自動生成されたドキュメントがある。

■USRP N210のIPアドレスの設定
cd /usr/local/lib/uhd/utils
sudo ./usrp2_recovery.py --ifc=eth0 --new-ip=192.168.10.2
ちなみに、このコマンドは、This method assumes that you do not know the IP address of your USRP2.It uses raw Ethernet packets to bypass the IP/UDP layer to communicate with the USRP2. だそうです。USRP N210 でも USRP2 でも使えました。

■動作に必要なFPGAイメージファイルとファームウエアをUSRP N210 に書き込む
cd /usr/local/lib/uhd/utils
sudo ./usrp_n2xx_net_burner.py --addr=192.168.10.2 --fpga=/usr/local/share/uhd/images/usrp_n210_r3_fpga.bin # Hardware typeに合わせてファイルを選択する(今回はr3)。
sudo ./usrp_n2xx_net_burner.py --addr=192.168.10.2 --fw=/usr/local/share/uhd/images/usrp_n210_fw.bin

uhd_find_devices や uhd_fft などが無事に正常動作した。USRP2 に対しては、 usrp2_card_burner_gui.py でUSRP2用のFPGAイメージファイルとファームウエアを書き込むことで、同様に動作しました。

付録:build-gnuradio script 実行時の画面表示(core 2 duo E8400 3GHzで1時間10分くらい要した)
This script will install Gnu Radio from current GIT sources
You will require Internet access from the computer on which this
script runs. You will also require SUDO access. You will require
approximately 500MB of free disk space to perform the build.
 
This script will, as a side-effect, remove any existing Gnu Radio
installation that was installed from your Linux distribution packages.
It must do this to prevent problems due to interference between
a linux-distribution-installed Gnu Radio/UHD and one installed from GIT source.
 
The whole process may take up to two hours to complete, depending on the
capabilities of your system.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NOTE: if you run into problems while running this script, you can re-run it with
the --verbose option to produce lots of diagnostic output to help debug problems.
This script has been written to anticipate some of the more common problems one might
encounter building ANY large, complex software package. But it is not pefect, and
there are certainly some situations it could encounter that it cannot deal with
gracefully. Altering the system configuration from something reasonably standard,
removing parts of the filesystem, moving system libraries around arbitrarily, etc,
it likely cannot cope with. It is just a script. It isn't intuitive or artificially
intelligent. It tries to make life a little easier for you, but at the end of the day
if it runs into trouble, a certain amount of knowledge on your part about
system configuration and idiosyncrasies will inevitably be necessary.


Proceed?y
Starting all functions at: 2013年 4月 19日 金曜日 16:54:15 JST
SUDO privileges are required
Do you have SUDO privileges?y
Continuing with script
[sudo] password for sdr:
Installing prequisites...Checking for package libfontconfig1-dev
Checking for package libxrender-dev
Checking for package libpulse-dev
Checking for package swig
Checking for package g++
Checking for package automake
Checking for package autoconf
Checking for package libtool
Checking for package python-dev
Checking for package libfftw3-dev
Checking for package libcppunit-dev
Checking for package libboost1.48-all-dev
Checking for package libusb-dev
Checking for package libusb-1.0-0-dev
Checking for package fort77
Checking for package libsdl1.2-dev
Checking for package python-wxgtk2.8
Checking for package git-core
Checking for package guile-1.8-dev
Checking for package libqt4-dev
Checking for package python-numpy
Checking for package ccache
Checking for package python-opengl
Checking for package libgsl0-dev
Checking for package python-cheetah
Checking for package python-lxml
Checking for package doxygen
Checking for package qt4-dev-tools
Checking for package libusb-1.0-0-dev
Checking for package libqwt5-qt4-dev
Checking for package libqwtplot3d-qt4-dev
Checking for package pyqt4-dev-tools
Checking for package python-qwt5-qt4
Checking for package cmake
Checking for package git-core
Checking for package wget
Checking for package libxi-dev
Checking for package python-docutils
Checking for package gtk2-engines-pixbuf
Checking for package r-base-dev
Checking for package python-tk
Checking for package liborc-0.4-0
Checking for package liborc-0.4-dev
Checking for package libasound2-dev
Checking for package python-gtk2
Checking for library libusb ...Found library libusb
Checking for library libboost ...Found library libboost
Checking for library libcppunit ...Found library libcppunit
Checking for library libguile ...Found library libguile
Checking for library libfftw ...Found library libfftw
Checking for library libgsl ...Found library libgsl
Done
Fetching Gnu Radio via GIT...Done
Fetching UHD via GIT...Fetching rtl-sdr (rtl-sdr, and gr-osmosdr) via GIT
Done
Starting function uhd_build at: 2013年 4月 19日 金曜日 17:05:04 JST
Building UHD...Done building/installing UHD
Done function uhd_build at: 2013年 4月 19日 金曜日 17:13:29 JST
Starting function firmware at: 2013年 4月 19日 金曜日 17:13:29 JST
Downloading images from: http://files.ettus.com/binaries/maint_images/archive/uhd-images_003.005.002-release.zip
 7.23 MB/7.23 MB (100.00%)
Images successfully installed to: /usr/local/share/uhd/images
Done downloading firmware to /usr/local/share/uhd/images
Done function firmware at: 2013年 4月 19日 金曜日 17:13:40 JST
Starting function gnuradio_build at: 2013年 4月 19日 金曜日 17:13:40 JST
/usr/local/lib already in ld.so.conf.d
Doing ldconfig...
Building Gnu Radio...
...Doing cmake
...Cmaking
...Building
...Installing
Done building and installing Gnu Radio
GRC freedesktop icons install ...Done
Done function gnuradio_build at: 2013年 4月 19日 金曜日 17:59:14 JST
Starting function rtl_build at: 2013年 4月 19日 金曜日 17:59:14 JST
Building rtl-sdr...Done building/installing rtl-sdr/gr-osmosdr
Done function rtl_build at: 2013年 4月 19日 金曜日 18:00:04 JST
Starting function extras at: 2013年 4月 19日 金曜日 18:00:04 JST
Doing GIT checkout for extra module gr-baz
Building extra module gr-baz
Doing GIT checkout for extra module grextras
Building extra module grextras
Done function extras at: 2013年 4月 19日 金曜日 18:02:57 JST
Starting function mod_groups at: 2013年 4月 19日 金曜日 18:02:57 JST
********************************************************************************
This script has just modified /etc/group to place your userid '('$USER')' into group 'usrp'
In order for this change to take effect, you will need to log-out and log back
in again.  You will not be able to access your USRP1 device until you do this.

If you wish to allow others on your system to use the USRP1 device, you will need to use:

  sudo usermod -a -G usrp userid
 
For each userid you wish to allow access to the usrp

********************************************************************************

Further
Done function mod_groups at: 2013年 4月 19日 金曜日 18:02:58 JST
Starting function mod_udev at: 2013年 4月 19日 金曜日 18:02:58 JST
Done function mod_udev at: 2013年 4月 19日 金曜日 18:02:58 JST
Starting function mod_sysctl at: 2013年 4月 19日 金曜日 18:02:58 JST
Applying updates to /etc/sysctl.conf
Group 'usrp' now has real-time scheduling privileges
You will need to log-out and back in again for this to
take effect
Done function mod_sysctl at: 2013年 4月 19日 金曜日 18:02:59 JST
Starting function pythonpath at: 2013年 4月 19日 金曜日 18:02:59 JST


************************************************************
You should probably set your PYTHONPATH to:
 
     /usr/local/lib/python2.7/dist-packages
 
Using:
 
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages
 
in your .bashrc or equivalent file prior to attempting to run
any Gnu Radio applications or Gnu Radio Companion.
*************************************************************
Done function pythonpath at: 2013年 4月 19日 金曜日 18:02:59 JST
Done all functions at: 2013年 4月 19日 金曜日 18:02:59 JST
All Done



14:36 | 投票する | 投票数(1) | コメント(0)