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

问题描述:

CONFIG_UNIX=m 

我知道yn代表什么,但m呢?m在内核配置文件中的含义是什么?

+2

与编程无关 - 属于http://superuser.com – 2011-03-22 14:57:27

+0

Stack Overflow是编程和开发问题的网站。这个问题似乎与题目无关,因为它不涉及编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://*.com/help/on-topic)。也许[超级用户](http://superuser.com/)或[Unix&Linux堆栈交换](http://unix.stackexchange.com/)会是一个更好的地方。另请参阅[我在哪里发布有关Dev Ops的问题?](http://meta.stackexchange.com/q/134306)。 – jww 2016-04-03 19:57:55

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

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

Linux内核中的大部分功能可以编译为(“y”)或省略(“n”),其中大部分功能也可以编译为可加载模块。当你不确定你将来是否需要某些功能时,这很有意义。

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

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

如果你知道你需要什么,无论如何,这应该是 “Y”,而不是 “M”

+0

'yes','no'和'module'?这对我来说没有意义...... – 2011-03-22 14:45:10

+2

Linux内核中的大多数功能可以编译为(“y”)或省略(“n”),而且大部分还可以编译为可加载模块。如果您不确切知道未来是否需要某些功能,则这很有意义。如果你将它编译为模块并且事实证明它是需要的,它就可以工作,但在此之前它不会膨胀内核。对于unix域套接字,配置为模块并不合理,因为它几乎在任何地方都是需要的(例如udev在启动时将无法启动)。如果你知道你需要什么东西,那应该是“y”,而不是“m”。 – Damon 2011-03-22 15:00:37

阅读从 “理解Linux内核” 下面的摘录:

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

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

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