![内核编译:强制嵌入所有模块](https://linux22.com/image/1561765/%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%EF%BC%9A%E5%BC%BA%E5%88%B6%E5%B5%8C%E5%85%A5%E6%89%80%E6%9C%89%E6%A8%A1%E5%9D%97.png)
我正在用 OpenWrt 为硬件设备构建内核。由于以后不会添加新的可插拔硬件,因此我想确保所有内核模块都已内置到内核中。这样我就可以禁用模块加载并阻止依赖于通过模块加载代码的网络攻击。
我的问题是:如何强制所有选定的模块自动静态构建到内核中。我不想单独选择模块来进行此更改。我正在寻找一条捷径。
答案1
如果你这样做,所有 3000 多个模块都将被构建并嵌入到你的内核中。你的内核将变得非常庞大。
这是一个糟糕的想法,但是:
make allyesconfig
您需要暂时将内核源代码放在相关设备上。执行 make localmodconfig 后,您可以根据需要将 .config 文件复制到另一台机器,然后在那里进行编译。
你应该做的是:
进行本地修改配置
然后编辑配置文件
.配置
并进行搜索和替换米将其替换为是
现在您将只拥有大约 110 个模块,并且它将启动得更快,并且不会过于庞大。
答案2
答案3
所以也许这个可以起到作用。
运行“hwinfo”(希望足以探测硬件,因为我认为需要加载模块,探测硬件就可以做到这一点)在内核目录中运行“make localyesconfig”(假设:“make localmodconfig”和“make localyesconfig”都使用“lsmod”来完成它们的工作)
您可能希望对各种内容选择“是”,例如文件系统(proc/config.gz、exfat、vfat 和 efi 内容是个好主意)、加密和其他更多被动内容(非硬件),您知道在“是”内核之前需要这些内容,因此也对这些内容选择“是”。拥有 /proc/config.gz' 是以后重新编译的好主意。
建议您至少保留一个强化内核和一个实验内核用于启动,并将强化内核设置为默认内核,以防出现键盘/屏幕问题)。