Ubuntu/Debian系统上内核的构建过程说明

Ubuntu/Debian系统上内核的构建过程说明

我正在进入 Linux 内核编程,现在我已经成功构建了自己的内核好几次了。但是,我是使用从互联网上找到的分步指南来完成的,但我并不真正了解构建过程中发生的情况。到目前为止,我已经找到了几种不同的方法来构建内核。一是:

make-kpkg -j5 --initrd kernel-image kernel-headers

据我了解,make-kpkg 是一个 Debian 程序,设计用于构建和打包内核相关的东西。 --initrd 用于自动生成 initrd 映像。最后两个参数(内核映像和内核标头)的用途是什么?

构建内核的另一种方法是

make deb-pkg

与第一个命令相比,这个命令有什么作用?

另外,在本指南,构建内核是通过以下方式完成的:

fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic

在 Ubuntu 上构建内核的推荐方法是什么?当我执行上述命令之一时到底会发生什么?如果我希望手动执行上述命令之一执行的所有操作,我需要采取哪些步骤?

答案1

make-kpkg是来自包的命令kernel-package,其中用过的成为 Debian 发行版中提供的内核包的官方打包基础设施的一部分。它不再用于此目的,因为 Debian 发行版中内核软件包的当前维护者选择停止使用它;然而,该软件包的作者kernel-package并没有停止维护它,因此它仍然是创建您自己的 Debian 打包版本内核的官方支持方式。它有多种选择和目标;最重要的是您在问题中提到的那些,即kernel-image(它构建了一个包含您在期间选择的内核和模块的包make config),以及kernel-headers(如果您想编译输出,它包含您可能需要的包含文件) -of-tree 模块)。该kernel-package软件包作为与它一起发布的 Debian(或衍生版本,如 Ubuntu)的一部分进行维护,因此,如果 Debian 基础设施发生变化,则更新版本kernel-package将更新以合并它,并且它们将随那个版本的 Debian。因此,由kernel-package软件包创建的内核软件包总是最适合创建它的 Debian 版本。然而,如果 Linux 内核中的情况发生了kernel-package破坏性的变化,那么更新 Debian 稳定版本的内核包可能会有些复杂。

make deb-pkg是 Linux 内核构建基础设施中的一个目标。它接收来自 Debian 开发人员的补丁,但由于它不在 Debian 内部进行维护,因此它始终使用在创建您尝试构建的内核版本时最新的工具和策略。这意味着在某些情况下,它可能会尝试使用旧发行版上尚不可用的工具。由于它不在 Debian 内部维护,因此它不是官方支持的创建内核包的方法(至少从 Debian 的角度来看不是);尽管如此,它主要是由参与 Debian 的人维护的,因此没有理由怀疑它不起作用。

无论您选择哪种方法,都只是您的偏好问题;除非您对软件包构建选项的特殊结果投入了大量资金,否则这两种方法都可以正常工作。

相关内容