请问全志R329如何解决Tina中package下新增软件包目录很深导致检测不到问题呢?
请问全志R329如何解决Tina中package下新增软件包目录很深导致检测不到问题呢?
本回答来源全志R329如何解决Tina中package下新增软件包目录很深导致检测不到问题?
问题分析
Tina构建时,将根据一定的规则扫描各个目录下的Makefile文件,这些规则定义在tina/build目录下。
tina/build目录下有一个scan.mk文件,打开后可以看到有一个$(FILELIST)的编译目标,语句比较简单。
主要操作是删除一个临时文件,然后在(SCAN_DIR)下查找目录深度为1到(SCAN_DEPTH)的Makefile文件,找到之后进行一些处理,并写入到(FILELIST),我们可以打开FILELIST文件看看,里面记录了package下目录深度为1到(SCAN_DEPTH)的包目录。
FILELIST:=$(TMP_DIR)/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE)
$(FILELIST): $(OVERRIDELIST)
rm -f $(TMP_DIR)/info/.files-$(SCAN_TARGET)-*
$(call FIND_L, $(SCAN_DIR)) $(SCAN_EXTRA) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) -name Makefile | xargs grep -aHE 'call $(GREP_STRING)' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq | awk -v of=$(OVERRIDELIST) -f build/scan.awk > $@
所以,差不多知晓其中$(SCAN_DEPTH)就是扫描的深度,在tina/build下查找改SCAN_DEPTH关键字,发现在tina/build/toplevel.mk下有相关设置。
prepare-tmpinfo: FORCE
@+$(MAKE) -r -s out/host/.prereq-build $(PREP_MK)
mkdir -p tmp/info
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f build/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/build/package*.mk $(TOPDIR)/overlay/*/*.mk" SCAN_DEPTH=5 SCAN_EXTRA=""
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f build/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/allwinner" SCAN_NAME="target" SCAN_DEPS="*.mk $(TOPDIR)/build/kernel*.mk $(TOPDIR)/build/target.mk" SCAN_DEPTH=2 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
可以看到上述prepare-tmpinfo目标中的部分内容中,会对两个目录进行扫描,一个是tina/package目录,最大扫描深度为5; 一个是tina/target/allwinner目录,最大扫描深度为2。
到现在,问题点已经找到。
解决办法
将toplevel.mk中package目录扫描深度SCAN_DEPTH改大就可以了。
这里也需要注意一点,SCAN_DEPTH改大之后,扫描内容变多,会导致编译前的准备工作变慢,因此最好还是不要将软件包放那么深。