解決 Atheros AR5007EG driver 和 bus numbers 不正確的問題

買新的 Laptop 本該是快樂的,但為了讓新電腦能夠好好的跑 Linux ,卻讓我睡不好覺好幾天,一點快樂的心情都沒有!

在抗戰了整整一個星期,挖遍了 madwifi.org 每個角落,請 google 大神解答了無數個問題後,終於成功的使我新買 Laptop -『 Toshiba Satellite L40 PSL48T-00K00J 』的 Wireless 動起來了!宣告戰勝的心情真是難以言喻! :P

扣除掉 Wireless,這台機器對 Linux 的支援度非常好,所有 Device 都能很順利的跑起來。由於顯示晶片是 Intel 965 ,Compiz 3D Desktop 不必特別設定就能順利的運作,3D 特效的效能也相當令人滿意﹝不能跑3D桌面我就不買了﹞。最重要的是整台機器只需要 2 萬元不到,實在是非常划算,對於預算不高的我,可以不必花大錢就足以應付 coding 、 presentation 、 炫麗的視覺效果等需求,有一分錢都沒浪費的感覺。﹝有些電腦就不知道在貴什麼了,令人想不透!﹞

因為目前的 Linux 並不支援這機器的 Wireless chipset -『 Atheros AR5007EG 』(與 EeePC 同系列的晶片),必須使用 Atheros 公司 patch 後的 madwifi driver 才能驅動 Wireless,這是比較麻煩的地方。﹝該 patch 並未 opensource 給 madwifi team,導致 madwifi team 不能接受此 patch,因此近期要看見 madwifi 正式支援 AR5007EG,恐怕是很困難的一件事﹞

關於該 patch 的取得和其詳細討論可在這找到:

http://madwifi.org/ticket/1679


But, 別高興太早,如果是這麼簡單,我也不必奮戰一整個星期了。

如果你的 NB 在 patch driver 後就能使 AR5007EG chipset 正常啟動,非常恭喜你。但是,如果你跟我一樣是
『 Toshiba Satellite L40 PSL48T-00K00J 』這台機器,你應該會發現你的 wireless 還是不會動才對。:(

原本以為是驅動程式的問題,但經過多天的更換 madwifi driver 或使用 ndiswrapper 都無法搞定,甚至還瘋狂的將 madwifi 的 HAL 整個反組譯看個究竟。直到最後要放棄時才發現,某些 Laptop 的 BIOS 會令 kernel 無法正確指定『 PCI/cardbus bridge secondary/subordinate bus number 』,所以 kernel 無法控制位於那些 bridge 上的裝置。要解決這問題,你可以在電腦啟動時加入 "pci=assign-busses" boot option。

經查過一些資料後,發現此 option 是在 Linux kernel 2.6.13.3 時被加入的,其原 kernel patch 說明如下:

In some cases, especially on modern laptops with a lot of PCI and
cardbus bridges, we're unable to assign correct secondary/subordinate
bus numbers to all cardbus bridges due to BIOS limitations unless
we are using "pci=assign-busses" boot option.
So some cardbus controllers may not have attached subordinate pci_bus
structure, and yenta driver must cope with it - just ignore such cardbus
bridges.


加入 boot option 再重新開機後,我新買的 Toshiba Satellite L40 PSL48T-00K00J 就可以順利的連接無線網路了。﹝笑﹞

註:由於
assign bus number 的問題可能發生在任何裝置上,要是你確定 NB 上的 Sound、Ethernet 等晶片或裝置 Linux 都有支援,可是卻無法正確運作,也請試試用本文的方法解決看看。

後記

Wireless 不動,誰也想
到是 bus number 錯誤惹的禍。這種底層 IO 通道指定錯誤的問題,雖曾在過去 Window 95/98 年代發生過,但今天恐怕不會有什麼人會相信它再次發生了,尤其還是發生在『企鵝』身上。

另外,多謝『 Kiss of Death 』這部老電影,提醒了我該注意更底層會忽略的事,臥底往往比看得見的敵人來得有威脅性多了,時時謹慎對他人搜身可以保證『邪惡』的事不被曝光洩露。看完這部電影,當下我就決定從 BIOS 和 kernel 的部份著手,沒想到不到半小時就搞定了一個星期無法解決的問題 XD

留言

  1. 如果真的不行,還有最後一道防線 ndiswrapper

    回覆刪除
  2. 如果 pci=assign-busses 沒有開,ndiswrapper 也無法使 wireless 啟動。
    當初就是兩種 driver 都不能用,讓我一度想要跳樓 orz

    回覆刪除
  3. 你好,我是PTT的板友
    我也遇到類似的問題,麻煩你可以幫我看看嗎?我為他困擾了很久

    小弟使用的NB是ASUS 的A8LE

    裝好ubuntu7.10,卻沒辦法使用無線網路,manual configuration裏面沒有無線網路選項

    我在終端機打上sudo lshw -C network

    出現了:

    network UNCLAIMED
    description: Ethernet controller
    product: AR5006EG 802.11 b/g Wireless PCI Express Adapter
    vendor: Atheros Communications, Inc.
    physical id: 0
    bus info: pci@0000:02:00.0
    version: 01
    width: 64 bits
    clock: 33MHz
    capabilities: pm msi pciexpress msix cap_list
    configuration: latency=0

    我想我使用的應該是Atheros 的AR5006EG吧

    我試過madwifi,還有 ndiswrapper,但就是不能成功

    ndiswrapper -l指令出現的output是 net5211 : invalid driver!

    sudo iwconfig指令出現的則是
    lo no wireless extensions.

    eth0 no wireless extensions.

    ppp0 no wireless extensions.


    我按照您上面說的去作

    但我不知道該怎麼加入boot option這個動作,可以請教一下該怎麼作嗎?

    是在開機的grub中加入pci=assign-busses這個指令?

    但我在重開機之後這個指令又不見了

    而且也還是沒看到無線網路的選項

    是不是我漏掉了什麼?可以請你一步步地教我該怎麼作嗎?謝謝>.<

    回覆刪除
  4. 請修改 /boot/grub/menu.lst ,並在您的啟動 Kernel 那行加上 pci=assign-busses。 :)

    回覆刪除
  5. 显然没有能够解决问题
    我向大家推荐:
    http://madwifi.org/ticket/1192
    解决的就是这个问题

    回覆刪除
  6. PSL48T-00K00J
    請教這台電腦可以灌XP的系統嗎?
    因為用了VISTA覺得不好用。
    謝謝您!
    E-
    mail:

    tommy66

    1001@hotmail.com

    回覆刪除
  7. Fedora linux 9 iwconfig 我的網卡有抓到、也有驅動...
    但為什麼都抓不到我家的AP... 我用XP是可以正常上無線的...
    NetworkManger & 也沒有任何的動作....
    請大大教教我.... 謝謝!!!
    我的網卡是 Atheros AR5006EG....聽說linux不支援這款網卡,請問大大可以交我怎麼做嗎? 我有爬過文,有人成功連線了....但沒有寫步驟,我想要整個操作的步驟,請救救我....... = =""
    我有修改 /boot/grub/menu.lst ,並在啟動 Kernel 那行加上 pci=assign-busses。 重新開機,開機之後還是不能使用,一直說Wlan0 IP連線中....但最後都會失敗。 我在到/boot/grub/menu.lst 這裡看 Kernel,它並沒有回到最初....還是Kernel pci=assign-busses
    請問怎麼會這樣...我也快瘋了!! 請教教我正確的步驟...謝謝!!!

    回覆刪除
  8. AR5006EG 已經被 ath5k 所支援,2.6.26 以上的 kernel 都已經有該 driver。

    因為我並未使用 Fedora,所以並不知道 Fedora 9 所用的 kernel 版本,你可以用 uname -a 去檢查一下。

    回覆刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(二)

淺談 USB 通訊架構之定義(一)

Reverse SSH Tunnel 反向打洞實錄