如何在编译内核时添加缺少的固件(随着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


版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-09-30 17:07  hrhguanli  阅读(1946)  评论(0编辑  收藏  举报