【问题标题】:Is there a way to prevent the "missing firmware" problem showing up when upgrading kernel?有没有办法防止升级内核时出现“缺少固件”问题?
【发布时间】:2019-12-20 17:01:52
【问题描述】:

我正在设置自己的服务器,并决定定制自己的内核。

make install之后,终端上会出现警告信息:
W: Possible missing firmware /lib/firmware/i915/bxt_huc_ver01_8_2893.bin for module i915

我知道如何在升级内核后修复它,但我想了解如何防止它。不知道有没有方法可以达到这样的效果,有的话请告诉我。

我会非常感谢你。

【问题讨论】:

  • 如果无法在内核配置中禁用某个驱动程序或其中的一部分,请对其进行修补。另一种可能性是修补打印警告的代码。
  • 安装该固件。
  • 我想也许有一种方法可以让内核自动检测并下载丢失的固件,换句话说,让内核在没有我们干预的情况下解决问题。因为我们不知道下次升级时会丢失哪个固件。
  • 我刚开始学习linux,如果我说了什么奇怪的地方请见谅。
  • @GhostDog 当您使用发行版内核时,发行版通常会更新内核和固件包,以便您拥有发行版内核所需的所有固件文件。如果您正在安装自己的主线内核,它可能需要尚未通过您的发行版打包提供的固件文件。内核只会查看固件的文件系统,它肯定不会下载任何东西!

标签: linux-kernel firmware


【解决方案1】:

简短回答,安装或升级linux-firmware 以获取该固件。

警告实际上来自mkinitramfs(8) 钩子。它查看要安装在 initramfs 中的模块,并使用内核源代码中的 MODULE_FIRMWARE() 宏检查模块列出的所有可能需要的固件文件,并将固件文件与模块一起安装在 initramfs 中。如果找不到固件,您会收到警告。

当探测安装在 initramfs 中的模块时,还没有可用的 rootfs,并且您可能缺少模块所需的固件文件。根据模块和固件,您新安装的内核可能无法工作。

如果您在内核安装或升级后将固件文件安装到 rootfs 以解决问题,则需要运行 update-initramfs(8) 将固件也复制到 initramfs。

在这种特定情况下,i915 模块仅在您在 Broxton 平台上运行时才会使用该模块,即使在该平台上也不会默认使用。

防止警告的最佳选择是在内核安装时让固件在 rootfs 中可用(通常在 /lib/firmware 下)。另一种选择是从 initramfs 中排除相关模块,然后在 rootfs 可用时对其进行探测。显然,您也可以修补工具以跳过警告,或修补驱动程序以使用 MODULE_FIRMWARE() 不列出文件,但最好避免使用黑客攻击。

【讨论】:

  • 我在kernel.org上下载了linux-5.2.5内核,好像没有/lib/firmware文件夹......
  • @GhostDog 固件位于不同的存储库中。大多数都在 linux-firmware 中,即git.kernel.org/pub/scm/linux/kernel/git/firmware/… 和发行版打包。例如在 Debian 中有packages.debian.org/buster/firmware-linux。还有其他用于固件的存储库和软件包。固件文件未随内核一起提供。
  • 所以我自定义内核的时候需要选择Device Tree and Open Firmware support
  • @GhostDog 这将取决于您的平台。它与 i915 无关。您需要“固件加载器 -> 固件加载工具”。
猜你喜欢
  • 2018-06-22
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多