とりあえず TBD

とりあえず、いきあたりばったり

rtl_tcp をAPC で動かそうと思ったら Raspbery Piでも動かなくなっていた

APCにインストールした Apricot-R5 は Raspbianとおなじなので、Raspberry Piと同じことをすればよいハズ。

rtl_tcp などのビルド/インストール

rtl-sdr – OsmoSDRSoftware の項にあるので、従えばよい。

ビルドに必要なパッケージのインストールをしておいて

# 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年ほど前のものなので、ドングルの情報が取れなかったり、ゲインが変更できなかったりする。

今のバージョンに修正をあてても症状が変わらない。根が深そうなので後で見ることにしよう。