周二的時候拿到了新的T400s,安裝Linux(64位Karmic)的過程比預想的要曲折,趁周末有時間,整理記錄于此,希望對遇到同樣問題的人有所幫助。
T400s送到之前,我先簡單的在網上查了查基本的配置信息,同時也看到有很多網友十分順利的安裝了Linux,不論是Ubuntu Karmic還是Arch Linux,基本都是除了指紋都是out-of-box就可直接工作的,這也符合我的預期。于是,拿著amd64版的Karmic盤,開始在T400s上安裝。
基本系統的安裝很順利,跟著提示一路走完,Karmic就能夠boot并正常login了,so far so good。不過登錄進去之后,無線網卡不工作,只有有線連接,這是怎么回事?用lspci一看:
- 00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
- 00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
- 00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
- 00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)
- 00:03.3 Serial controller: Intel Corporation Mobile 4 Series Chipset AMT SOL Redirection (rev 07)
- 00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)
- 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
- 00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
- 00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
- 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
- 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
- 00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
- 00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
- 00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)
- 00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
- 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
- 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
- 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
- 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
- 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
- 00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)
- 00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
- 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
- 03:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8172 (rev 10)
- 04:00.0 Memory controller: Intel Corporation Turbo Memory Controller (rev 11)
- 05:00.0 SD Host controller: Ricoh Co Ltd Device e822 (rev 01)
- 05:00.1 System peripheral: Ricoh Co Ltd Device e230 (rev 01)
注意03:00.0這一行,竟然是Realtek的8172,對應Windows下的型號是8192,Lenovo什么時候把T400s原本的無線芯片配置(Intel WiMAX/WiFi Link 5xxx)換成了Realtek 8172的?難怪沒有無線,這塊網卡的驅動還沒有被Linux內核直接支持,需要手工安裝。網上搜到很多方案,比如ndiswrapper+win版驅動等等,但這個Ubuntu LaunchPad上的方案[1]看上去最靠譜,還等什么,開工吧。
- 首先下載驅動: http://launchpadlibrarian.net/34090404/rtl8192se_linux_2.6.0010.1012.2009_64bit.tar.gz
- 解壓后進入rtl8192se_linux_2.6.0010.1020.2009_64bit子目錄,make
- 成功后在HAL/rtl8192下能夠找到r8192se_pci.ko文件,cp至/lib/modules/`uname -r`/kernel/drivers/net/wireless/
- 然后將固件相關文件,即firmware/RTL8192SE目錄,cp至/lib/firmware/`uname -r`/
- 執行命令depmod -a重新掃描module依賴關系
- 執行命令modprobe r8192se_pci加載該module,這一步完成以后NetworkManager就可以搜到無線網絡并進行連接了
好了,到此最大的攔路虎已經消滅,開始裝別的軟件吧。就在這時,新的問題出現了,dmesg可以看到重復出現的如下報錯/警告信息:
- [ 483.431670] DMA: Out of SW-IOMMU space for 9100 bytes at device 0000:0e:00.0
- [ 483.435783] DMA: Out of SW-IOMMU space for 9100 bytes at device 0000:0e:00.0
- [ 483.439867] DMA: Out of SW-IOMMU space for 9100 bytes at device 0000:0e:00.0
- ...
通常經過數分鐘的積累,系統就死機了,只剩下CapsLock鍵上的小燈不停閃爍,典型的kernel panic? 根據網友提供的線索[2],由于Intel的64位實現雖是參考AMD64但細節有差異,所以在實際內存大于等于4G的環境下,某些未考慮到該特性的代碼會leak memory,怎么辦?增加內核啟動參數mem=4G iommu=off,一方面限定內存范圍,另一方面關閉IOMMU。
經過測試,這樣的配置下系統和無線網絡都能夠持續穩定運行。系統安裝到此,一個大的里程碑達成,唯一的缺憾是每次kernel升級,可能還需要手工做一些工作,且暫時不能既開無線又開4G以上內存,不過這樣總好過沒有無線,或者繳槍投降,不是嗎?本想多罵幾句Lenovo,好好的Intel芯片不用,要換Realtek,但轉念一想,這已是既成事實,而且看到很多其他型號的ThinkPad,如R500、SL400等,也有不少用上了Realtek的這款無線芯片,讓我們一起期待穩定可靠的驅動最終被Linux內核支持的那一天吧。
參考鏈接:
[1]
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/401126
[2]
http://lwn.net/Articles/91870/