我通过修补新内核版本的编译错误来保持 WIFI 驱动程序 的活动。我可以针对源代码树构建它,因此我不必启动我想要修复它的内核。
不幸的是,为此我必须完全编译整个内核。我知道如何使用
make localmodconfig
构建一个小版本,但这仍然需要很长时间。
最近,我了解了
prepare
目标。这使我能够“编译”该模块,因此我了解了编译问题。但是,它在链接阶段失败,这导致无法在 Git bisect 运行中使用 make prepare
。我也有这样的印象:由于虚假问题,它需要不时地清理源代码树。
问题是:准备源代码树以便我可以针对它编译 Wifi 模块的最快方法是什么?
您正在寻找的目标是
modules_prepare
。来自文档:
另一种方法是使用“make”目标“modules_prepare”。这将确保内核包含所需的信息。该目标仅作为准备内核源代码树以构建外部模块的简单方法而存在。
注意:即使设置了 CONFIG_MODVERSIONS,“modules_prepare”也不会构建 Module.symvers;因此,需要执行完整的内核构建才能使模块版本控制工作。
如果你运行
make -j modules_prepare
(-j
对于并行执行所有事情很重要)它应该运行得很快。
但是我必须说,根据我的经验,很多时候我实际上需要
make -j modules
,因为modules_prepare
没有创建Modules.symvers
文件。
你需要的是这样的:
# Prepare kernel source
cd '/path/to/kernel/source'
make localmodconfig
make -j modules_prepare
# May also be needed depending on the case
# make -j modules
# 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
如果您在进行下一个二等分步骤之前处于二等分运行状态,则需要最后一个清理步骤,否则您可能会留下不需要的对象文件,从而导致其他构建失败。