在内核中编译内核模块的好处?

ura*_*ray 20 kernel kernel-modules

将内核模块编译到内核中(而不是作为可加载模块)有什么好处?

Mac*_*tka 7

这取决于。如果您有少量内存,使用模块可能会改善恢复,因为它们不会每次都重新加载(我发现它在 2 GiB 的 RAM 上很重要,但在传统硬盘驱动器上的 4 GiB 上则没有)。当由于电池模块中的一些错误(无论是编译入还是作为模块),启动时间很长(几分钟)时,尤其如此。即使在 gentoo 上没有错误,我也设法将时间(由 报告systemd-analysis)从 33 秒缩短到 18 秒,方法是将静态编译的内核更改为模块——“令人惊讶的是”内核的开始时间从 9 秒更改为 1.5 秒。

此外,当您不知道要使用什么硬件时,模块显然是有益的。

附注。您甚至可以将重要的驱动程序编译为模块,只要将它们包含在 initrd 中即可。例如,发行版将在安装时在 initrd 中包含 / 文件系统、硬盘驱动器等。


Gil*_*il' 7

据我所知,没有速度差异。

我认为您将获得几 kB 的内核内存,因为分配的粒度是一页,因此在典型的体系结构中,每个模块每个潜在模块平均浪费大约 2kB(½ 页)。即使在嵌入式系统上,这也没什么意义。您还可以获得一点磁盘空间,因为模块可以与内核一起压缩;这在存储空间很小的嵌入式系统中可能更相关。

如果你可以完全省去模块,你就可以节省一点内核内存(不需要模块加载器)、磁盘空间(不需要模块实用程序)和系统复杂性(不需要在你的发行版中包含模块加载功能)。这些点在一些硬件不可扩展的嵌入式设计中非常有吸引力。