如何在编译内核时添加缺少的固件(以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 相关的内核选项:

[email protected] ~ $ 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 为例)

时间: 2024-10-15 22:23:44

如何在编译内核时添加缺少的固件(以intel wireless 5100 AGN的 iwlwifi 为例)的相关文章

itop4412编译内核时出现“recipe for target 'arch/arm/mach-exynos/cpu-exynos4.o' failed”的解决方法

依次执行如下命令 #su root 输入root用户密码 #cd #vim .bashrc 到达最底行,确保环境变量如下图所示 保存退出后,执行如下指令 #source .bashrc 重启Terminal终端(必须),再次进入内核路径进行编译,即可通过. itop4412编译内核时出现"recipe for target 'arch/arm/mach-exynos/cpu-exynos4.o' failed"的解决方法 原文地址:https://www.cnblogs.com/Unf

【杂记】编译内核时的一些记录

这里记录些从网络上收集到的各种编译内核时的一些注意事项和操作.未经验证,仅供参考! 下载源码,然后转到源码目录(或者新建一个目录,在该目录下运行make?-C?/usr/src/linux?O=`pwd`); ?????将当前运行内核的config文件拷过来(位置在/boot?目录下,config*等文件),重命名为.config; ????在编译内核之前,需要确认.config中,以下编译选项是否打开: ????(1)CONFIG_DEBUG_INFO?,必须打开该选项,否则crash会出现以

windows编译libevent时报告“缺少print_winsock_errors.obj”的解决

一.综述 Libevent 是一个用C语言编写的.轻量级的开源高性能事件通知库. 在libevent官网(http://libevent.org)下载源码包,在Windows平台编译时,会报缺少"print_winsock_errors.obj"的错误. 二.原因及解决 经检查,这是因为源码包中缺少文件test/print_winsock_errors.c导致,原因未知. 解决方法:手工生成test/print_winsock_errors.c,以下为从git搜索到的代码内容: #in

编译内核时覆盖KBUILD_BUILD_USER和KBUILD_BUILD_HOST

默认情况下make kernel.img编译出来的内核在/proc/version中显示的内容是: Linux version 3.0.36+ ([email protected]) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #5 SMP PREEMPT Fri Jan 16 10:49:29 CST 2015 xxx是你的用户名,yyy是你的主机名称,这些名称有时候是无意义的,或者不是你想要的.如果你想留下你的大名,如EMA

Java 命令号编译运行时添加第三方库

虽然现在各种集成开发环境可以很方便的利用 BuildPath 的方式添加第三方的外部库, 但是对于初学者来说,掌握命令行javac 编译 java 运行的方式还是很有必要的.学习 classpath 选项的使用方法可以在不使用集成开发环境的情况先手动添加第三方的外部库. 工具准备: 文本编辑器 Coda2, 用作演示的 MySQL 驱动包 mysql-connector-java-5.1.36-bin.jar. 命令介绍: classpath 的使用方法: 命令形式: javac -classp

编译内核时出现的错误

目标板:ralinkRT5350 操作系统:linux-2.6.21.x 在内核启动过程中,出现如下问题: 问题一: ?List of all partitions: 1f00 256 mtdblock0 (driver?) 1f01 1024 mtdblock1 (driver?) 1f02 1536 mtdblock2 (driver?) 1f03 5376 mtdblock3 (driver?) f000 256 romblock0 (driver?) f001 1024 romblock

编译内核时出错:/bin/sh: 1: lzop: not found

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/71477.aspx 在上面链接中,发现时缺少了 lzop 工具包 进入去ubuntu12.04 安装: apt-get install lzop 验证: lzop -V 详细的安装 lzop 工具安装和验证,参看下面文档 http://blog.csdn.net/yyp872/article/details/21513127

LVS-Fullnat之编译内核 将fullnat模块添加到内核

主机环境   redhat6.5 64位 实验环境   ip 172.25.29.6 安装包     asciidoc-8.4.5-4.1.el6.noarch.rpm               Lvs-fullnat-synproxy.tar.gz            kernel-2.6.32-220.23.1.el6.src.rpm              newt-devel-0.52.11-3.el6.x86_64.rpm                          sla

编译Linux内核时出现错误gcc: error: elf_i386: No such file or directory

LD arch/x86/mm/built-in.o AS arch/x86/vdso/vdso32/int80.o VDSO arch/x86/vdso/vdso32-int80.so.dbggcc: error: elf_i386: No such file or directorymake[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] Error 1make[1]: *** [arch/x86/vdso] Error 2make: *** [arch