台風の影響で早く帰宅したので、いよいよ試したかったことをやってみました。
それは・・・
これだ!
PandaBoard でワンセグ野郎!!
Atom で行けるなら、Cortex-A9 1GHz Dual でもなんとかなるんじゃないかと。
PandaBoard は安くて高性能だったの勢いで買ってしまったんですが、使い道がなくて・・・。
で、早速 PandaBoard で試してみました。
クロスコンパイルは面倒なので PandaBoard でセルフコンパイルしました。Ubuntu だと Linux PC と同じように apt でツールチェーンやライブラリをインストールできるのでセルフコンパイルもラクラクです。
コンパイルの手順ですが、昨日の手順では一部間違えていたので、エントリの最後に書き直しました。
ビルドしたドライバを insmod して、dvbstream (前回と同じ手順でビルド) を使うと・・・ちゃんと TS が受信できました!!
懸念していた CPU パワーですが、dvbstream の出力を /dev/null に捨てるような以下のコマンドで負荷を測ってみると・・・
$ sudo ./dvbstream-0.5/dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o > /dev/null &
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 847340 10104 36456 0 0 2 0 45 12 0 0 100 0
1 0 0 847324 10104 36456 0 0 0 0 458 588 0 1 99 0
0 0 0 847324 10104 36456 0 0 0 0 432 571 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 425 571 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 426 568 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 432 570 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 429 567 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 424 573 0 0 100 0
0 0 0 847324 10104 36456 0 0 0 0 425 568 0 0 100 0
ほとんど無負荷状態?なのかな?
top コマンドでみると、dvbstream が 1% 程度使用しているようなので、合ってそうな雰囲気。
これに ts.pl ではなく、ぱぱネットさんの dumpeit を使えば、デコード&ファイル保存は CPU パワー的には何とかなりそう。
残りの懸念は、HDD。PandaBoard には SATA がないので USB で HDD に書くしかない・・・遅そうだなぁ。
ぱぱネットさんのブログにはHDD がボトルネックかもといった話もあったからなぁ・・・。
UOT-100(LOG-J100)用ドライバのビルド手順
昨日のブログの手順は PandaBoard で再度試したら結構間違っている部分があったり、PandaBoard では時間がかかりすぎる部分があったので、再度 LOG-J100 用のドライバの作り方を書いておきます。
PandaBoard でも、Ubuntu 11.04 (画面不要の Headless版) をインストール後、以下の手順でビルドできます。
まず、ツールチェーンと kernel source をインストール
$ sudo apt-get install build-essential linux-source-`unamr -r`
前回は apt-get build-dep linux-image-`uname -r` を実行しましたが、ダウンロードに時間がかかりますし、上記で十分です。
作業ディレクトリを作成
$ mkdir -p ~/project/oneseg
$ cd ~/project/oneseg
ダウンロードディレクトリを作成し、そこに UOT-100 用ドライバと LOG-J200 用ドライバのソースをダウンロードします。
$ mkdir file
$ cd file
$ wget http://linux.papa.to/image/logj200_linux_20090126.tar.gz
$ wget http://jaist.dl.sourceforge.jp/uot100/29431/uot100-0.1.tar.gz
$ cd ..
ダウンロードしたドライバソースと kernel を展開
$ mkdir logj200
$ tar xf file/logj200_linux_20090126.tar.gz -C logj200
$ tar xf file/uot100-0.1.tar.gz
$ tar xf /usr/src/linux-source-2.6.38.tar.bz2
UOT-100 のドライバに LOG-J200 のパッチを当てます。
$ cd uot100-0.1/dvb-usb
$ patch -p0 < ../../logj200/uot100-logj200.0.3.patch
$ cd ..
dvb-usb/uot100.c の先頭付近にある #define ENABLE_LOGJ200 をコメントアウトします。
$ vi dvb-usb/uot100.c
...hack!hack!...
カーネルソースから必要なヘッダを uot100-0.1/include にコピーしてきます。
$ mkdir include
$ cp ../linux-source-2.6.38/drivers/media/dvb/{dvb-core,dvb-usb,frontends}/*.h include/
Makefile をつくります。
$ echo 'EXTRA_CFLAGS += -I$(src)/../include -I$(src)/../frontends' > dvb-usb/Makefile
$ echo 'obj-m := uot100.o' >> dvb-usb/Makefile
$ echo 'EXTRA_CFLAGS += -I$(src)/../include -I$(src)/../frontends' > frontends/Makefile
$ echo 'obj-m := mtv211.o' >> frontends/Makefile
ビルドします。
$ make -C /lib/modules/`uname -r`/build M=`pwd`/dvb-usb modules
$ make -C /lib/modules/`uname -r`/build M=`pwd`/frontends modules
これでビルド完了です。
使うときは
$ sudo modprobe dvb-usb
$ sudo insmod dvb-usb/uot100.ko
$ sudo insmod frontends/mtv211.ko
です。あとは dvbstream で受信できます。