例によって検索エンジン宜しく大作戦によって以下の参考サイトを取得。
いずれも2009年の記事でLinuxカーネルのバージョンが2.6.29,2.6.32と古い。
Ubuntu-13.04の3.8.0でビルドできるか・・・
「だふめも」の方法でビルドしたものの当然エラー発生。以下の2つをやるとビルドが通った。
- 「#include <media/rds.h>」の行を削除
- lock_kernel()とunlock_kernel()を削除
できたradio_rdpc101.koを以下のコマンドでロードすると
% sudo insmod radio_rdpc101.ko
% dmesg
...
[ 3825.180109] usb 3-1: new full-speed USB device number 3 using ohci_hcd
[ 3825.347111] usb 3-1: New USB device found, idVendor=10c4, idProduct=818a
[ 3825.347127] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3825.347141] usb 3-1: Product: FM Radio
[ 3825.347152] usb 3-1: Manufacturer: SILICON LABORATORIES INC.
[ 3825.381464] USB radio driver for SUNTAC RDPC-101, Version 0.0.1
[ 3825.544140] rdpc101: freq set value = 8000
[ 3825.626581] usbcore: registered new interface driver radio-rdpc101
のようにデバイスを認識できた。
ただし「だふめも」にあるようにradio_usb_si470xというモジュールをアンロードしないと動作しない模様。
そこで/etc/modprobe.d/nosi470x.confを以下の内容で作成しておく。
blacklist radio_usb_si470x
さらに毎回insmodするのも面倒なのと、カーネルが変わった時に備えてdkmsを利用する。
dkmsにすると
- カーネルをアップグレードした時でも自動でモジュールをビルドしてくれる
- insmodしなくてもロードしてくれる
- カーネルモジュールのパッケージも作れる
といいことづくめ。
dkmsについては
UbuntuTips/Others/DkmsHowToが詳しい。
dkms作成?手順を以下に示す。
- ディレクトリ/usr/src/radio_rdpc101-0.0.1を作成する
- gistからMakefile、dkms.conf、radio_rdpc101.cを1.のディレクトリにダウンロードする
- % sudo dkms add -m radio_rdpc101 -v 0.0.1
- % sudo dkms build -m radio_rdpc101 -v 0.0.1
- % sudo dkms install -m radio_rdpc101 -v 0.0.1
rdpc-101を接続してdmesgで認識されれば成功。たぶん。
この状態でxubuntuのミキサーツールpavucontrolを起動すると入力装置にSilicon Labs FM Radioうんにゃらと表示される。
下部の出力のバーが上下して受信してるっぽいのがわかる。
本当に受信できてるのかどうか確認するため、mplayerコマンドを色々試すが音が出力されない。
mplayer -rawaudio rate=48000 radio://77.4/capture -radio device=/dev/radio0 volume=100 adevice=hw=2:arate=48000
alsamixerコマンドで調べたところデバイスは認識しているものの音量コントロールができない。
うーむ。どうやらalsaでは使えないっぽい雰囲気。
古いカーネルのカーネルモジュールをそのまま持ってきたせいかも知れないが原因追求しきれず。
正直alsaとかpulseaudioとかイマイチよくわかってない。
そのまま悶々と数日悩んでいたのだけどpavucontrolでは受信できてるっぽいからpulseaudioでなら出力できるんでないかと思いついた。
% parec > /tmp/moge.raw
Ctrl-C
% pacat -p /tmp/moge.raw
または
% parec | pacat
とすると録音再生できた。
あ、ちなみに周波数変更は以下のコマンドでできる。
% fm -d /dev/radio0 77.4 on 100
Radio tuned to 77.40 MHz at 0.00% volume
とりあえずここまで。