さて、gqrxをソースからビルドしたいのですが、gqrxは内部でgnuradioを使用しています。最初インストール済だったgnuradio 3.6でgqrxをビルドしようとしたのですが、エラーで失敗してしまいました。最新のgqrxはgnuradio 3.7が必須なようです。これを機会にgnuradioのバージョンを3.7に上げることにしました。現在の最新版gnuradio-3.7.2.1を使用することにします。せっかくなのでbrewのFormulaを修正して、gnuradio 3.7をbrewでインストールできるようにしてみます。さらにbladerfの対応も付け加えたいと思います。
OSのバージョンは10.8を使用します。最新版のMarvericksではありませんが、その理由は後述します。
brewのフォーミュラですが、Tapとしてgithubで公開されているtitanous-gnuradioを元に、ttrftech-gnuradioとしてフォークしてgnuradio-3.7に対応するよう修正を加えます。変更点は以下です。
ソースアーカイブとしてhttps://gnuradio.org/releases/gnuradio/gnuradio-3.7.2.1.tar.gzを使用する。sha1ハッシュも合わせて修正します。
- libusbの代わりにlibusbxを使用する
- bladerfのサポートを追加(gr-osmosdr)
- bladerfのフォーミュラを追加
gr-osmosdrモジュールについても、gnuradio-3.7を使用するように修正します。bladerfをサポートするようオプションを追加しました。
これらを使ってgnuradioをインストールします。もし既にgnuradioがインストールされているのであれば、unlink(ディセーブル)しておきます。またlibusbxを使いますので、もしlibusbがinstallされている場合はunlinkしておきます。また、titanous-gnuradioをtapしてある場合はuntapしておきます。そのうえでbrewをupdateしてから、改めてttrftech-gnuradioをtapして、gnuradioをインストールします。
$ brew unlink gnuradio
$ brew untap titanous/gnuradio
$ brew unlink libusb
$ brew update
$ brew tap ttrftech/gnuradio
$ brew install gnuradio
もしエラーが発生した場合には、-vdオプションを付けて、brew install gnuradio -vdしてエラーの内容を確認して対処します。
gnuradioのインストールが成功したら、続いてモジュールをインストールします。gr-osmocomのビルドの前に、rtlsdrやbladeRFなど各デバイス用のライブラリを先にインストールしておきます。gitリポジトリから直接インストールするため、–HEADオプションを付けます。
$ brew install rtlsdr bladerf --HEAD
Osmocomのgitサーバがbrewからのcloneに失敗するよう(shallow-fileオプションを使用するとサーバから切断されてしまう)なので、手作業でキャッシュにcloneしておいてから、改めてinstallすることで回避します。rtlsdrと次のgr-osmosdrが該当します。
$ git clone git://git.osmocom.org/rtl-sdr.git /Library/Caches/Homebrew/rtlsdr--git
$ git clone git://git.osmocom.org/gr-osmosdr /Library/Caches/Homebrew/gr-osmosdr--git
成功したらgr-osmosdrモジュールをインストールします。
$ brew install gr-osmosdr --HEAD
brew installの際に-vdオプションを追加することで、cmakeの際のコンフィギュレーションが表示されるのを確認することができます。以下のような表示が現れるはずです。
\-- ######################################################
-- # gr-osmosdr enabled components
-- ######################################################
-- \* Python support
-- \* IQ File Source
-- \* Osmocom RTLSDR
-- \* RTLSDR TCP Client
-- \* nuand bladeRF
-- \* RFSPACE Receivers
gr-osmosdrのビルドの際に、Funcube Dongle(FCD)をリンクしようとしてエラーになっていました。デフォルトで無効になるようにしましたが、もし必要な場合はオプションで有効にすることができます。
gnuradioとgr-osmosdrのインストールが完了したらgnuradio-companionで動作を試してみます。
先日のFMラジオを動作させてみます。RTL-SDRとbladeRFのどちらも正常に動作させることができました。
フォーミュラにはgr-bazも用意されています。これもビルドを試みたのですが最新版では通りませんでした。しかしこのモジュールは使用していないので後回しにすることにします。他に有用なモジュールとしてgr-iqbalも追加しようとしたのですが、これもうまくいきませんでした。
環境として今回はOS 10.8を使用しました。OSXの最新版10.9(Marvericks)でも試してみたのですが、libc++のバージョンの差異によるエラーが発生してしまいました。MacPortsの方では解決できているようなので、もう少し試してみたいと思います。
引き続きgqrxのビルドですが、これは次回にしたいと思います。
リファレンス
- gnuradio本家 https://gnuradio.org/redmine/projects/gnuradio/wiki
- 修正したbrewのフォーミュラ https://github.com/ttrftech/homebrew-gnuradio
- 修正差分
- bladerf用のフォーミュラ https://github.com/ttrftech/homebrew-gnuradio/blob/master/bladerf.rb
- MacPortsのMarvericks関連issue https://trac.macports.org/ticket/41162