找到了一份MTKonline的文档

androidadt更新 android ab升级_bash

具体的打开方法只是打开了MTK控制的宏开关,我们只需要按照对应的目录和文件添加进去,MTK_AB_OTA_UPDATE只是在原声的AB_OTA_UPDATE又嵌套了一层控制,不过在编译的时候遇到了两个问题

编译错误一:

androidadt更新 android ab升级_python_02

这个问题的来源是因为disable build cache partition没有加到对应的boardconfig.mk文件中,AB升级是没有cache分区的,device/mediateksample/k39tv1_64_bsp,加到对应宏后得到解决

androidadt更新 android ab升级_android_03

编译问题二:

androidadt更新 android ab升级_Android AB升级_04

出现这个问题后,一开始一直没有什么头绪,以为是有些平台的kernel-4.4不支持ab升级

还是老老实实按错误进行排查

check-kernel-dotconfig 执行这一步报错了

这个是在kernel-4.4/android.mk中的

PRIVATE_COMMAND := $(if $(wildcard device/mediatek/build/build/tools/check_kernel_config.py),$(if $(filter yes,$(DISABLE_MTK_CONFIG_CHECK)),-)python device/mediatek/build/build/tools/check_kernel_config.py -c $(MTK_TARGET_PROJECT_FOLDER)/ProjectConfig.mk -k $(TARGET_KERNEL_CONFIG) -p $(MTK_PROJECT_NAME))

对照报错的话确实时这一段

/bin/bash -c "python device/mediatek/build/build/tools/check_kernel_config.py -c device/mediateksample/k39tv1_64_bsp/ProjectConfig.mk -k /home/adups/code/s219_ab/out/target/product/k39tv1_64_bsp/obj/KERNEL_OBJ/.config -p k39tv1_64_bsp"

Kconfig Setting: is not set

ProjectConfig Setting: yes

 

这段的意思其实时比对的ProjectConfig.mk 和 .config文件,也就是TARGET_KERNEL_CONFIG

kenv.mk 中定义了TARGET_KERNEL_CONFIG的路径和名称

TARGET_KERNEL_CONFIG := $(KERNEL_OUT)/.config

androd.mk 中定义了TARGET_KERNEL_CONFIG的生成

androidadt更新 android ab升级_Android AB升级_05

现在我们进入out/target/product/k39tv1_64_bsp/obj/KERNEL_OBJ/.config看下具提内容

里面是kernel中所有的CONFIG 信息

androidadt更新 android ab升级_android_06

# CONFIG_MTK_AB_OTA_UPDATER is not set相当于没有添加进去,到这一步其实已经有些猜想了,虽然我们在kernel中确实加了宏,但是没有编译到配置表中

这里我前期先做了两个测试:

测试一:

强行改掉了.config中的信息

改为CONFIG_MTK_AB_OTA_UPDATER = y

发现可以编译通过,而且编译完做测试发现,可以升级成功,那基本可以确认问题了,kernel 宏控制的位置我们还需要继续查询添加

测试二:

drivers/misc/mediatek/cmo/Kconfig中包含一句

config MTK_AB_OTA_UPDATER

bool "Support Android A/B system updates"

default n

这里我改成default y后,发现编译也是正常的,不过这里应该是主控开关,我们打开这里,相当于所有项目都时AB了

 

最后我只需要确认

arch/arm64/configs/k39tv1_64_bsp_debug_defconfig和arch/arm64/configs/k39tv1_64_bsp_defconfig

宏控添加的位置就可以了,

其实最初这两个我已经加过CONFIG_MTK_AB_OTA_UPDATER = y,随后我找了一份测试过AB的代码对比的时候把位置换了下就可以了,

androidadt更新 android ab升级_androidadt更新_07

这个问题我暂时没有查到原因,宏控位置的改变,可能有什么编译的地方需要详细确认,不过对于ab调试部分,属于小问题,我们可以先在代码上对于我们想要处理的问题进行验证