如何在 Yocto 中完全重建 Linux 内核模块?

How to do a clean rebuild of Linux kernel modules in Yocto?

我可以 rm -rf tmp/ sstate-cache/ cache/ 和 运行 从头开始​​构建整个 Yocto 就好了,但我宁愿不重建所有东西(尤其是像 Qt 这样的包可能需要一些时间)。

我试过:

bitbake -c cleansstate linux-iwg15 kernel-module-imx-gpu-viv cryptodev-module

注意:我也试过cleanall,但结果是一样的:

任何一个内核模块一旦到达 do_compile:

就会抛出这个错误
  ERROR: Kernel configuration is invalid.
         include/generated/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.

{build_dir}/tmp/work-shared/{MACHINE}/kernel-build-artifacts文件夹实际包含include/generated/autoconf.h

我尝试将 kernel-build-artifacts 的内容复制到 {build_dir}/tmp/work-shared/{MACHINE}/kernel-source,但仍然出现错误。

linux-iwg15 BitBake 配方是 here

在重建 Linux 内核模块之前,还有什么我应该清理的吗?

干净构建后,我确实注意到 kernel-build-artifacts 包含 kernelscripts 文件夹(以及 source..\kernel-source 的符号链接) 我不记得在 运行ning bitbake -c cleansstate.

之后尝试重建时在那里

Is there anything else that I should be cleaning before rebuilding the Linux kernel modules?

是的。 bitbake -c cleansstate make-mod-scripts

任何内核 module 配方都将包含 inherit module。这引用 meta/classes/module.bbclass 其中包含 inherit module-base。此引用 meta/classes/module-base.bbclass 其中包含:

# We do the dependency this way because the output is not preserved
# in sstate, so we must force do_compile to run (once).
do_configure[depends] += "make-mod-scripts:do_compile"

make-mod-scripts 配方(位于 meta/recipes-kernel/make-mod-scripts/make-mod-scripts.bb)将文件添加到{build_dir}/tmp/work-shared/{MACHINE}/kernel-build-artifacts 目录。 (这被引用为 STAGING_KERNEL_BUILDDIR,在 conf/bitbake.conf 中设置。)

不幸的是,内核配方将删除 STAGING_KERNEL_BUILDDIR 目录中的所有内容,因为该目录已添加到 meta/classes/kernel.bbclass[= 中的 do_shared_workdir[cleandirs] 变量中34=]。这最终会删除 make-mod-scripts 也放在那里的文件。