我如何准备一个 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
如果您处于平分状态,则需要执行最后的清理步骤 运行,然后再继续下一个平分步骤,否则您可能会留下不需要的目标文件,这些文件可能会导致其他构建失败。
我通过修补新内核版本的编译错误来保持 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
如果您处于平分状态,则需要执行最后的清理步骤 运行,然后再继续下一个平分步骤,否则您可能会留下不需要的目标文件,这些文件可能会导致其他构建失败。