|
此文章已经作废,现在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[A] -> GSI 22 (level, low) -> IRQ 169
CORE cx88[0]: subsystem: 107d:6613, board: Leadtek Winfast 2000XP Expert [card=5,autodetected]
TV tuner 44 at 0x1fe, Radio tuner -1 at 0x1fe
cx88[0]: Leadtek Winfast 2000XP Expert config: tuner=43, eeprom[0]=0x01
input: cx88 IR (Leadtek Winfast 2000XP as /class/input/input3
cx88[0]/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[0])
tuner 0-0060: type set to 43 (Philips NTSC MK3 (FM1236MK3 or FM1236/F))
tda9887 0-0043: chip found @ 0x86 (cx88[0])
cx88[0]/0: registered device video0 [v4l2]
cx88[0]/0: registered device vbi0
cx88[0]/0: registered device radio0
上面可以看出,内核已经成功地检测到我的视频卡:丽台的Winfast 2000XP Expert。
但是在xawtv, tvtime等软件下根本无法观看节目,一点信号都没有(雪花屏幕)。而且搜索频道的话发现一个台都收不了。如果用广播软件收听广播的话,也会出现同样的情况,就是一个台都收不了。某些收听广播软件,例如kradio,还会出现挂起的烦人情况。
在2.4.x的内核上一切都是工作的好好的。
分析(analysis):
在我上面所给内核信息当中,有一句最重要:tda9887 0-0043: chip found @ 0x86 (cx88[0]),(怕有些兄弟忽略了,特意加红变大)
这个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那样,没有任何提示,系统也不自动加载芯片模块,你让人怎么去解决问题啊。如果要把模块做细就应该仔细考虑智能性问题,让系统自动地完成复杂的加载,而不是让用户去发现是不是某个模块忘了加了。 -_-+ |
|