[SA8155] 探索QNX Hypervisor如何管理Android系统的AB分区(三)

本文建议在对高通8155车机系统有一定的了解下进行阅读

文章目录

前言

一、FDT设备树中的关键配置

二、VMM中的关键codes

1.Android的slot状态

2.slot switch配置

3.Android的slot切换

总结

参考


前言

高通SA8155的基建默认采用的是A/B系统升级作为OTA升级方案。

然而,从Android 10开始,Android引入了动态分区,为VAB(Virtual A/B)升级机制做铺垫,从底层GUID分区表开始做改造。随着Android版本的迭代,动态分区关闭所造成的维护成本只会越来越高,所以高通车载芯片的基建还是提早做了两手准备,给出了带动态分区和不带动态分区的两种A/B升级方案。

本文探索了,Android不带动态分区的A/B升级方案下,Host QNX中的资源管理模块VMM(Virtual Machine Manager)是如何处理两个系统的slot状态。


一、FDT设备树中的关键配置

以第二篇探索里的第二章节第二小节,FDT设备树,作为引子(文末有参考链接)。

在文件system.build.tmpl中,配置/vm/images/la_dp_disabled.config用于动态分区关闭的情况:

###########################################
# When Dynamic Parition is not enabled    #
###########################################
/vm/images/la_dp_disabled.config={

...

# vbmeta /dev/block/vdh
vdev vdev-virtio-blk.so loc 0x1c140000  intr gic:49 hostdev /dev/disk/la_vbmeta

# Misc /dev/block/vdg
vdev vdev-virtio-blk.so loc 0x1c130000  intr gic:48 hostdev /dev/disk/la_misc

...

# user-data /dev/block/vdc
vdev vdev-virtio-blk.so loc 0x1c0f0000  intr gic:43 threads 4 hostdev /dev/disk/la_vendor

# user-data /dev/block/vdb
vdev vdev-virtio-blk.so loc 0x1c0e0000  vmid 2 intr gic:39 hostdev /dev/disk/la_userdata dio enable max-io-size 512k

# system /dev/block/vda
vdev vdev-virtio-blk.so loc 0x1c0b0000  intr gic:40 threads 4 hostdev /dev/disk/la_system

}

得到推论,也是遗留的问题:“动态分区不使能的情况下,Android系统没有ab分区,难道不是ab系统升级吗”。

尽管可以从Android官网可以找到相关线索,但是建议参考洛奇看世界-CSDN博客中关于Android A/B System OTA分析(见文末参考链接),这篇博客里图文并茂的对比了传统OTA分区系统和A/B分区系统,并且提到了“传统OTA的分区”,“只有一套分区”系统。

从分区配置的角度来看,关闭动态分区的情况下,Android配置的是非A/B系统分区,那么,

  1. Android系统不应该存在ab slot的说法,slot状态是怎么一回事?
  2. 基建是如何实现Android的AB系统升级呢?

二、VMM中的关键codes

继续第一篇探索中获得的信息(见文末参考链接)做进一步探索。

1.Android的slot状态

vmm_fsm.c文件中,代表Guest Android slot状态的成员变量bank存在‘a’'b''\0'三种状态('\0'为空):

int get_gvm_boot_slot_info(struct gvm_context* ctx)
{
    int ret = 0;
    struct boot_slot_info slot_info;
    ...
    if (slot_info.target_slot == 'a' || slot_info.target_slot == 'b')
        ctx->bank = slot_info.target_slot;
    else
        ctx->bank = '\0';
    ...
err:
    return ret;
}

如果是AB系统,'\0'空状态的存在似乎说不过去,有可能是个BUG;如果是非AB系统,'\0'空状态的存在,似乎还是合理的。

而代表Host QNX的slot状态仅有‘a’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值