Computer & RF Technology

GNURadioをOSXでビルドする

GNURadioをOSXで動作させることができることを知ったので試してみました。これまでSDRのソフトウェアとして、WinSDRなどをVMware Fusionで使っていましたが、ネイティブで使いたいのと、GNURadioは自由度が高そうなのでいろいろ遊べそうです。RTL2832Uを使ったDVB-T用のUSBドングルを使ってみるのが最初の目標です。

ビルドの手順は、https://github.com/titanous/homebrew-gnuradio に記載のあるとおりですが、補足を付け加えて説明してみます。

ビルドの前に開発ツール類を入れておく必要がある。XcodeがインストールされていればOK。無ければ"Command Line Tools for Xcode"をこちらからダウンロードして入れておく。コマンドラインから、gccと入力してエラーにならなければそれで多分OK。

それから、新しく入れるツール群は/usr/local/binにインストールされるため、パスを通しておく。OSXに入っているpythonではなく、新しく入れるものが使われるよう、パスの順序は/usr/local/binを先にしておく。そのため下記を.bashrcまたは.profileに入れて、PATHに反映しておく。

export PATH=/usr/local/bin:/usr/local/share/python:$PATH

GNURadioは依存するパッケージがたくさんあるので、Homebrewという管理ツールを使う。従前はMacPortsやFinkが使われることが多かったが、OSに含まれているツールも含めて大量にインストールされてしまったが、HomebrewはOS等に既に入っているものはそのまま使い、不足しているものだけインストールしてくれるらしい。最近はHomebrewが使われるのを良く見かける。

まずは、Homebrewをインストールする。Terminalを起動しコマンドラインから以下を入力する。(スクリプトのあるブランチが変更になったようなので以下のコマンド修正しました。)

$ curl -fsSk https://raw.github.com/mxcl/homebrew/go | ruby

brewコマンドが使えるようになったら、最初にbrewそのものをアップデートしておく。

$ brew update

続いてツール類をインストールする。OSXにはpython(2.6)が入っているが、ここで新しいpython(2.7)がインストールされる。

brew install python gfortran umfpack swig

pip(pythonの管理ツール)を使ってモジュールをインストールする。

pip install numpy Cheetah lxml
pip install https://github.com/scipy/scipy/tarball/v0.11.0rc2
pip install matplotlib

gnuradioでGUIを使えるようにするために、pygtkを入れておく。これが入っていないと、gnuradioで一部のツールが使えずにハマる(ハマった)。

$ brew install pygtk

brewでgnuradioのFormula(Homebrewのインストール手順)をgithubからダウンロードして、QT(GUI)付きでビルドする。

$ brew tap titanous/homebrew-gnuradio
$ brew install gnuradio --with-qt

RTLSDR(RTL2832U)を使う場合は、関連モジュールをインストールする。libusbに依存しているが、過去にインストールされている場合は要注意(というかハマった)。

$ brew install rtlsdr gr-osmosdr gr-baz --HEAD

以上でインストールは完了。ツール類は/usr/local/binにインストールされているので眺めておく。

コマンドラインから以下を入力して起動する。

$ gnuradio-companion

こんな画面が出て来る。これはサンプルの /usr/local/share/gnuradio/example/fcd/fcd_nfm_rx.grc を開いてみたところ。

もし、gnuradio-companionがインストールされていない場合には、必要なパッケージが不足していてビルド対象から外された可能性がある。その場合には、一度アンインストールして、もう一度デバッグオプション付きでインストールしてみる。ログが表示されるので、それを調べて原因を探す。

$ brew uninstall gnuradio
$ brew install -vd gnuradio --with-qt

実際にgnuradio-companionがビルドされない、という現象に悩まされた。これは、一部のパッケージがpythonの異なるバージョンでビルドされていたため、パッケージは見つけられるものの、パージョンが一致していないために使えないことが原因だった。まったくクリーンな状態からインストールする場合大丈夫なのだろうが、過去にあるパッケージがインストールされていたりした場合には問題を引き起こすことがあるようだ。

/usr/local/Library/LinkedKegs/pygtk/lib の下を調べて、python2.6 というフォルダができていたら、pygtkが2.6でビルドされていたということ。パスを調べて、アンインストール後、もう一度インストールし、さらにgnuradioもビルドし直すこと。

$ which python
/usr/local/bin/python
$ brew uninstall pygtk
$ brew install pygtk
$ brew uninstall gnuradio
$ brew install -vd gnuradio --with-qt
Load more