为什么一个简单的补丁需要编译整个内核?

为什么一个简单的补丁需要编译整个内核?

所以我正在修补我的内核以修复我的蓝牙并使用本指南进行构建 https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

为什么我必须编译整个内核,大约需要一个小时?

答案1

我假设您的问题是询问内核的性质,以及为什么需要重新编译它。

Linux 内核是一大堆用 C 语言编写的源代码。其中的代码可用于处理数量惊人的计算机硬件设备和芯片组,还有更多的代码可帮助其适应标准 PC 硬件以外的不同平台。然后是在运行时提供事物整体结构的代码。

某些代码与代码的其他部分是互斥的,您必须选择其中一个选项。

有些代码是针对特殊情况的,对于没有这些情况的人来说,这会降低内核的速度,因此您可以设置禁用这些代码的选项。

当 Ubuntu 为“大众”构建内核时,他们会猜测 99% 的人会遇到和需要什么硬件。然后他们尽可能地将其划分为可加载的模块。然后他们编译内核的主要核心,并将其与您需要的大多数模块一起提供。他们使其他模块可以通过包管理器使用。

您没有描述蓝牙损坏的原因,但如果有人说您需要构建新内核,则可能意味着这些内核选项之一消除了您使用特定蓝牙芯片的能力。因此,您必须构建一个启用该选项的内核。

如果幸运的话,您只需要使用该新选项构建一个蓝牙模块。然而,设置正确的编译器环境以便最终获得正确链接到现有内核的新内核模块可能非常困难。在许多情况下,重新编译整个内容会更容易或更可靠。

现在,一旦完成第一次编译,对配置的微小更改只需要重新编译受影响的几个文件,而且速度会快得多。但是,我怀疑这fakeroot debian/rules clean会丢弃临时文件并让您从头开始。我建议第二次跳过该步骤。另外,请检查编译时是否使用了所有处理器。如果没有,请寻找一些方法来告诉它并行编译。手动编译时,我使用make -j 20一次编译 20 个文件,在 4 核机器上提供最快的性能。

相关内容