2012年2月12日日曜日

sianoモジュールコンパイル

Windowsマシンで付属CDからドライバをインストールすると、C:\windows\system32にisdbt_nova_12mhz_b0.inpがインストールされます。これは、LinuxTVのCVOC-E121で書かれているファームウェアと同じなので、まずはNova Bと同じ方法を試してみることにします。

CentOS6で使用するので、CentOSのwikiを参考に環境を準備します。

まず、カーネルソースをインストールしてパッチを当てます。

$ uname -r
2.6.32-220.4.1.el6.x86_64
$ rpm -iv kernel-2.6.32-220.4.1.el6.src.rpm
$ cd ~/rpmbuild/SPEC
$ rpmbuild -bp --target=`uname -m` kernel-2.6.spec


取りあえず、標準のモジュールをコンパイルしてみます。

$ cd ~/rpmbuild/BUILD/kernel-2.6.32-220.4.1.el6/linux-2.6.32-220.4.1.el6.x86_64
$ cp /lib/modules/`uname -r`/build/Module.symvers .
$ make prepare
$ make modules_prepare
$ make M=drivers/media/dvb/siano

特にエラーも出ないようなので、、LinuxTVのCVOC-E121にあるパッチを/tmp/siano.patchとして保存し、コンパイルします。
kernel 2.6.35.10用のパッチですが、そのままあたりました。

$ cd drivers/media/dvb/siano
$ patch -p1 < /tmp/siano.patch
patching file smscoreapi.c
Hunk #2 succeeded at 529 (offset -2 lines).
Hunk #3 succeeded at 576 (offset -2 lines).
Hunk #4 succeeded at 605 (offset -2 lines).
patching file smscoreapi.h
patching file smsdvb.c
$ cd -
$ make M=drivers/media/dvb/siano

オリジナルモジュールのバックアップを取って、入れ替えます。

$ tar cfz /tmp/siano-`uname -r`.tar.gz /lib/modules/`uname -r`/kernel/drivers/media/dvb/siano
$ su
# cp drivers/media/dvb/siano/*.ko /lib/modules/`uname -r`/kernel/drivers/media/dvb/siano

lsmodでsms*がロードされているか確認し、必要に応じrmmodします。
チューナーを再度挿してみると、次のような表示が出ました。いけそうな感じです。

$ dmesg
usb 1-1.2: new high speed USB device using ehci_hcd and address 4
usb 1-1.2: New USB device found, idVendor=187f, idProduct=0202
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.2: Product: MDTV Receiver
usb 1-1.2: Manufacturer: MDTV Receiver
usb 1-1.2: configuration #1 chosen from 1 choice
usb 1-1.2: firmware: requesting isdbt_nova_12mhz_b0.inp
smscore_set_device_mode: error -2 loading firmware: isdbt_nova_12mhz_b0.inp, trying again with default firmware
usb 1-1.2: firmware: requesting isdbt_nova_12mhz_b0.inp
smscore_set_device_mode: error -2 loading firmware: isdbt_nova_12mhz_b0.inp
smsusb_init_device: line: 382: smscore_start_device(...) failed
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
smsusb_onresponse: line: 117: error, urb status -2, 0 bytes
sms_ir_exit:
smsusb: probe of 1-1.2:1.0 failed with error -2

winodwsマシーンからisdbt_nova_12mhz_b0.inpをコピーして、/lib/firmwareに置いて再挑戦するとエラーにならなくなりましたが、/dev/dvb/*ができません。

$ dmesg
usb 1-1.2: new high speed USB device using ehci_hcd and address 6
usb 1-1.2: New USB device found, idVendor=187f, idProduct=0202
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.2: Product: MDTV Receiver
usb 1-1.2: Manufacturer: MDTV Receiver
usb 1-1.2: configuration #1 chosen from 1 choice
usb 1-1.2: firmware: requesting isdbt_nova_12mhz_b0.inp
smscore_set_device_mode: firmware download success: isdbt_nova_12mhz_b0.inp
$ ls -l /dev/dvb*
ls: cannot access /dev/dvb*: No such file or directory

もうちょい作業が必要なようです。

0 件のコメント:

コメントを投稿