自定义内核:模块内置时无法加载固件

jus*_*oit 10 linux kernel kernel-modules

我想内置所有模块,但这失败了iwlagn:

iwlagn 0000:03:00.0: request for firmware file 'iwlwifi-6000-4.ucode' failed.
iwlagn 0000:03:00.0: no suitable firmware found!
Run Code Online (Sandbox Code Playgroud)

微码文件存在于其中/lib/firmware,如果我编译iwlagn为模块,则整个过程都可以正常工作。我不知道它在哪里寻找文件或有什么问题 - 有什么想法吗?

roz*_*acz 10

有一个看看CONFIG_FIRMWARE_IN_KERNEL,CONFIG_EXTRA_FIRMWARE和CONFIG_EXTRA_FIRMWARE_DIR配置选项(在发现设备驱动程序- >通用驱动程序选项)。

第一个选项将使固件内置到内核中,第二个选项应包含固件文件名(或以空格分隔的名称列表),第三个选项应包含查找固件的位置。

因此,在您的示例中,您可以将这些选项设置为:

CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE='iwlwifi-6000-4.ucode'
CONFIG_EXTRA_FIRMWARE_DIR='/lib/firmware'
Run Code Online (Sandbox Code Playgroud)

一句忠告:将所有模块编译到内核中并不是一个好主意。我想我理解你的野心,因为在某些时候我也很想这样做。这种方法的问题在于,一旦内置模块,您就无法卸载它——不幸的是,尤其是无线驱动程序往往有问题,这导致必须重新加载它们的模块。此外,在某些情况下,最近驱动程序的模块版本将不起作用。