使用所有可用驱动程序编译 Linux 内核

使用所有可用驱动程序编译 Linux 内核

我正在编译用于便携式 USB 记忆棒的内核。这意味着它必须在任何硬件上运行,而不仅仅是正在编译它的机器的硬件。我应该在内核配置中选择什么?make allyesconfig适合这个吗?

以防万一,我这样做是因为我的操作系统 (Debian Stretch) 的库存内核不包含我需要的最新驱动程序(对某些 2019 年联想笔记本电脑的触摸板支持仅出现在 5.1 中)

答案1

您无需编译自定义内核,只需将相关内核模块添加到 initramfs 中即可。在我的项目中,我刚刚在 initramfs-tools 文件夹中创建了一个名为“modules”的文件,其中列出了要加载的每个模块,然后运行:

mkinitramfs -o "initrd.img" initramfs-tools

来建造它。

更多信息可以在这里找到:http://manpages.ubuntu.com/manpages/trusty/man8/initramfs-tools.8.html


如果您只想桌面环境拥有它们,则可以通过编辑文件/etc/modules以在启动时自动加载模块来添加模块。

答案2

make allyesconfig将尽可能多的驱动程序构建到主内核中,这会产生巨大的内核文件。说<kernel source>/Documentation/admin-guide/README.rst

拥有不必要的驱动程序将使内核变得更大,并且在某些情况下可能会导致问题:探测不存在的控制器卡可能会混淆您的其他控制器。

还:

“内核黑客”配置细节通常会导致内核更大或更慢(或两者兼而有之),甚至可以通过配置一些例程来主动尝试破坏不良代码以发现内核问题(kmalloc()),从而使内核变得不太稳定。因此,您可能应该对“开发”、“实验”或“调试”功能的问题回答“n”。

make allmodconfig构建尽可能多的驱动程序和可加载模块,因此它可能是比make allyesconfig.

您可能会考虑抓住一个linux-config来自 Debian 测试的软件包或者来自拉伸向后移植并从中选择内核配置。这距离 5.1 仅有几个内核版本,因此使用该配置运行应该不会太难make oldconfig,并且在决定版本 4.20、5.0 和 5.1 中添加的任何内核功能之前阅读帮助文本。

请注意,Debian 的内核包应该已经配置为尽可能通用,并且使用它作为新内核配置的基础可能会让您避免与系统控制台相关的调试功能或设置的一些陷阱。调试因没有可用的系统控制台驱动程序而失败的内核配置是一种特殊的麻烦。

相关内容