debug 故事之二——“wireless switch”

自从 2.6.29,本本的无线网卡(ath9k)就不能上网。正巧 2.6.29 刚出来的时候另有一票人在邮件列表里抱怨无线网卡的问题,我便以为这是个普遍现象,在群众雪亮的眼睛前不久就可得到修正。

等啊等啊,一等就到了 2.6.29.3,问题依旧没有改观。而此时,邮件列表和论坛里的其他案例早都消停了。

我讨厌一个人的战斗。但我决定不能傻等。

症状:networkmanager 无法搜索到无线信号。停用 networkmanager,手动 iwlist scan 也一样。

病历:
1、分析其他 2.6.29 无线网卡问题案例,安装 crda 和 wireless-regdb 并进行相应设置,无效。
2、找到了 Linux 无线驱动的官网,在 2.6.29 下编译 daily build 的 compat-wireless,无效。
3、刚好手边有块 pcmcia 的无线网卡(ath5k),发现在 2.6.29 下可以正常使用。
4、设置不变,降级回 2.6.28.x 问题消失,升级到 2.6.29.x 症状出现。

似乎是 ath9k 的问题。或许是 2.6.28 -> 2.6.29 引入的 regression?我决定给 kernel 报 bug

马拉松式的诊断开始:
1、根据 John W. Linville 的建议编译 2.6.30-rc5,无效。
2、在 Luis R. Rodriguez 的热心指点下,看 dmesg,看 irq,无果。
3、打补丁,编译内核。
4、重复 2、3 步。

几经周折,收效甚微。Luis 似乎也懵了。

算了,为了不耽误找工作,先回到 2.6.28 待着吧。

直到昨天。2.6.29.4 出世,手痒。没有惊喜。

百无聊赖,翻了翻自己报的 bug,回味着 Luis 说的 dmesg 看不出有什么问题。

或许是 networkmanager 的问题?虽然不信,但是有病乱投医,索性看一下。google 告知 networkmanager 的日志记于 /var/log/daemon.log。

对比升级前后的 log,2.6.29,"deactivating device (reason: 2)"之后再无消息。

这"reason 2"啥意思?扔给 google,帖子若干。一篇 Acer 本的用户提到 rfkill 模块导致了他上网有问题

"rfkill"又是啥?翻开内核文档(Documentation/rfkill.txt),这东西是给有无线开关的本预备的。

开什么玩笑,俺本上只有蓝牙开关。rmmod rfkill,说 ath9k 依赖这个家伙。全都卸了重新加载,发现 ath9k 会自动加载 rfkill。问 google 能不能用参数关闭 ath9k 对 rfkill 的依赖,google 顾左右而言他。

心里琢磨着"又是一条死路么",打开了本上的蓝牙开关。

networkmanager 欢快的给无线网卡张罗起来。

难道我一直以为是蓝牙开关的,实际上……赶紧检查本上的个开关,上印"W"一个。上富士通官网,图例说,该开关名为"wireless switch"。



还不死心。问妻的本上有没有类似开关。答曰有,同时控制蓝牙和 wifi。

唉,我这个土人。真是对不住 Luis 啊……

评论