在 Debian 中编辑 .config 后重新编译内核

在 Debian 中编辑 .config 后重新编译内核

TL;DR:一旦我使用“make deb-pkg”编译了 Linux (Debian) 内核,如何在 .config 中进行微小更改后生成新内核?

你好,

我正在尝试编译内核如下https://www.debian.org/doc//manuals/debian-handbook/sect.kernel-compilation.pl.html。嗯,我做到了。花了一段时间,然后我安装了它,但它没有启动。

所以我再试一次。我编辑了 .config 并想编译一个新的。但我无法找到一种方法来做到这一点,而不需要从头开始,删除然后编译整个东西。只是“make”似乎什么也没做。我的意思是,它做了一些事情,但没有改变 linux 映像。只是“make deb-pkg”,没有删除之前生成的所有文件,会返回错误。

我搜索了它,但我找到的所有答案似乎都早于使用“make deb-pkg”并且不起作用。

谢谢。

答案1

在您链接的手册第 8.10.4 章的开头:

注意重建前清理

如果您已经在目录中编译过一次并希望从头开始重建所有内容(例如,因为您大幅更改了内核配置),则必须运行make clean以删除已编译的文件。

从本质上讲,该make命令使用 Makefile 中定义的一系列简单规则。例如,一条规则可能会说 fileX是从 files 构建的ABC使用这些命令。在决定文件是否X需要重建时,make通常只会检查是否存在,如果存在,则X它是否比任何源文件A或.如果不存在或者比其源之一更旧,则它将被重建。BCX

如果还有其他用于构建AB和/或 的规则C,则将首先对它们进行评估,然后X再递归地决定 、 等。

(在它存在的几十年里,该make命令,尤其是它的 GNU 版本已经积累了许多扩展,但这仍然是其操作背后的基本思想。)

您说您做了“.config 中的微小更改”。某些.config选项启用/禁用要构建的新模块。例如,如果您启用一个以前被禁用的模块,则需要*.ko存在一个以前不存在的新文件,并且很可能可以被内核 Makefile 系统检测到。

但其他选项仅通过激活/停用#ifdef各个源代码文件中的某些块或更改某些#define值来引起更改。这些不能轻易地被内核Makefile系统检测到。

因此,在不确切知道您之前的内核配置是什么的情况下如果您更改了确切的选项,则无法判断这是已知/预期的问题还是应该有效的问题。

内核 Makefile 系统本身就是一个相当复杂的东西;它可能太复杂了,无法以数学上完美的方式涵盖内核配置选项更改的所有可能组合 - 它会在谨慎方面犯错误,以确保所有配置更改生效。有时,这可能会导致重建比严格最佳的文件更多的文件。配置更改将 update include/generated/autoconf.h,它包含在 中include/linux/kconfig.h,并且由于默认情况下包含后者,这将导致基本上所有内容都被重建。

根据NOTE我上面引用的内容,推荐的程序似乎是:“在重新运行之前make deb-pkg,运行make clean”。

我经历过类似的事情make deb-pkg:如果我没记错的话,我认为重新运行它时的错误更多地与 .deb 包构建步骤相关,而不是与实际的内核编译相关。

相关内容