choose_total_tries和chooseleaf_descend_once理解

choose_total_tries

为防止陷入死循环,需要对选择每个副本过程中的尝试次数进行限制,这个限制称为全局尝试次数(choose_total_tries);

chooseleaf_descend_once

同时,因为在容灾模式下,会产生递归调用,所以还需要限制产生递归调用时作为下一级输入的全局尝试次数,因为这个限制会导致递归调用时的全局尝试次数成倍增长,所以实现上采用一个布尔变量(chooseleaf_descend_once)进行控制,如果为真,则在产生递归调用时下一级被调用者至多重试一次;反之则下一级被调用者不进行重试,由调用者自身重试。

### 关于 AVB_AB_MAX_TRIES_REMAINING 的定义与错误处理 #### 定义说明 `AVB_AB_MAX_TRIES_REMAINING` 是 Android Verified Boot (AVB) 中的一个重要参数,用于表示设备在 A/B 更新机制下剩余的最大尝试次数。当设备启动失败时,该值会被用来决定是否继续尝试当前槽位还是切换到备用槽位。如果 `max_tries_remaining` 达到零,则表明当前槽位已耗尽重试机会[^1]。 此变量通常存储在 `vbmeta` 结构体中,并通过哈希链的方式保护其完整性。每次更新或恢复操作都会修改这一字段并重新计算相应的摘要值(digest),以确保数据未被篡改。 #### 错误处理逻辑 对于 `AVB_AB_MAX_TRIES_REMAINING` 的错误处理主要体现在以下几个方面: 1. **启动失败后的行为调整** 当检测到某个槽位的启动失败后,系统会检查 `AB max tries remaining` 字段。如果该数值大于零,则减少一次计数并将新的状态写回磁盘;反之,若等于零,则触发切换至另一可用槽位的操作流程[^2]。 2. **持久化存储的安全保障** 鉴于上述提到的关键属性需长期保存且不可轻易更改,因此采用了基于 SHA-256 哈希算法来维护整个 vbmeta 数据结构的一致性真实性验证过程。具体实现可见如下伪代码片段展示如何初始化、更新以及最终完成散列运算的部分步骤: ```c // 初始化SHA-256上下文环境 avb_sha256_init(&sha256_ctx); // 将头部区块加入到消息流当中进行初步混合 avb_sha256_update( &sha256_ctx, header_block, sizeof(AvbVBMetaImageHeader) ); // 继续追加辅助信息部分的数据块直到完全覆盖所有关联区域为止 avb_sha256_update( &sha256_ctx, auxiliary_block, h.auxiliary_data_block_size ); // 获取最后形成的固定长度的消息摘要作为整体文件唯一标识符 computed_hash = avb_sha256_final(&sha256_ctx); ``` 3. **加载分区前的基础筛选** 在实际执行过程中还存在一种情况即某些特定条件下即使目标分区内含有所请求项目也可能因外部因素影响而无需进一步动作的情形。例如下面这段源码体现了只有当找到确切匹配项才会继续深入分析否则直接判定成功退出循环: ```c /* 如果最初就没有对该分区发出任何需求那么不必浪费资源去读取或者检验 */ found = avb_strv_find_str(requested_partitions, (const char*)desc_partition_name, hash_desc.partition_name_len); if (found == NULL) { ret = AVB_SLOT_VERIFY_RESULT_OK; goto out; } ``` 综上所述,在面对涉及多层嵌套关系复杂场景下的异常状况管理方案设计时应充分考虑到各种可能发生的边界条件并通过严谨细致的技术手段加以防范从而最大限度降低潜在风险带来的负面影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值