【问题标题】:What does m mean in kernel configuration file?内核配置文件中的 m 是什么意思?
【发布时间】:2020-04-01 14:18:15
【问题描述】:
CONFIG_UNIX=m

我知道yn 代表什么,但是m 呢?

【问题讨论】:

标签: linux-kernel


【解决方案1】:

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

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

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

如果你将它编译为模块并且结果证明它是必需的,它会工作,但在那之前它不会使内核膨胀。

然而,将 Unix 域套接字配置为一个模块并没有真正意义,因为它们几乎无处不在(例如,udev 将无法在启动时启动)。

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

【讨论】:

  • Linux 内核中的大部分功能都可以编译成 ("y") 或省略掉 ("n"),其中大部分也可以编译为可加载模块。当您不确切知道将来是否需要某些功能时,这是有道理的。如果您将它编译为模块并且事实证明它是必需的,它会工作,但在此之前它不会使内核膨胀。对于 unix 域套接字,配置为模块真的没有意义,因为它几乎无处不在(例如,udev 将无法在启动时启动)。如果你知道无论如何你都需要一些东西,那应该是“y”,而不是“m”。
【解决方案2】:
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/

【讨论】:

    【解决方案3】:

    阅读以下“理解 Linux 内核”的节选:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多