编译内核时节省时间

7_R*_*R3X 3 compiling kernel-modules linux-kernel

我必须演示一个实践,我必须制作自己的模块,将此模块添加到内核的源代码并实现系统调用。我在 Ubuntu 上使用 3.16 内核,但从源代码安装内核大约需要 2 个小时。

是否可以从源代码中删除内核的某些部分(如不必要的驱动程序等)以节省时间,因为我不打算将这个新安装的内核用于常规使用?如果是,如何?

sou*_*edi 6

正如评论中提到的,您应该使用类似make -j4. 使用等于或略高于您拥有的 CPU 内核数的数字。

进行本地修改配置

以下说明适用于从上游构建内核。我个人觉得最简单。我不知道如何获得一棵应用了 ubuntu 补丁的树,准备像这样构建。

(1) 从理论上讲,您在更合理的时间跨度内构建内核进行测试的方式应该是

cp /boot/config-`uname -r` .config
Run Code Online (Sandbox Code Playgroud)

你不需要启用任何更新的东西,所以 - 唯一的问题是如果他们重命名了东西,这会中断:

make oldnoconfig
Run Code Online (Sandbox Code Playgroud)

现在禁用所有当前未加载的模块。(确保您已插入所有需要插入的 USB 设备...):

make localmodconfig
Run Code Online (Sandbox Code Playgroud)

它最近对我有用,所以可能有用。上次我尝试的时候不太好。

我想我把它从大约一小时缩短到了十分钟。即使在make localmodconfig它仍在构建大量我不需要的东西之后。OTOH 实际上找到并禁用那些东西(例如 in make xconfig)也需要一段时间(如果你错误地禁用了你确实需要的东西,甚至更长)。

我想知道它的存在是值得的,只是不能保证让你开心。

(2) 我认为构建对“模块”的每个修改都不需要两个小时。(如果您要实现一个新的系统调用,它实际上需要是一个内置函数)。 make只会重新编译您修改过的文件并将其集成到内核二进制文件中。因此,如果正确设置 Kconfig 太麻烦,那么最初的两个小时构建可能还不错。

如果您使用分发内核源包进行构建,您可能会遇到此问题。(您可以切换到手动构建,或者您可以诱使发行版源包使用ccache)。或者,您的修改可能正在修改许多源文件中包含的头文件。

即便如此,如果您想移植到不同的内核版本、执行git bisect、测试不同的构建选项等,制作自定义 Kconfigs 可能很有用,例如更小的 Kconfigs 。