如何正确构建最小的 FreeBSD 内核?

如何正确构建最小的 FreeBSD 内核?

有没有合适的方法为 FreeBSD 构建最小内核?这FreeBSD 手册缺乏这方面的信息。默认情况下/boot/kernel目录的大小相当大 - 大约 450MB。我想最小化内核指纹并删除所有不必要的内核模块和选项。我应该使用"NO_MODULES"选项吗/etc/make.conf?或者使用 C 编译标志?

答案1

您可以采取多种措施来减少/boot/kernel.

可能最好的空间节省是通过设置来实现WITHOUT_KERNEL_SYMBOLS/etc/src.conf如果该文件尚不存在,只需创建它),并且下次安装时installkernel,将不会安装调试符号文件。如果您立即需要空间,现在可以安全地删除它们 ( rm /boot/kernel/*.symbols)

有一些make.conf设置可以控制构建哪些模块:

  • NO_MODULES- 完全禁用模块的构建
  • MODULES_OVERRIDE- 指定您要构建的模块
  • WITHOUT_MODULES- 不应构建的模块列表

NO_MODULES选项可能有点过于严厉,因此明智地结合其他两者是更好的选择。如果您确切知道想要哪些模块,则只需将它们设置在MODULES_OVERRIDE.请注意,已WITHOUT_MODULES评估 MODULES_OVERRIDE,因此两个列表中命名的任何模块都不会被构建。

如果您确实想禁止构建所有模块,可以使用NO_MODULES,并确保所有必需的驱动程序和模块都静态编译到内核中。每个驱动程序的联机帮助页都显示了要添加到内核配置文件中的相应行,因此您应该能够弄清楚您需要什么。

如果您仍然发现空间是一个问题,或者您只是想尽可能地精简内核,则可以编辑内核配置以删除您的计算机不支持或您确定的任何设备和子系统不会想用。构建系统非常明智,如果您无意中删除了配置中仍处于活动状态的模块所需的模块,您将收到失败的构建和一条解释出错原因的错误消息。

尽管这可能非常乏味,但最好的方法是采取小步骤,一次删除一两个东西,并确保生成的配置正确构建和启动。不过,无论您做什么,我强烈建议您复制/usr/src/sys/<arch>/config/GENERIC并编辑该副本。如果您感到如此困惑,唯一的办法就是从默认配置开始,您会很高兴您的系统上仍然有该GENERIC文件!

为了构建您的自定义内核,您可以在命令行上将配置名称传递为make KERNCONF=MYKERNCONF buildkernel,也可以KERNCONF在 中设置/etc/make.conf。确保您放置了自定义配置文件,/usr/src/sys/<arch>/config并且构建系统能够找到它。

答案2

“正确的”内核是一个相对的概念,取决于您的需求。需要询问构建内核的人没有必要构建内核。顺便问一下,你是怎么想出 450 MB 大小的 FreeBSD 内核的?

root@neill-backup:~ # uname -a
FreeBSD neill-backup.int.autonlab.org 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014     [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64

这里

root@neill-backup:~ # du -h /boot/kernel/kernel
 20M    /boot/kernel/kernel

相关内容