找到了一份MTKonline的文档
具体的打开方法只是打开了MTK控制的宏开关,我们只需要按照对应的目录和文件添加进去,MTK_AB_OTA_UPDATE只是在原声的AB_OTA_UPDATE又嵌套了一层控制,不过在编译的时候遇到了两个问题
编译错误一:
这个问题的来源是因为disable build cache partition没有加到对应的boardconfig.mk文件中,AB升级是没有cache分区的,device/mediateksample/k39tv1_64_bsp,加到对应宏后得到解决
编译问题二:
出现这个问题后,一开始一直没有什么头绪,以为是有些平台的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的生成
现在我们进入out/target/product/k39tv1_64_bsp/obj/KERNEL_OBJ/.config看下具提内容
里面是kernel中所有的CONFIG 信息
# 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的代码对比的时候把位置换了下就可以了,
这个问题我暂时没有查到原因,宏控位置的改变,可能有什么编译的地方需要详细确认,不过对于ab调试部分,属于小问题,我们可以先在代码上对于我们想要处理的问题进行验证