在内核配置过程中,make menuconfig
工具提供了一个用户友好的图形化界面,用于选择和配置内核功能。配置选项中的 <M>
意味着将该功能作为模块(module)来编译。
内核配置选项解释
在 make menuconfig
中,有三种主要的选项来配置内核功能:
- [ ] excluded:表示功能被排除在内核之外,即不会被编译和包含。
- [*] built-in:表示功能被直接编译进内核,成为内核的一部分。这些功能在内核启动时就可用,无法动态加载或卸载。
module :表示功能被编译成模块。这些模块在需要时可以动态加载到内核中,并在不需要时卸载。这种方式提供了更大的灵活性,因为可以在运行时添加或移除功能,而无需重新编译和重启内核。
使用模块的优点
选择 <M>
将功能编译成模块有以下几个优点:
- 灵活性:模块可以在内核运行时动态加载或卸载。这样可以根据需要添加或移除功能,而无需重新启动系统。
- 节省内存:未加载的模块不会占用内核内存。只有在需要时才加载模块,可以节省系统资源。
- 易于维护:模块化的功能更易于维护和更新。可以单独更新某个模块而不影响整个内核。
示例
假设你在 make menuconfig
中配置了一个网络驱动,如 Realtek RTL8139
驱动程序:
- 选择
[*]
:该驱动程序将被编译进内核,在内核启动时就会加载和初始化。 - 选择
[ ]
:该驱动程序将不会被编译或包含在内核中。 - 选择
<M>
:该驱动程序将被编译成一个模块,可以在需要时通过modprobe
命令加载,或通过rmmod
命令卸载。
加载和卸载模块
使用模块时,可以通过以下命令进行加载和卸载:
-
加载模块:
sudo modprobe <module_name>
-
卸载模块:
sudo rmmod <module_name>
例如,如果你编译了 Realtek RTL8139
驱动程序为模块 8139too
,可以使用以下命令加载或卸载该模块:
-
加载模块:
sudo modprobe 8139too
-
卸载模块:
sudo rmmod 8139too
总结
在 make menuconfig
中选择 <M>
意味着将该功能编译成模块,这为内核提供了更大的灵活性和可维护性。模块可以在运行时动态加载和卸载,允许用户根据需要启用或禁用功能,而无需重新编译和重启内核。