Raspberry Pi で ShinySDR を動かしてみる

28 8月

ブラウザから操作できるように。複数チャンネルの同時受信も可能みたいなので。しかし手こずりました。
https://github.com/kpreid/shinysdr

必要な物のインストール

大きいものは Python 2.7 と GNURadio、gr-osmosdr ですね。あとは Python まわりで setuptools と python-service-identity、セットアップ時の問題解決のために gcc-4.9 の更新も必要でした。

Python については、うちの環境にはありましたが、なければ apt-get を使って入れておきます。

librtlsdr も必要ですが、すでに何かしらやっている人については入っているのでは。なければ、手前味噌ですが (できるだけ楽をして) Raspberry Pi で rtl-sdr あたりを参考にして入れてください。

GNURadio は、wheezy ベースの Raspbian 向けパッケージがありませんが、jessie テスト版向けに提供されているので、それを使います。
3.7.5 では一部コンポーネントがうまく動かなかったため、下の方でパッチを当てて別途入れ直しています。apt-get で取得出来るのがこのバージョンである場合、ここで gnuradio-dev を入れる必要はありません。ただ、問題ないバージョンが apt で入手できるようになったならば、apt を使った方が当然楽だし圧倒的に早いです。

$ sudo /etc/apt/sources.list

として編集画面とし、以下を追記。

deb http://archive.raspbian.org/raspbian jessie main

それから、

$ sudo apt-get update
$ sudo apt-get install gnuradio-dev python-setuptools python-service-identity gr-osmosdr gcc-4.9 g++
$ sudo rm /usr/bin/arm-linux-gnueabihf-gcc
$ sudo ln -s  /usr/bin/arm-linux-gnueabihf-gcc-4.9 /usr/bin/arm-linux-gnueabihf-gcc

gnuradio のすごい量の依存関係に怯む…

ShinySDR のインストール

git でチェックアウトする。適当な場所で、

$ git clone https://github.com/kpreid/shinysdr

自動で shinysdr ディレクトリが出来て、その中にコードが入る。そこに cd しておいて、あとは適当に、

$ ./fetch-js-deps.sh
$ sudo ./setup.py install
$ sudo shinysdr --create /usr/local/etc/shinysdr

※ちなみに gcc が 4.6 だと、setup.py のところで以下のようなメッセージが出て止まってしまった。

cc1: error: unrecognized command line option ‘-fstack-protector-strong’
error: Setup script exited with error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

動かしてみる

上の例だと /usr/local/etc/shinysdr に設定が出来ているので、いじっておく。
まだ起動前だけど、起動したら http://localhost:8100/manual/configuration でマニュアルが見られるらしい。

できたら、設定ディレクトリを指定して起動する。

$ sudo shinysdr /usr/local/etc/shinysdr

うーん、Volk とやらのまわりで Segmentation Fault。

VOLK: Error allocating memory (posix_memalign: 22)
Segmentation fault

修正済み GNURadio のインストール

Volk のメモリアライメントに関するバグらしい (Bug #692 で議論されている)。パッチはあるので、GNURadio のソースを取ってきてビルド、インストールしてみる。
libboost-all-dev、libcppunit-dev、python-pip が要りそうなので、apt-get で追加インストールしておいた。

Volk のみ上書きします。
足りない物があると cmake がモジュール単位で無効にしていくので、cmake の出力は注意して見る必要があると思う。

例によって適当な場所で、

$ wget http://gnuradio.org/releases/gnuradio/gnuradio-3.7.5.tar.gz
$ tar xvzf gnuradio-3.7.5.tar.gz
$ cd ./gnuradio-3.7.5
$ wget http://gnuradio.org/redmine/attachments/download/821/0001-volk-Fix-volk_malloc-when-alignment-is-1.patch
$ patch -p1 < 0001-volk-Fix-volk_malloc-when-alignment-is-1.patch
//wget http://www.sbrac.org/files/build-gnuradio
//git clone の行をコメントアウト
//$ chmod +x ./build-gnuradio 
//$ ./build-gnuradio 
$ mkdir build; cd build
$ cmake -DENABLE_DEFAULT=OFF -DENABLE_VOLK=ON -Dhave_mfpu_neon=0 ../
$ make
$ sudo make install
$ sudo rm /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0 
$ sudo ln -s /usr/local/lib/libvolk.so.0.0.0 /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0

なお、GNURadio 全体をビルドしたい場合は、cmake 以降を

$ cmake -Dhave_mfpu_neon=0 ../
$ sudo service dphys-swapfile stop
$ sudo vim /etc/dphys-swapfile
(1024 とかにする)
$ sudo service dphys-swapfile start
$ make
$ sudo make install
$ sudo service dphys-swapfile stop
$ sudo vim /etc/dphys-swapfile
(戻す)
$ sudo service dphys-swapfile start

とかするといいと思います。不要な物は個別に -DENABLE_(固有名)=OFF する形で。仮想メモリが足りなくなるので、スワップ量を変更しています。ちなみにめちゃんこ時間がかかるので注意。
また、libfftw3-dev、swig あたりも追加インストールが必要かも。

パッチは将来版で取り込まれる予定らしいけど…。

終わったら改めて、

$ sudo shinysdr /usr/local/etc/shinysdr

動いた!と思ったが、ブラウザでアクセスすると落ちた。Raspberry Pi じゃ非力すぎるのかな…? うーん、残念だけど、これ以上は、また今度。やらないかもしれないけど。

ウォーターフォールなんかはいらないので、いちいち SSH で接続しなくてもブラウザで選曲できて、2ch くらいを同時に聴ける、都合の良い SDR ツールはないかなあ!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です