我很好奇:
将模块静态链接到内核而不是通过 rc.conf 等加载到底有什么好处?
例如:
要添加 Linux 模拟,我可以添加linux_enable="YES"
到,或者我可以通过添加到我的内核配置/etc/rc.conf
将其链接到内核。options COMPAT_LINUX
这实际上有好处吗?如果是这样,那又怎样?
答案1
静态链接曾经是加载模块的唯一方法,这被认为是使用 COMPAT_LINUX 等选项的主要原因。此外,在 之前loader
,它曾经是加载 FreeBSD 所需模块的唯一方法,以获得挂载根文件系统和引导 FreeBSD 所需的驱动程序。如今,我认为如果可以在运行时轻松加载模块,则静态链接模块不会有任何显着的好处。我认为静态链接 Linux 兼容性支持不会给性能带来任何好处,但一些用户仍然坚信这一点。我会避免它,只是因为重新编译内核带来不便,几乎没有任何明显的性能提升。
答案2
如果您静态链接您需要的所有内容,那么您可以简单地使用,
makeoptions NO_MODULES=yes
这样您就不会构建不必要的模块。MODULES_OVERRIDE
这也可以通过和/或来完成WITHOUT_MODULES
。在运行时加载模块的能力并不总是一件好事。例如,该模块可以是 rootkit。
SECURELEVEL 也可以缓解这种情况。
与这两者一样,任何好处可能也可以(有些人认为应该)以另一种方式实现。
就我个人而言,我喜欢我的内核就像防火墙规则集:我首先排除所有内容,然后添加我需要的内容并防止在运行时添加。
除非重新编译内核,否则我确切地知道支持什么。因此,如果我没有编译某些功能,例如 SCTP 或 NFS,我可以忽略仅影响这些部分的建议。添加功能需要我手动添加。
对于模块,有多种方法可以自动加载模块:只需使用某些功能一次、安装端口、更新(更改默认值、添加新功能)等。
在所有这些情况下,我认为当且仅当实际需要时才被迫手动添加功能是有好处的。