DVB-S - Výběr karty a rozcházení v Linuxu

Delší dobu jsem pátral po vhodné DVB-S kartě s CI modulem pro provoz v Linuxu. Byl jsem pevně rozhodnut zakoupit Hauppauge WinTV-NOVA-S-CI PCI. Bohužel po několik týdnů byla nedostupná a následně se ukázalo, že se přestala vyrábět. Po znovuprozkoumání LinuxTV.org PCI DVB-S Wiki jsem zakoupil Twinhan VP-1030A (v Alzasoftu prodávaná pod označením TwinhanDTV Sat-CI, PCI, DVB-S přijímač (Digital SAT) TV + Radio + Internet, DO, CI slot).

Karta se v systému hlásí takto:

0000:00:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
0000:00:08.0 0400: 109e:036e (rev 11)

0000:00:08.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
0000:00:08.1 0480: 109e:0878 (rev 11)

Pro správnou funkčnost doporučuju použít ovladače z Linuxtv.org Mercurial repository. Stáhnout se dají následujícím způsobem:

hg clone http://linuxtv.org/hg/v4l-dvb

Update je pak možné provést přes:

cd v4l-dvb
hg pull -u http://linuxtv.org/hg/v4l-dvb

Nejprve je třeba zkompilovat kernel s následujícím nastavením:

Device Drivers ---\>
Multimedia devices ---\>
<m> Video For Linux
Digital Video Broadcasting Devices ---\>
[\*] DVB For Linux
<m> DVB Core Support

Po rebootu do nového kernelu pak zkompilovat ovladače pro v4l-dvb:

make
make install

Zavést moduly pro kartu:

modprobe dvb_core
modprobe bttv
modprobe bt878
modprobe dst
modprobe dvb_bt8xx

V ideálním případě by výpis dmesg měl končit hláškou:

DVB: registering frontend 0 (DST DVB-S)...

Bohužel během prvních pokusů jsem takové štěstí neměl a pokus o natažení modulu dvb_bt8xx končil následovně:

DVB: registering new adapter (bttv0).
dst_probe: unknown device.
frontend_init: Could not find a Twinhan DST.
dvb-bt8xx: A frontend driver was not found for device 109e/0878
subsystem 1822/0001

Při zapnutém verbose=4 logovani modulu dst takhle:

DVB: registering new adapter (bttv0).
rdc_8820_reset: Resetting DST
dst_gpio_outb: mask=[0004], enbb=[0004], outhigh=[0000]
dst_gpio_outb: mask=[0004], enbb=[0004], outhigh=[0004]
dst_comm_init: Initializing DST.
dst_gpio_outb: mask=[ffffffff], enbb=[0001], outhigh=[0000]
rdc_reset_state: Resetting state machine
dst_gpio_outb: mask=[0002], enbb=[0002], outhigh=[0000]
dst_gpio_outb: mask=[0002], enbb=[0002], outhigh=[0002]
writing [ 00 06 00 00 00 00 00 fa ]
write_dst: _write_dst error (err == -5, len == 0x08, b0 == 0x00)
dst_error_recovery: Trying to return from previous errors.
dst_gpio_outb: mask=[ffffffff], enbb=[0000], outhigh=[0000]
dst_gpio_outb: mask=[ffffffff], enbb=[0001], outhigh=[0000]
write_dst: _write_dst error (err == -5, len == 0x08, b0 == 0x00)
dst_error_recovery: Trying to return from previous errors.
dst_gpio_outb: mask=[ffffffff], enbb=[0000], outhigh=[0000]
dst_gpio_outb: mask=[ffffffff], enbb=[0001], outhigh=[0000]
write_dst: RDC 8820 RESET
dst_error_bailout: Trying to bailout from previous error.
rdc_8820_reset: Resetting DST
dst_gpio_outb: mask=[0004], enbb=[0004], outhigh=[0000]
dst_gpio_outb: mask=[0004], enbb=[0004], outhigh=[0004]
dst_gpio_outb: mask=[ffffffff], enbb=[0000], outhigh=[0000]
dst_probe: unknown device.
frontend_init: Could not find a Twinhan DST.
dvb-bt8xx: A frontend driver was not found for device 109e/0878
subsystem 1822/0001

Po snížení hodnoty “PCI Latency Timer” z 64 na 32 v nastavení BIOSu začalo vše fungovat.

Written on April 4, 2006