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

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

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

而在虚拟化系统中,如何保证Host QNX和Guest Android两个不同系统的AB分区一致是个值得探究的问题。

本文探索了,Host QNX中的资源管理模块VMM(Virtual Machine Manager)在启动Android虚拟机的时候是如何获取Android系统的AB分区信息。


一、VMM中的关键LOG

关于高通的虚拟机资源管理器VMM见文末参考,这里以该模块打印的log作为引子。

在启动Android虚拟机的log中,一行来自vmm_service的关键log提示了Host QNX和Guest Android的slot状态(A/B升级系统中用slots表示ab分区集合状态,参考Android OTA A/B system update):

Jan 01 00:00:07.830        vmm.868420        default  16130  vmm_service[vmm_fsm.c:762]:

guest target slot : a host current slot: b Config slot:@/mnt/vm/images/la_dp_enabled_a.config

根据这行log中,我们可以获取以下信息:

  • 打印来自VMM模块的vmm_fsm.c文件
  • guest指的是Android系统,目标slot为a
  • host指的是QNX系统,当前slot为b
  • guest slot配置文件名为/mnt/vm/images/la_dp_enabled_a.config

从中可以推测出以下信息:

  • QNX和Android可以处于不同的AB分区状态下运行
  • 根据配置文件名,可以推断此配置的两个使用条件:
    1. 动态分区被使能
    2. slot为a的分区配置被采用

二、VMM中的关键CODES

通过以上分析可以发现,在Android虚拟机启动的过程中,VMM模块参与了安卓AB分区的管理。

让我们进一步进行探索:

1.VMM状态机管理

由获取的信息定位到这行关键的log在vmm_fsm.c文件的位置:

static int launch_gvm(struct gvm_context *ctx)
{
    ...
    if (ctx->vm_avb_version == 2) {

        pthread_barrier_wait(&ctx->config_barrier);

        if (!ctx->bank || ctx->slot_switch_config == SYMMETRIC_SLOT_SWITCH) {
            ctx->bank = ctx->swdl_slot;
        }
        ...
        /* Dynamic Parition is Enabled only for LA GVM */
        if (ctx->vmid == 2) {
            if (ctx->qvb.is_dp_enabled == true) {
                _argv[3] = (ctx->bank == 'a')? ctx->qvb.dp_enabled_a_conf_fname: ctx->qvb.dp_
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值