我如何准备一个 Linux 源代码树以便可以针对它编译外部模块?

How can I prepare a Linux source tree so an external module can be compiled against it?

我通过修补新内核版本的编译错误来保持 WIFI driver 存活。我可以针对源代码树构建它,因此我不必启动要修复它的内核。

不幸的是,为此我必须完全编译整个内核。我知道如何使用 make localmodconfig 构建一个小版本,但这仍然需要很长时间。

最近,我了解了 prepare 目标。这使我能够“编译”模块,因此我了解了编译问题。但是,它在链接阶段失败,这会阻止在 Git 对分 运行 中使用 make prepare。我也有这样的印象,由于虚假问题,它需要不时清理源代码树。

问题是:准备源代码树以便我可以针对它编译 Wifi 模块的最快方法是什么?

您要找的目标是modules_prepare。来自 the doc:

An alternative is to use the "make" target "modules_prepare." This will make sure the kernel contains the information required. The target exists solely as a simple way to prepare a kernel source tree for building external modules.

NOTE: "modules_prepare" will not build Module.symvers even if CONFIG_MODVERSIONS is set; therefore, a full kernel build needs to be executed to make module versioning work.

如果你 运行 make -j modules_prepare-j 对于并行执行所有事情很重要)它应该 运行 非常快。

所以你需要的基本上是这样的:

# Prepare kernel source
cd '/path/to/kernel/source'
make localmodconfig
make -j modules_prepare

# Build your module against it
cd '/path/to/your/module/source'
make -j -C '/path/to/kernel/source' M="$(pwd)" modules

# Clean things up 
make -j -C '/path/to/kernel/source' M="$(pwd)" clean
cd '/path/to/kernel/source'
make distclean

如果您处于平分状态,则需要执行最后的清理步骤 运行,然后再继续下一个平分步骤,否则您可能会留下不需要的目标文件,这些文件可能会导致其他构建失败。