【FAQ】全志R329如何解决Tina删除内核根目录.config后一直编译失败的问题?
-
问题描述
客户删除Tina内核根目录下的.config文件后,按照正常流程编译会失败,log如下,提示找不到内核根目录下的.config文件。
make[4]: *** No rule to make target `/home/XXX/work/tina/out/rxxx-evb1/compile_dir/target/linux-rxxx-evb1/linux-x.x.x/.config', needed by `/home/XXX/work/tina/out/rxxx-evb1/compile_dir/target/linux-rxxx-evb1/linux-x.x.x/.modules'. Stop. make[4]: Leaving directory `/home/XXX/work/tina/target/allwinner/rxxx-evb1' make[3]: *** [compile] Error 2 make[3]: Leaving directory `/home/XXX/work/tina/target/allwinner' make[2]: *** [target/allwinner/compile] Error 2 make[2]: Leaving directory `/home/XXX/work/tina' make[1]: *** [/home/XXX/work/tina/out/rxxx-evb1/staging_dir/target/stamp/.target_compile] Error 2 make[1]: Leaving directory `/home/XXX/work/tina' Build failed - please re-run with -j1 to see the real error message
客户尝试重新source/lunch、make kernel_menuconfig等操作,均编译失败,导致不能恢复。
问题简述
AW向客户提供longon、Tina等多套SDK,客户可能延续其他SDK的开发习惯,删除内核.config,其他SDK编译时会自动生成,目前Tina不会,因此导致上述问题。
问题分析
log提示找不到内核.config文件,Tina下生成内核.config操作位于tina/build/kernel-defaults.mk文件中的Kernel/Configure/Default定义下。
其主要逻辑如下:
- 根据tina的defconfig、内核的linux-x.x配置等一起在内核根目录下生成.config.set文件
- 比较内核根目录下.config.set与.config.prev文件,如果相同,不进行任何操作;如果不同,将.config.set复制为.config,同时将.config.set复制为.config.prev
如果重新source/lunch,不做任何改动,生成的.config.set与上次保存的配置.config.prev是一样的,因此不会重新生成.config文件。
同理如果执行make kernel_menuconfig,不修改配置,生成的.config.set依旧与上次保存的.config.prev一致,也不会重新生成.config文件。
解决办法
根据.config的生成逻辑,可以有多种处理办法。
- 方法一:删除内核根目录下的.config.prev。当然删除tina/out目录也行,其作用相当于删除.config.prev
- 方法二:执行make kernel_menuconfig,修改一些配置,保存。目的是确保.config.set与.config.prev不同,重新生成.config
- 方法三:使用附件补丁0001-kernel-defaults-cp-.config.set-to-.config-when-there.patch,该补丁作用是,如果.config不存在,将.config.set复制为.config
-
-
-
-
-
Copyright © 2023 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号