我爱DDR 发表于 2006-2-6 12:38:48

解决一部分tv tuner/视频卡无法在2.6.x工作的问题

此文章已经作废,现在2.6.16.4已经能够自动加载那些隐含的模块了,请大家都使用最新版本的内核

概述(summary):内核版本从2.6.14到现在为止(2.6.15.1),一部分视频卡会出现内核能检测到但是无法使用的怪问题。具体原因是因为没有自动加载一个解调器模块。

症状(problem):kernel能正常检查到视频卡,例如我的(kernel:2.6.15.1):

Linux video capture interface: v1.00
cx2388x v4l2 driver version 0.0.5 loaded
ACPI: PCI Interrupt 0000:01:0a.0 -> GSI 22 (level, low) -> IRQ 169
CORE cx88: subsystem: 107d:6613, board: Leadtek Winfast 2000XP Expert
TV tuner 44 at 0x1fe, Radio tuner -1 at 0x1fe
cx88: Leadtek Winfast 2000XP Expert config: tuner=43, eeprom=0x01
input: cx88 IR (Leadtek Winfast 2000XP as /class/input/input3
cx88/0: found at 0000:01:0a.0, rev: 5, irq: 169, latency: 64, mmio: 0xf6000000
tuner 0-0060: All bytes are equal. It is not a TEA5767
tuner 0-0060: chip found @ 0xc0 (cx88)
tuner 0-0060: type set to 43 (Philips NTSC MK3 (FM1236MK3 or FM1236/F))
tda9887 0-0043: chip found @ 0x86 (cx88)
cx88/0: registered device video0
cx88/0: registered device vbi0
cx88/0: registered device radio0

上面可以看出,内核已经成功地检测到我的视频卡:丽台的Winfast 2000XP Expert。

但是在xawtv, tvtime等软件下根本无法观看节目,一点信号都没有(雪花屏幕)。而且搜索频道的话发现一个台都收不了。如果用广播软件收听广播的话,也会出现同样的情况,就是一个台都收不了。某些收听广播软件,例如kradio,还会出现挂起的烦人情况。

在2.4.x的内核上一切都是工作的好好的。


分析(analysis):
在我上面所给内核信息当中,有一句最重要:tda9887 0-0043: chip found @ 0x86 (cx88),(怕有些兄弟忽略了,特意加红变大)

这个tda9887是整张卡不工作的关键。我查了一下,这原来是一块philips的芯片来的,可能是用来A/D转换(也就是解调器)吧。原来不知道从什么时候开始这个tda9887芯片也需要加载一个module才能工作。更晕的是,没有任何文档有提过这变化(反正我没有查到)。

解决办法(solution):

modprobe tda9887 就ok了。

如果没有tda9887模块,就要重新编译内核了。

这里要说明的是,不是每一块卡都是用tda9887的。大家还是先用dmesg看看自己需要哪块解调器模块。不过我看了很多国外很多提问的帖子,都是基于tda9887的……

牢骚(complaint):为了找到解决方案,我在google上换了n组关键字,化了好多天才在某kernel developer的email里看到这个解决方法。很多在2.4上面从来都不用麻烦的事情,跑到2.6上简直都是恶梦。就像2.6上面那个agpgart那样,没有任何提示,系统也不自动加载芯片模块,你让人怎么去解决问题啊。如果要把模块做细就应该仔细考虑智能性问题,让系统自动地完成复杂的加载,而不是让用户去发现是不是某个模块忘了加了。 -_-+

积木 发表于 2006-2-6 14:51:47

哥们你如果能给扩充扩充弄成一个比较像样的文档就好了。 :-D
以后又弟兄来找答案就方便了。

我爱DDR 发表于 2006-2-6 21:08:28

有没有文档模板给我参考……

积木 发表于 2006-2-9 09:19:06

:oops: 没有文档模板。大致分一下部分让大家都能清晰地看明白就可以了。。。

我爱DDR 发表于 2006-2-13 02:44:24

斑竹再来看看,我分了一下。

我语文比较差,不好意思。

kufengt 发表于 2006-2-14 02:53:54

tx@linux:~> mobprobe saa7130
bash: mobprobe: command not found
我敲这个命令则么会这样阿

积木 发表于 2006-2-14 10:57:00

楼上的报上你的linux版本,因为这个命令比较新,而你的版本很旧
很可能你有
insmod这个命令。

kufengt 发表于 2006-2-14 15:19:50

tx@linux:~> insmod saa7130
bash: insmod: command not found
我用的是SUSE10

积木 发表于 2006-2-14 18:17:49

可能你没有用root 来运行这些命令吧。。。
你尝试一下用root运行???

kufengt 发表于 2006-2-14 20:33:07

是root运行的阿

我爱DDR 发表于 2006-2-15 10:01:10

不是吧,应该有那些命令才对的呀。

刚才没有看清,“tx@linux:~>”是root状态?

kufengt 发表于 2006-2-15 16:18:51

linux:~ # insmod saa7130
insmod: can't read 'saa7130': No such file or directory
linux:~ # insmod SAA7130
insmod: can't read 'SAA7130': No such file or directory
系统能认出SAA7130为什么会有这样的结果

积木 发表于 2006-2-15 18:14:09

嗯,不是说一个芯片就一定对应一个模块的。。。

kufengt 发表于 2006-2-16 01:38:51

那该则么办,版主大大帮帮忙,说说清楚吧,我是新手,没用多久

积木 发表于 2006-2-16 09:06:26

那些模块都在
/lib/{uname -a}/modules/ 里面,
所有的模块名字都以 *****.ko 的名称登录,不知道你的电视卡芯片名称是什么,就算知道了也不知道对应哪一个模块,显然你应该用你的芯片名称和linux driver 这几个关键字上google里面找答案。
页: [1] 2
查看完整版本: 解决一部分tv tuner/视频卡无法在2.6.x工作的问题