如何在编译内核时添加缺少的固件(以intel wireless 5100 AGN的 iwlwifi 为例)
不知大家在筆記本使用 Linux 時編譯內核后無線wifi 能不能用,我的本本是“聯想 Y450”一款足夠老的本本,配的無線網卡是:
?$ lspci | grep Wireless
06:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
目前使用的系統為 Linux Mint 17 Qiana (Cinnamon桌面版的,畢竟cinnamon是基于Gnome3 的,與Mate 桌面相比還是更喜歡Cinnamon 。Mint 用戶定制比較多,還是比較好玩的Linux 發型版)
之前在使用Debian 時我記得好像是編譯使用了一個比較新的內核后就支持了無線,但是不知道現在為什么不能解決,于是只能老老實實安裝上系統提示的缺失固件。方法可行,希望對你有用。
1. 無線必備的內核選項
在編譯內核時我們肯定需要選擇上與 WIFI 相關的內核選項:
long@Jarvis ~ $ lsmod | grep wifi
iwlwifi?????????????? 147953? 1 iwldvm
cfg80211????????????? 409394? 3 iwlwifi,mac80211,iwldvm
很輕松的就能選上這些:
首先選擇對應的 WIFI 網卡模塊(iwlwifi)及其 DVM 固件支持(iwldvm):
-> Device Drivers
? -> Network device support
??? -> Wireless LAN
????? -> Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)
??????? -> Intel Wireless WiFi DVM Firmware support??? (iwldvm)
再選擇上網絡的無線協議802.11 API(CFG80211):
-> Networking support
? -> Wireless
??? -> cfg80211 - wireless configuration API (CFG80211)
以及通用的IEEE的802.11 網絡協議棧(mac80211):
-> Networking support
? -> Wireless
??? -> Generic IEEE 802.11 Networking Stack (mac80211)
2. 錯誤情況及其處理辦法
理論上,這幾項編譯上之后此內核應該就支持了 無線功能,但是開機后無線無法使用,在內核報告中,我們可以清晰的看到:
$ dmesg | grep wifi
[??? 4.577225] iwlwifi 0000:06:00.0: request for firmware file 'iwlwifi-5000-5.ucode' failed.
[??? 4.577313] iwlwifi 0000:06:00.0: Direct firmware load failed with error -2
[??? 4.577318] iwlwifi 0000:06:00.0: Falling back to user helper
[??? 4.592958] iwlwifi 0000:06:00.0: request for firmware file 'iwlwifi-5000-4.ucode' failed.
[??? 4.593079] iwlwifi 0000:06:00.0: Direct firmware load failed with error -2
[??? 4.593084] iwlwifi 0000:06:00.0: Falling back to user helper
......
[??? 4.594753] iwlwifi 0000:06:00.0: request for firmware file 'iwlwifi-5000-1.ucode' failed.
[??? 4.594782] iwlwifi 0000:06:00.0: no suitable firmware found!
紅色標出來的部分我們可以看到在系統啟動時查詢加載固件出問題了,找不到'iwlwifi-5000-5.ucode' 固件,轉而內核查找“'iwlwifi-5000-4.ucode' ”,"'iwlwifi-5000-3.ucode' ","'iwlwifi-5000-2.ucode' ","'iwlwifi-5000-1.ucode' ",都加載失敗后內核放棄治療,打印了個沒有合適固件,然后就不管無線網卡了。
所以我們需要在內核中添加無線網卡的固件支持,在網上尋找良方,找到解決辦法:
1. 首先下載網卡對應的固件文件,而且之前的內核日志也告訴我們該下載哪個:內核想查找'iwlwifi-5000-5.ucode' ,再找不到的情況下才轉而查找其他的,所以我們下載'iwlwifi-5000-5.ucode' 足矣。
注: 我使用 git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git 克隆了所有內核目前可能需要的固件的倉庫,以備后患,而且很輕松就可以在里面找到我需要的'iwlwifi-5000-5.ucode' 固件。
2. 使用 $ sudo cp iwlwifi-5000-5.ucode /lib/firmware/ 將固件拷貝到“/lib/firmware/” 目錄下
3. 編譯內核時,按照我下面的修改:
-> Device Drivers
? -> Generic Driver Options? --->
???? -*- Userspace firmware loading support??????????????? ?
???? [*]?? Include in-kernel firmware blobs in kernel binary
???? (iwlwifi-5000-5.ucode) External firmware blobs to build into the kernel binary???? # 指定需要加載的固件
???? (/lib/firmware) Firmware blobs root directory????? # 指定固件所在的(根)目錄,與上面選項搭配指定具體固件
其他內核選項照舊,編譯后內核就支持無線功能咯,還是很方便的。此方法對于其他內核需要的固件應該也是有效的。
=====================
此外,在安裝Debian 時,缺失這樣的固件系統會檢測并且通知用于是否插入有固件的可移動盤,在那個時候直接添加上固件應該也是有效的,雖然我還未嘗試。
本文資源以及方法參考: http://wireless.kernel.org/en/users/Drivers/iwlwifi/?n=downloads
總結
以上是生活随笔為你收集整理的如何在编译内核时添加缺少的固件(以intel wireless 5100 AGN的 iwlwifi 为例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: THESEUS-FE | 飞机客舱热舒适
- 下一篇: DataBinder所有用法-