FreeBSD 中 rc.conf、loader.conf 和静态内核链接之间的区别

FreeBSD 中 rc.conf、loader.conf 和静态内核链接之间的区别

我很好奇:

将模块静态链接到内核而不是通过 rc.conf 等加载到底有什么好处?

例如:

要添加 Linux 模拟,我可以添加linux_enable="YES"到,或者我可以通过添加到我的内核配置/etc/rc.conf将其链接到内核。options COMPAT_LINUX

这实际上有好处吗?如果是这样,那又怎样?

答案1

静态链接曾经是加载模块的唯一方法,这被认为是使用 COMPAT_LINUX 等选项的主要原因。此外,在 之前loader,它曾经是加载 FreeBSD 所需模块的唯一方法,以获得挂载根文件系统和引导 FreeBSD 所需的驱动程序。如今,我认为如果可以在运行时轻松加载模块,则静态链接模块不会有任何显着的好处。我认为静态链接 Linux 兼容性支持不会给性能带来任何好处,但一些用户仍然坚信这一点。我会避免它,只是因为重新编译内核带来不便,几乎没有任何明显的性能提升。

答案2

  1. 如果您静态链接您需要的所有内容,那么您可以简单地使用,makeoptions NO_MODULES=yes这样您就不会构建不必要的模块。

    MODULES_OVERRIDE这也可以通过和/或来完成WITHOUT_MODULES

  2. 在运行时加载模块的能力并不总是一件好事。例如,该模块可以是 rootkit。

    SECURELEVEL 也可以缓解这种情况。

与这两者一样,任何好处可能也可以(有些人认为应该)以另一种方式实现。

就我个人而言,我喜欢我的内核就像防火墙规则集:我首先排除所有内容,然后添加我需要的内容并防止在运行时添加。

除非重新编译内核,否则我确切地知道支持什么。因此,如果我没有编译某些功能,例如 SCTP 或 NFS,我可以忽略仅影响这些部分的建议。添加功能需要我手动添加。

对于模块,有多种方法可以自动加载模块:只需使用某些功能一次、安装端口、更新(更改默认值、添加新功能)等。

在所有这些情况下,我认为当且仅当实际需要时才被迫手动添加功能是有好处的。

相关内容