Linux 内核构建过程的每一步都发生了什么?

Linux 内核构建过程的每一步都发生了什么?

我已经阅读了许多关于如何构建自定义内核并使用这些内核启动 Ubuntu 的教程,并成功地遵循了指南并启动了自定义内核,但我不了解指南中的每个命令的作用以及实际发生的情况每个命令。

上描述的过程Ubuntu 的网站做了很多工作fakeroot,一些 initramfs 和其他可怕的东西,这些东西有效dpkgmake-kpkg但根本无法帮助我理解发生了什么。

  • makeLinux 内核目录中的输出是什么?
  • 它会创建“压缩内核映像”吗?
  • “压缩内核映像”文件的名称是什么以及它放置在哪里?
  • 有什么make modules作用?
  • 应该make modules在之前还是之后进行make
  • 不会make自动构建我的模块吗?
  • 将新构建的内核添加到可启动内核列表的过程是什么(用英语来说,不仅仅是命令列表)?
  • 有什么make install作用?
  • 是否会将make install其添加到我的可启动内核列表中,这样我就不必再做任何事情了?
  • 有同等的吗make modules_install

答案1

从一开始...

  • make编译并链接内核映像。这是一个名为 的单个文件vmlinuz
  • make modulesM为您在内核配置期间回答的每个问题编译单独的文件。目标代码链接到您新构建的内核。 (对于回答的问题Y,这些已经是 的一部分vmlinuz,对于回答的问题,N它们将被跳过)。
  • make install将您构建的内核安装到/vmlinuz.
  • make modules_install将您的内核模块安装到/lib/modules/lib/modules/<version>

至于将其添加到可用内核列表中,这是由引导加载程序负责的。每个引导加载程序都不同,但grub在 x86 和 amd64 上最常见,所以我将对此进行描述。其实很简单。 Grub 会查找/,/boot/lib/modules查找任何看起来可能是工作内核的东西并将其添加。是的,这是一个过于简单化的描述。

Ubuntu 文档中那些额外的“可怕的东西”是创建deb包的额外东西。当你做这件事的目的不仅仅是为了自己时,最好将其打包。你会及时切换。

构建内核和模块是分开的,因为对于需要的人(即内核开发人员)来说,他们通常只对模块进行更改。他们可以应用更改、重建并仅安装模块。当每天必须完成 20 次时,这可以节省大量时间。它永远不会更新为只有一个make everything命令。相反,你运行make && make modules && make install && make modules_install 就像文档所说的那样。构建过程有利于内核开发人员,而不是您。事情就应该如此。

实际上,除了内核开发人员或发行版打包人员之外,几乎没有任何人需要编译内核。几乎在任何情况下,您想要的内核功能都已为您构建,并且可以在预打包的内核之一中使用。也有例外,但如今这种情况极其罕见。

我并不是不鼓励您构建自己的内核,而是实际上鼓励您这样做。我认为从头开始构建内核对于了解内核的工作原理是非常宝贵的实践。部分原因是因为也许有一天你将要是需要的例外。但它也教给您很多有关内核和引导过程的知识。完成这件事后,你会成为一个更好的人。

相关内容