rtl_tcp をAPC で動かそうと思ったら Raspbery Piでも動かなくなっていた
APCにインストールした Apricot-R5 は Raspbianとおなじなので、Raspberry Piと同じことをすればよいハズ。
rtl_tcp などのビルド/インストール
rtl-sdr – OsmoSDR の Software の項にあるので、従えばよい。
ビルドに必要なパッケージのインストールをしておいて
# apt-get install git cmake install autoconf libtool libusb-1.0-0-dev
ソースを持ってくる
# git clone git://git.osmocom.org/rtl-sdr.git
で、ビルドする。
APC/Apricot では autoconf を使うとなぜか libusb の場所などを誤解するようなので cmake を使った。
# cd rtl-sdr/
# mkdir build
# cd build
# cmake ../ -DINSTALL_UDEV_RULES=ON
# make
# make install
# ldconfig
これでよさそう。
でも、ハマッた
rtl_tcpを実行すると
Found 1 device(s): 0: Generic RTL2832U OEM Using device 0: Generic RTL2832U OEM Kernel driver is active, or device is claimed by second instance of librtlsdr. In the first case, please either detach or blacklist the kernel module (dvb_usb_rtl28xxu), or enable automatic detaching at compile time. usb_claim_interface error -6 Failed to open rtlsdr device #0.
とはいたあとに、kernelが Bug! メッセージを出して、以降どうにもならなくなった。
Raspberry Pi の方でも試してみる
Raspberry Piの方ではどうか確認してみたところ、同じメッセージを出して動かない。
ただし kernelの Bugメッセージは出ない。
むむむ。
最近の linux kernel には DVBドライバが入っていて衝突する
ということらしい。
http://www.hamradioscience.com/raspberry-pi-as-remote-server-for-rtl2832u-sdr/のコメントを追っていくと、解決策があった
/etc/modeprobe.d/以下に blacklistを置いて DVBドライバを読まないようにするということだ。
blacklist をつくる
/etc/modprobe.d/rtl-tcp-blacklist.conf に以下のような内容を書いておくことにした。
blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist dvb_usb_v2
blacklist dvb_core
既存のファイルに追加してもよい。
これで reboot してやれば OK。 Pi でも APCでもうまく起動できた。
windows で SDR# を起動、APCでの rtl_tcpに接続して FM放送が受信できることまで確認した。
ただ SDR# からの接続を切ると rtl_tcp が Segmentation Fault を起こして落ちてしまう。 これは rtl_tcp側の問題のようだ。
TUMBLR氏のブログの記事
*Raspberry PiとRTL2832Uドングルを受信サーバとして使うためにrtl_tcpを修正した
に同様の症状を修正したことが書いてあった。この記事の github リンクにあるものは確かに落ちないのだが、1年ほど前のものなので、ドングルの情報が取れなかったり、ゲインが変更できなかったりする。
今のバージョンに修正をあてても症状が変わらない。根が深そうなので後で見ることにしよう。