Linux kernel 有没有办法防止升级内核时出现“缺少固件”的问题?

Linux kernel 有没有办法防止升级内核时出现“缺少固件”的问题?,linux-kernel,firmware,Linux Kernel,Firmware,我正在设置自己的服务器,我决定定制自己的内核 进行安装后,终端上将显示一条警告消息: W:模块i915可能缺少固件/lib/firmware/i915/bxt_huc_ver01_8_2893.bin 我知道升级内核后如何修复它,但我想了解如何防止它。我不知道是否有一种方法可以达到这样的效果,如果有请告诉我 我将非常感谢您。简短回答,安装或升级linux固件以获得该固件 警告实际上来自mkinitramfs8钩子。它查看要安装在initramfs中的模块,使用内核源代码中的MODULE_firm

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

进行安装后,终端上将显示一条警告消息: W:模块i915可能缺少固件/lib/firmware/i915/bxt_huc_ver01_8_2893.bin

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


我将非常感谢您。

简短回答,安装或升级linux固件以获得该固件

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

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

如果在内核安装或升级后将固件文件安装到rootfs以修复问题,则需要运行update-initramfs8将固件复制到initramfs

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


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

如果无法在内核配置中禁用某个驱动程序或其一部分,请修补它。另一种可能是修补打印警告的代码。安装固件。我认为也许有一种方法可以让内核自动检测并下载丢失的固件,换句话说,让内核在没有我们干预的情况下解决问题。因为我们不知道下一次升级会错过哪些固件。我刚开始学习linux,如果我说了一些奇怪的话,请原谅。@GhostDog当您使用发行版内核时,发行版通常会更新内核和固件包,以便您拥有发行版内核所需的所有固件文件。如果您要安装自己的主线内核,它可能需要尚未通过发行版打包提供的固件文件。内核将只查看文件系统中的固件,它肯定不会下载任何东西!我在kernel.org上下载了linux-5.2.5内核,它似乎没有/lib/firmware文件夹……@GhostDog固件在不同的存储库中。大多数都在linux固件和发行版包中。例如,在Debian中有。还有其他用于固件的存储库和软件包。固件文件未随内核一起提供。因此,当我自定义内核?@GhostDog时,需要选择设备树并打开固件支持,这取决于您的平台。这与i915无关。您需要固件加载工具->固件加载工具。