m在内核配置文件中的含义是什么?

时间:2011-03-22 14:23:43

标签: linux-kernel

CONFIG_UNIX=m

我知道yn代表什么,但m怎么办?

3 个答案:

答案 0 :(得分:26)

我假设,这与运行make config时的(y,n,m)提示相同;在这种情况下,它将是“模块”。

请注意,将Unix域套接字(CONFIG_UNIX)编译为模块可能是一个好主意。许多系统组件和程序都依赖于它们,如果当时没有加载模块,某些服务可能无法启动。

Linux内核中的大多数功能可以编译为(“y”)或省略(“n”),其中大部分功能也可以编译为可加载模块。如果您不确定将来是否需要某些功能,这是有道理的。

如果你将它编译为模块并且事实证明它是必需的,那么它将起作用,但在此之前它不会膨胀内核。

但是,将Unix域套接字配置为模块并不是很有意义,因为几乎所有地方都需要它们(例如,udev将无法在启动时启动)。

如果你知道无论如何都需要一些东西,那应该是“y”,而不是“m”

答案 1 :(得分:2)

请阅读以下“了解Linux内核”摘录:

某些Linux代码必须静态链接,这意味着相应的组件包含在内核中或根本不编译。当组件需要修改内核中静态链接的某些数据结构或函数时,通常会发生这种情况。

例如,假设组件必须将新字段引入流程描述符。链接模块不能更改已定义的数据结构,例如task_struct,因为即使模块使用其修改版本的数据结构,所有静态链接的代码仍会继续查看旧版本。容易发生数据损坏。该问题的部分解决方案包括“静态地”将新字段添加到流程描述符,从而使它们可用于内核组件,无论它是如何链接的。但是,如果从未使用过内核组件,那么在每个进程描述符中复制的这些额外字段都会浪费内存。如果新的内核组件大量增加了进程描述符的大小,那么只有当组件静态链接到内核时,才能通过在数据结构中添加必需的字段来获得更好的系统性能。

作为第二个例子,考虑一个必须替换静态链接代码的内核组件。很明显,没有这样的组件可以编译为模块,因为内核在链接模块时无法更改RAM中已有的机器代码。例如,无法链接更改页面框架分配方式的模块,因为Buddy系统函数始终静态链接到内核。

答案 2 :(得分:0)

y  =  yes (always installed)
m  =  loadable module (can install and uninstall as you wish)
n  =  no (never installed)

请参阅:https://www.linuxquestions.org/questions/linux-general-1/boot-config%2A-273853/

相关问题