Linux kernel m在内核配置文件中是什么意思?

Linux kernel m在内核配置文件中是什么意思?,linux-kernel,Linux Kernel,我知道y和n代表什么,但m代表什么?我假设,这与运行make config时的(y,n,m)提示相同;在这种情况下,它将是“模块” 请注意,将Unix域套接字(CONFIG_Unix)编译为模块可能不是一个好主意。许多系统组件和程序都依赖于它们,如果当时没有加载模块,某些服务可能无法启动 Linux内核中的大多数功能可以用(“y”)或省略(“n”)进行编译,其中大部分也可以作为可加载模块进行编译。当您不确定将来是否需要某些功能时,这是有意义的 如果您将其编译为模块,结果证明它是必需的,那么它将工

我知道
y
n
代表什么,但
m
代表什么?

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

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


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

如果您将其编译为模块,结果证明它是必需的,那么它将工作,但在此之前它不会膨胀内核

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

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

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

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

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

CONFIG_UNIX=m

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

CONFIG_UNIX=m

请参阅:

与编程无关-位于堆栈溢出上是一个关于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。另请参见。Linux内核中的大多数功能可以用(“y”)或省略(“n”)进行编译,其中大部分也可以作为可加载模块进行编译。当您不知道将来是否需要某些功能时,这是有意义的。如果您将其编译为模块,结果证明它是必需的,那么它将工作,但在此之前它不会膨胀内核。对于unix域套接字,将其配置为模块实际上没有意义,因为几乎所有地方都需要它(例如,udev将无法在启动时启动)。如果你知道你无论如何都需要一些东西,那应该是“y”,而不是“m”。