Linux内核如何选择加载哪个固件版本?

Linux内核如何选择加载哪个固件版本?

我从http://wireless.kernel.org/en/users/Drivers/iwlwifi#Firmware。我使用的是 Ubuntu 14.04,内核版本为 3.14.01,内核团队 ppa。这是我拥有的固件列表/lib/firmware

$ ls /lib/firmware/*iwl*7260*
/lib/firmware/iwlwifi-7260-8.ucode  /lib/firmware/org.iwlwifi-7260-7.ucode
/lib/firmware/iwlwifi-7260-9.ucode  /lib/firmware/org.iwlwifi-7260-8.ucode

目前看来版本 9 无法加载。如果我删除版本 8,启动时会看到以下消息:

sudo dmesg | grep iwl
[sudo] password for ozubu: 
[    6.121743] iwlwifi 0000:02:00.0: irq 62 for MSI/MSI-X
[    6.133208] iwlwifi 0000:02:00.0: Direct firmware load failed with error -2
[    6.133211] iwlwifi 0000:02:00.0: Falling back to user helper
[    6.311794] iwlwifi 0000:02:00.0: Direct firmware load failed with error -2
[    6.311799] iwlwifi 0000:02:00.0: Falling back to user helper
[    6.324940] iwlwifi 0000:02:00.0: request for firmware file 'iwlwifi-7260-7.ucode' failed.
[    6.324950] iwlwifi 0000:02:00.0: no suitable firmware found!

所以,我的问题是:

我怎样告诉 Linux 它应该加载iwlwifi-7260-9.ucode

更新

奇怪的是,现在加载的固件版本是 8,至少根据 dmesg 显示:

$ sudo dmesg | grep iwl
[sudo] password for ozubu: 
[   18.970651] iwlwifi 0000:02:00.0: irq 62 for MSI/MSI-X
[   19.012648] iwlwifi 0000:02:00.0: loaded firmware version 22.24.8.0 op_mode iwlmvm
[   19.315472] iwlwifi 0000:02:00.0: Detected Intel(R) Wireless N 7260, REV=0x144
[   19.315899] iwlwifi 0000:02:00.0: L1 Disabled; Enabling L0S
[   19.316118] iwlwifi 0000:02:00.0: L1 Disabled; Enabling L0S
[   19.523132] ieee80211 phy0: Selected rate control algorithm 'iwl-mvm-rs'
[   23.100268] iwlwifi 0000:02:00.0: L1 Disabled; Enabling L0S
[   23.100484] iwlwifi 0000:02:00.0: L1 Disabled; Enabling L0S

答案1

请求的固件版本写入驱动程序代码中。如您所见,特定版本无线上网您使用的是请求 -7 固件。它找不到它并导致错误。您可以在modinfo iwlwifi

$ modinfo iwlwifi
filename:       /lib/modules/3.13.0-24-generic/kernel/drivers/net/wireless/iwlwifi/iwlwifi.ko
license:        GPL
author:         Copyright(c) 2003-2013 Intel Corporation <[email protected]>
version:        in-tree:
description:    Intel(R) Wireless WiFi driver for Linux
<snip>
firmware:       iwlwifi-7260-7.ucode

您的报告是什么?您是否尝试过将 -9 固件重命名为 -7(当然是在备份之后)?

我确实认为,对于 7260 台设备来说,修改信息建议 -7,但驱动程序实际上使用 -8。我不知道有哪个驱动程序版本要求 -9。也许是内核版本 3.15-xx。

答案2

我认为这取决于你的内核:

  • 3.10+ 使用固件 -7
  • 3.13+ 使用固件 -8
  • 3.14.9+ 使用固件 -9
  • 3.17+ 使用固件 -10

来源:http://wireless.kernel.org/en/users/Drivers/iwlwifi

Ubuntu 14.04 是 3.13,因此加载 22.24。8.0。

Ubuntu 14.10 是 3.16,因此加载 25.228。9.0。

我可以同时连接两个网络,不过第一个对我来说不太稳定……speedtest.net 的分数下降了 2-3Mbps,而第二个下降了 25Mbps。YMMV。

答案3

同样如此...但使用原始内核

$ uname -a
Linux prato 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$ modinfo iwlwifi | grep 7260
firmware:       iwlwifi-7260-7.ucode

但只有当我从http://wireless.kernel.org/en/users/Drivers/iwlwifi

也许有人忘记更改驱动程序信息中的某些内容。奇怪的是,我的安装中有-7和。-9

幸运的是,它可以与 一起工作-8,甚至在监控模式下也可以。

希望能帮助到你!

相关内容