潮声隔雨深 · 2022年01月02日

全志R329 多台设备的adb device id相同,无法指定设备,如何指定设备的adb device id?

请问全志R329 多台设备的adb device id相同,无法指定设备,如何指定设备的adb device id?

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2022年01月04日
本回答来源全志R329 多台设备的adb device id相同,无法指定设备,如何指定设备的adb device id?

问题描述
在Tina/package下新增软件包配置,如果新增软件包的目录太深,将会导致tina检测不到。

比如tina/package/dir1/dir2/dir3/dir4/Makefile可以检测到,但是tina/package/dir1/dir2/dir3/dir4/dir5/Makefile将检测不到。

问题分析
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改大之后,扫描内容变多,会导致编译前的准备工作变慢,因此最好还是不要将软件包放那么深。

你的回答