(できるだけ楽をして) Raspberry Pi で rtl-sdr

13 2月

Raspberry PiとRTL2832Uドングルを受信サーバとして使ってみるを参考にしたが、できるだけ楽をしたい。

まず、ライブラリ等のインストール (libusb、libtool、autoconf)

apt-get を使おう。まずインストールできるパッケージがあるかを

$ apt-cache search libusb

で調べる。libusb-1.0-0-dev が良さそう? ということで、

$ sudo apt-get install libusb-1.0-0-dev

autoconf と libtool も同様に、

$ sudo apt-get install autoconf
$ sudo apt-get install libtool

git は、新しい Raspbian なら既に入っている。無ければ同様にインストールするか、OS を更新。

rtl-sdr のインストール

これはさすがにソースがいる。git でチェックアウトする。適当な場所で、

$ git clone git://git.osmocom.org/rtl-sdr.git

自動で rtl-sdr ディレクトリが出来て、その中にコードが入る。あとは適当に、

$ aclocal
$ autoreconf --force --install
$ ./configure
$ make
$ sudo make install
$ sudo make install-udev-rules
$ sudo ldconfig

として完了。
ドングルを繋いでテストしてみる。

$ rtl_test

しかし、

Found 1 device(s):
  0:  Generic, RTL2832U, SN: XXXXXXXXXXXXXXXXX

Using device 0: Generic RTL2832U

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.

と出てうまくデバイスを開けないという。

標準ドライバを使わないように設定

これは、Linux がちゃんとドングルをTVチューナとして認識して、元々持っているテレビチューナ用カーネルドライバを割り当てているため。エラーメッセージにあるように、”Kernel driver is active” な状態。

$ lsmod

してみると、やはり dvb_usb_rtl28xxu がある。試しに

$ sudo rmmod dvb_usb_rtl28xxu

を実行してみると、ちゃんと rtl_test がドングルを開けるようになる。ちなみに

$ rtl_test -t

とすると、そのドングルで受信可能な周波数範囲を探れる。色々な周波数で PLL がロックするかどうか試して判定しているらしい。受信可能な最小〜最大周波数と、その中でも受信できない周波数範囲が表示される。
さて、rmmod することによって SDR として使えるようになったが、これは一時的にカーネルドライバを無効にしただけなので、再起動したり、次回ドングルを挿した時にはまた読み込まれてしまう。

今後、このドングルを普通のTVチューナとして利用する予定もないので (そもそも国内の放送と規格が違うし)、rtl_test のエラーメッセージにあったように、blacklist を使って恒久的にこれらのカーネルドライバを使用しないことにする。
Raspbian では、modprobe.d で出来そう。という事で、

$ sudo vim /etc/modprobe.d/rtl_blacklist.conf

とかして、

blacklist dvb_usb_rtl28xxu 
blacklist rtl2832

という内容の設定ファイルを作ってみた。
これで、再起動しても OK になった。

One thought on “(できるだけ楽をして) Raspberry Pi で rtl-sdr

  1. Pingback: Raspberry Pi で ShinySDR を動かしてみる – りんごのマック

コメントを残す

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