13.1 AB分区升级:双保险机制先说说AB分区。这个设计其实不复杂,但非常实用。系统有两个完整的系统分区:A分区和B分区。一个在跑,另一个闲着。为什么需要AB分区?你想想看,如果只有一个分区,升级写到一半断电了,车机就变砖了。AB分区的核心思想就是:升级时写空闲分区,写完了再切换。这样就算升级失败,当前运行的分区纹丝不动。AB分区布局示意分区布局: /dev/block/bootdevice/by-name/ ├── boot_a # A分区boot镜像 ├── boot_b # B分区boot镜像 ├── system_a # A分区系统镜像 ├── system_b # B分区系统镜像 ├── vendor_a # A分区vendor镜像 ├── vendor_b # B分区vendor镜像 ├── misc # 存储升级状态 └── ...我在项目中遇到过一个问题:客户要求升级后必须保留用户数据。AB分区天然支持这个需求,因为数据分区是共享的,不参与AB切换。嗯,这里要注意,数据分区虽然共享,但升级前后版本差异太大时,数据兼容性可能会出问题。13.2 OTA包制作:从源码到升级包OTA包的制作,我习惯用高通提供的工具链。说白了就是三步:编译镜像、打包差分、签名校验。制作流程: