是什么决定了编译过程中静态构建哪些内核模块?

是什么决定了编译过程中静态构建哪些内核模块?

我刚刚编译了一个新内核并问自己:在编译过程中是什么决定了哪些内核模块静态构建在内核中?

然后我删除了/lib/modules,重新启动,发现我的系统工作正常,所以看起来所有必要的模块都是静态构建在内核中的。

如果没有/lib/modules,内核将加载 22 个模块。如果存在目录,它将加载 67 个模块。

答案1

您可以在配置过程中执行此操作,通常是在运行 或类似操作时make config执行make menuconfig。您可以将模块设置为内置(标记为*)或模块化(标记为M)。

您可以在 的屏幕截图中看到这方面的示例make menuconfig,来自这里:

菜单配置截图

答案2

/kernel鉴于您除了 之外还添加了标签/linux-kernel,我假设您也对通用情况感兴趣。

自 1991 年以来,在 Solaris 中,除了基本的内核粘合代码、默认调度程序和分页器/交换器之外,所有内容都是动态加载的。

甚至根文件系统代码和模块加载器也是动态加载的。

这避免了手动配置内核的需要。鉴于 Solaris 也不需要配置与大小相关的功能(只要有足够的内存,就会在运行时自动创建新的内核对象),因此不需要在 Solaris 上进行任何手动配置。

我想知道 Linux 何时会达到这种自动化状态...但是,我相信这永远不会发生,因为理论上不需要的内核配置(请参阅 Solaris)被用作告诉用户的有趣方法hey, you are able to control the linux kernel

相关内容