1. 1.MTK A/B system说明及配置

1.1. A/B system updates

Android从7.0开始引入新的OTA升级方式,A/B System Updates,我们先看看A/B system updates和我们常规的OTA升级有什么不同

1.1.1. AB模式和常规模式的区别

  • 传统OTA:设备上有一个Android主系统和一个Recovery系统,Android主系统运行时检测是否需要升级,如果需要升级,则将升级的数据包下载并存放到cache分区,重启系统后进入Recovery系统,并用cache分区下载好的数据更新Android主系统,更新完成后重新启动进入Android主系统。如果更新失败,设备重启后就不能正常使用了,唯一的办法就是重新升级,直到成功为止。

  • A/B system updates:A/B 系统升级,也叫做无缝更新,A/B系统升级,顾名思义是有两个系统,在磁盘上开辟两个存储空间A/B存储空间,在升级过程中保证有一个可以正常运行的系统,采用这种方式可以大大提升更新的成功性,使用这种更新后,在ota 更新过程中,即使用户手机掉电,也能保证系统再次上电后可以正常运行。

1.1.2. AB模式和常规模式最终生成img对比

主要区别有以下几点

  • boot,system和vendor系统分区从传统的一套变为两套,叫做slot A和slot B
  • 不再需要cache和recovery分区
  • misc分区不是必须

1.1.3. AB模式介绍

1.1.3.1. A/B模式特点

  • 出厂时设备上有两套可以正常工作的系统,升级时确保设备上始终有一个可以工作的系统,减少设备变砖的可能性,方便维修和售后。
  • OTA升级在Android系统的后台进行,所以更新过程中,用户可以正常使用设备,数据更新完成后,仅需要用户重启一次设备进入新系统
  • 如果OTA升级失败,设备可以回退到升级前的旧系统,并且可以尝试再次更新升级。

1.2. A/B system updates配置

1.2.1. device目录下的修改

1.2.1.1. ProjectConfig.mk

  • 路径:device/mediateksample/tb8788p1_64_bsp/ProjectConfig.mk
//把新添加的MTK_AB_OTA_UPDATER添加到AUTO_ADD_GLOBAL_DEFINE_BY_NAME属性后面
+AUTO_ADD_GLOBAL_DEFINE_BY_NAME = MTK_AB_OTA_UPDATER ........
........
+MTK_AB_OTA_UPDATER = yes

1.2.1.2. device.mk

  • 路径:device/mediateksample/tb8788p1_64_bsp/device.mk
+AB_OTA_UPDATER := true
+BOARD_USES_RECOVERY_AS_BOOT := true
+BOARD_BUILD_SYSTEM_ROOT_IMAGE := true
+BOARD_USES_SYSTEM_OTHER_ODEX := true
+TARGET_NO_RECOVERY := true
+AB_OTA_PARTITIONS := \
+boot \
+system \
+lk \
+preloader

1.2.2. kernel目录下的修改

1.2.2.1. tb8788p1_64_bsp_debug_defconfig

  • 路径:kernel-4.4/arch/arm64/configs/tb8788p1_64_bsp_debug_defconfig
@@ -164,6 +164,16 @@ CONFIG_MTK_CM32181=y# CONFIG_MTK_AKM09911 is not set# CONFIG_CUSTOM_KERNEL_GYROSCOPE is not set# CONFIG_MTK_BMG160 is not set
+# enable dm-verity
+CONFIG_KEYS=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_LINEAR=y
+CONFIG_DM_ANDROID_VERITY=y
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_X509_CERTIFICATE_PARSER=y
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_TRUSTED_KEYS="certs/verity.x509.pem"CONFIG_MTK_HWMON=yCONFIG_MTK_BTIF=yCONFIG_MTK_MD1_SUPPORT=9
@@ -206,6 +216,7 @@ CONFIG_MTK_TINYSYS_SCP_SUPPORT=yCONFIG_MTK_TINYSYS_SSPM_SUPPORT=yCONFIG_MTK_SMI_EXT=y#CONFIG_MTK_VIBRATOR is not set
+CONFIG_MTK_AB_OTA_UPDATER=yCONFIG_USB_MTK_DUALMODE=yCONFIG_USB_MTK_IDDIG=y

1.2.2.2. tb8788p1_64_bsp_defconfig

  • 路径:kernel-4.4/arch/arm64/configs/tb8788p1_64_bsp_defconfig
@@ -162,6 +162,16 @@ CONFIG_MTK_CM32181=y# CONFIG_MTK_AKM09911 is not set# CONFIG_CUSTOM_KERNEL_GYROSCOPE is not set# CONFIG_MTK_BMG160 is not set
+# enable dm-verity
+CONFIG_KEYS=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_LINEAR=y
+CONFIG_DM_ANDROID_VERITY=y
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_X509_CERTIFICATE_PARSER=y
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_TRUSTED_KEYS="certs/verity.x509.pem"CONFIG_MTK_HWMON=yCONFIG_MTK_BTIF=yCONFIG_MTK_MD1_SUPPORT=9
@@ -204,6 +214,7 @@ CONFIG_MTK_TINYSYS_SCP_SUPPORT=yCONFIG_MTK_TINYSYS_SSPM_SUPPORT=yCONFIG_MTK_SMI_EXT=y#CONFIG_MTK_VIBRATOR is not set
+CONFIG_MTK_AB_OTA_UPDATER=yCONFIG_USB_MTK_DUALMODE=yCONFIG_USB_MTK_IDDIG=yCONFIG_MTK_FPSGO=y

1.2.3. lk目录下的修改

1.2.3.1. tb8788p1_64_bsp.mk

  • 路径:vendor/mediatek/proprietary/bootable/bootloader/lk/project/tb8788p1_64_bsp.mk
@@ -29,7 +29,7 @@ CUSTOM_LK_USB_UNIQUE_SERIAL=noMTK_TINYSYS_SCP_SUPPORT = yesMTK_PROTOCOL1_RAT_CONFIG = Lf/Lt/W/GMTK_GOOGLE_TRUSTY_SUPPORT = no
-MTK_AB_OTA_UPDATER = no
+MTK_AB_OTA_UPDATER = yesDEFINES += MTK_MT6370_PMUDEVELOP_STAGE = SBMTK_TINYSYS_SSPM_SUPPORT = yes

1.2.3. preloader目录下的修改

1.2.3.1. tb8788p1_64_bsp.mk

  • 路径:vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/tb8788p1_64_bsp/tb8788p1_64_bsp.mk
@@ -7,6 +7,7 @@ MTK_SEC_BOOT=ATTR_SBOOT_ONLY_ENABLE_ON_SCHIPMTK_SEC_MODEM_AUTH=noMTK_SEC_SECRO_AC_SUPPORT=yes# Platform
+MTK_AB_OTA_UPDATER=yesMTK_MT6336_SUPPORT=yesMTK_FAN5405_SUPPORT=noMTK_EMMC_SUPPORT=yes
@@ -32,4 +33,4 @@ MTK_LP4_DDR3200=yesMTK_LP4_DRAM_SUPPORT=yesMTK_TEE_SUPPORT = yesTRUSTKERNEL_TEE_SUPPORT = yes//在export后面将新添加的MTK_AB_OTA_UPDATER加进去
-export MTK_PLATFORM MTK_MT6336_SUPPORT MTK_TEE_SUPPORT TRUSTKERNEL_TEE_SUPPORT MTK_FAN5405_SUPPORT.......
+export MTK_AB_OTA_UPDATER MTK_PLATFORM MTK_MT6336_SUPPORT MTK_TEE_SUPPORT TRUSTKERNEL_TEE_SUPPORT MTK_FAN5405_SUPPORT........

1.3. 升级测试

1.3.1. 升级相关文件介绍

固件编译成功后,在out/target/product/tb8788p1_64_bsp/目录中会有一个整包(full_tb8788p1_64_bsp-ota-122110.zip),在out/target/product/tb8788p1_64_bsp/obj/PACKAGING/target_files_intermediates/目录下有一个素材包(full_tb8788p1_64_bsp-target_files-122110.zip)

通过素材包也可以生成对应的整包

./build/tools/releasetools/ota_from_target_files out/...../target_files_intermediates/full_tb8788p1_64_bsp-target_files-122110.zip full-ota.zip
  • 不管是整包或者差分包,解压出来后的文件结构都是一样的

  • payload.bin:系统要更新的数据文件

  • payload_properties.txt:包含了升级内容的一些属性信息(升级时会使用到payload_properties.txt里面的信息)

  • update_engine_client:A/B系统在debug模式下会包含升级应用update_engine_client,就是通过该程序来进行OTA的升级

1.3.2. 升级步骤

  • 整包升级
    a、解压整包
    b、将解压出来的payload.bin放到可被http访问到的地方
    c、查看复制解压出来的payload_properties.txt文件中的内容
    d、保持机器网络畅通
    e、adb shell进入机器,运行如下命令进行升级:
./update_engine_client --payload=http://q70ckeg5o.bkt.clouddn.com/payload.bin --update --headers="FILE_HASH=VjdsTa+l+zUN52gFo2jrX1TSVpR9raCdpdAW2HYjb4E=
FILE_SIZE=39103135
METADATA_HASH=c9OrO8Gr4Y4uF1JShFUcvo1not07ai3ZoFmiVjd4UiU=
METADATA_SIZE=197761
"
  • 差分包升级
    a、编译出两个素材包(V1.zip,V2.zip)
    b、生成差分包:./build/tools/releasetools/ota_from_target_files -i V1.zip V2.zip ota_test.zip
    c、将生成的差分包ota_test.zip解压出来
    d、将解压出来的payload.bin放到可被http访问到的地方
    e、查看复制解压出来的payload_properties.txt文件中的内容
    f、保持机器网络畅通
    g、adb shell进入机器,运行命令进行升级(命令与整包升级的命令相同)

1.3.3. 升级注意事项:

a–payload=http://q70ckeg5o.bkt.clouddn.com/payload.bin //后面的链接为你们放置的payload.bin的链接地址
b–header=" ",双引号的内容为解压对应的OTA包后的payload_properties.txt文件中的内容
c、因为–headers=参数最终是按行进行拆分提取的,所以四个参数要分别写到一行上,不然可能导致命令无法正常执行
d、运行命令后可执行logcat -s update_engine:v查看升级进度

1.4. 踩过的坑

1.4.1. 编译问题

1.4.1.1. 无法正常生成system_a.img、system_b.img

由于配置时vendor/mediatek/proprietary/bootable/bootloader/lk/project/tb8788p1_64_bsp.mk文件中的MTK_AB_OTA_UPDATER属性没有配置为yes,导致A/B system updates配置失败

1.4.1.2. 系统无法启动

正常生成system_a.imgsystem_b.img后,烧录固件后系统无法启动,这个问题也是由于配置不完全导致的,需要保证上面《A/B system updates配置》中提到的配置都修改到

1.4.1.3. 编译报错

  • 问题描述:调试过程中,发现编译vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6771/src/core/main.c这个文件时,一直报ab_ota_boot_check函数和get_suffix函数未定义,然后检查了main.c包含的头文件等,都没有发现问题,但却一直提示未定义。
  • 问题原因:该问题是由于在vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/tb8788p1_64_bsp/tb8788p1_64_bsp.mk文件中加入MTK_AB_OTA_UPDATER=yes时,没有将MTK_AB_OTA_UPDATER添加到export中,导致一直编译报错

1.4.2. 升级问题

1.4.2.1. 没有联网

机器忘了联网,升级时会出现ERROR:libcurl_http_fetcher.cc(436)] Unable to get http response code的报错

1.4.2.2. 配置不全

漏了device/mediateksample/tb8788p1_64_bsp/device.mk中的AB_OTA_UPDATER := true配置,会报E update_engine: Mandatory metadata size in Omaha response (0) is missing/incorrect, actual = 113188错误

1.4.2.3. payload.bin文件不匹配

payload.bin文件不匹配,升级时会报:E update_engine:ERROR:delta_performer.cc(1452)] The current OS build timestamp is newer than the maximum timestamp in the manifest,注意检查上传到http中的payload.bin文件是否是对应的(我在这个上面卡住了好久)

1.4.2.4. 升级命令格式不对

升级命令格式出错导致升级失败,E update_engine: VerifyPayload failure: payload_hash_calculator_.raw_hash() == update_check_response_hash,要严格按照上面所说的命令格式要求来进行升级

MTK A/B system说明及配置相关推荐

  1. MTK Secure Boot 2.1详细配置方案-终极版

    1. 目的/背景 此文档使用了secure boot 2.1方案的配置,如有其他版本的secure方案,本文档仅作参考,secure boot方案可在security MTK文档中查到,也可以咨询MT ...

  2. 创建在“system.net/defaultProxy”配置节中指定的 Web 代理时出错。

    解决办法: 在CMD下输入netsh winsock reset命令 NETSH WINSOCK RESET这条命令的含义和作用? 简单来说netsh winsock reset命令含义是重置 Win ...

  3. android gsensor 坐标,MTK Android G sensor 原理,配置,调试

    原理图: g_sensor的驱动目录在mediatek/custom/common/kernel/accelerometer下. 一.g_sensor 的移植步骤 1.在ProjectConfig.m ...

  4. MTK驱动(84)---GPS 配置

    1. 查看原理图: GPS xLNA --GPIO_GPS_LNA_EN // 据此查到对应GPIO79(AL27) 2. 修改dws: 3. 修改dts: /* CONSYS GPIO standa ...

  5. 转自蒋宇(MTK WAP和MMS网络服务配置 )

    1.数据账户配置 1.1 APN 简介 APN的英文全称是Access Point Name,中文全称叫接入点,是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络 1. ...

  6. mtk dws工具中的keypad配置

    1. 需求 2. dws工具配置key配置 3. 编译调试 3.1 配置完keypad时,发现系统根本就没更新对应设置keyvalue值 通过对比out/下内核生成的dtsi确认, vi out/ta ...

  7. ibm x3250 m4 安装linux,IBM system X3250 M4 配置RAID磁盘阵列的方法

    最近接手两台IBMsystemX3250M4的机器. 一台用两块SAS硬盘组成RAID1.安装Windowsserver2008. 一台用四块SAS硬盘组成RAID10.安装RHEL5.8 注意: s ...

  8. MTK驱动之modem编译及配置

    本文作者驱动熊,转载请注明出处及本博客链接. 主要介绍modem的编译和3G  .4G手机modem的配置方法. 首先编译modem版本,大家了解到modem的编译指令,主要是把做好的配置文件导入到源 ...

  9. system 相关的配置 /etc/sysctl.conf

    sysctl root@B:/etc/sysctl.d# sysctl --h sysctl: unrecognized option: h BusyBox v1.28.3 () multi-call ...

最新文章

  1. c得到当前时分秒 linux_Linuxc - Linux系统下的时间知识点
  2. 【数据结构与算法】【算法思想】贪心算法
  3. linux e1000内核源码,linux下e1000网卡奇怪现象
  4. .dat文件三维点云可视化
  5. 微分几何笔记(3) —— Frenet标架及Frenet方程组
  6. TCP RTT测量妙计
  7. Pop!_OS安装与配置(三):系统美化
  8. vant上传图片 转二进制_土旦:移动端 Vue+Vant 的Uploader 实现 :上传、压缩、旋转图片-Go语言中文社区...
  9. 关于AE动画文件如何导出 cocos-creater所需的序列帧动画的方法
  10. 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建
  11. TopLevel和Topmost
  12. mysql判断叠字_格律诗的八大语法特点
  13. CQOI2016游记
  14. 4.3 移位寄存器的实现和应用
  15. 如何利用wordpress搭稳网站
  16. 华为一口气发布十余款新品,HarmonyOS用户过亿
  17. java.lang.IllegalArgumentException的解决方法
  18. Android虚拟机PC键盘模拟按键 .
  19. win7计算机建立无线网络连接不上,Win7笔记本无线网络连接不上如何解决?
  20. Modbus-异常响应

热门文章

  1. oracle关键字 bulk,oracle和sqlserver的一些保留关键字
  2. jsp+php 服务器环境,Windows下Apache+Tomcat+jsp+php的服务器整合配置
  3. java画虚线_在java中绘制虚线
  4. java synchronized关键字锁和锁类型、锁升级过程讲解
  5. 虚拟机下挂载CentOS 镜像并配置yum本地镜像源
  6. 反转链表python
  7. 微服务架构的优缺点_微服务架构DNS服务注册与发现实现原理
  8. oracle查看数据库所有列,sql – 如何查看oracle数据库中表的列的所有元数据?
  9. Java 算法 麦森数
  10. 喵喵的华为DevCloud使用指南(2)-看板项目