在不同的系统上编译内核

在不同的系统上编译内核

我在 Nimbix 工作,可以访问一些非常强大的多核系统,我打算做一个内核编译服务。

make -j32该系统最多可以有 128 个内核,在我使用 32 个内核进行的初始测试中,我可以非常快地编译 - 这是Linux 4.8.12 的时间:

real    2m16.366s
user    29m18.732s
sys     2m28.616s

在我的 Dell Precision 6500 笔记本电脑上,大约 25 分钟后它仍然没有编译。

我的第一个测试是尝试为我自己的系统(Arch Linux)构建内核。

我将 bzImage 目录/lib/modules从远程系统复制到我的系统。

现在,当我尝试执行 a 时,mkinitcpio出现错误:

==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory

(我从 /proc/config.gz 获取了基本内核 .config 文件 - 我有 ck-nehalem 内核版本)

我该如何让它发挥作用?将模块从另一个系统传输到构建 initramfs 映像的系统的一般方法是什么? initramfs 也可以远程构建吗?

稍微切题一下,这样的内核编译服务对内核开发人员和修补者有用吗?使用计算集群的成本约为每小时 3 美元,因此一次编译最终几乎不需要任何成本。

答案1

所以我正在回答我自己的问题,以防对其他人有用。

只要你运行,你绝对可以远程构建一个initramfs

make modules_install

在远程系统上 - 然而,我永远无法让图像包含我需要的模块 - 特别是 md raido 的东西。 ,我无法创建可以启动我的系统的 initramfs。但我认为如果你在 mkinitcpio.conf 中明确提及所有模块就可以完成

一些模块(例如 nvidia)还需要运行 dkms 来构建所需的模块。

如果将 /lib/modules/ 中的模块复制到本地系统,则必须重新创建链接buildsource指向包含 Linux 内核源代码的目录 - 在远程端创建的链接将无效。

答案2

关于 initramfs 中缺少的 md raid 模块 - 还有一种方法可以打开 initramfs 文件并添加您需要的任何模块,然后根据原始文件重新创建一个新的 initramfs,但这次包括您添加的模块。我在 Fedora 中做过几次,我相信在 Arch linux 中也可以做到。或者,也许可以通过配置 mkinitcpio.conf 文件或通过 mkinitcpio 的参数来完成。

拉米·罗森

答案3

您应该在本地编译内核并将编译后的内核构建为 .deb/.rpm 包并在远程安装。就像从存储库安装二进制内核一样。

相关内容