adb disable-verity执行失败的原因

在Android 8.1设备上执行adb disable-verity命令时会遇到"Error getting verity state"错误,原因在于该命令尝试修改vbmeta.img,而在Android 8.1中此镜像受到secure boot保护,导致修改后无法开机。此问题在Android 7.0及更低版本中不会出现,因为不涉及set_avb_verity_enabled_state()函数。了解更多关于Android Verify Boot(AVB)的信息,请参考官方文档。

在andrid8.1手机上,执行#adb disable-verity 命令返回如下error信息。
“Error getting verity state”
原因:
执行#adb disable-verity命令 会调用如下函数

void set_verity_enabled_state_service(int fd, void* cookie) {
...
  if (using_avb) {
        // Yep, the system is using AVB.
        AvbOps* ops = avb_ops_user_new();
        if (ops == nullptr) {
            WriteFdFmt(fd, "Error getting AVB ops\n");
            return;
        }
        if (set_avb_verity_enabled_state(fd, ops, enable)) {
            any_changed = true;
        }
...
}

该函数中调用set_avb_verity_enabled_state()

/* Use AVB to turn verity on/off */
static bool set_avb_verity_enabled_state(int fd, AvbOps* ops, bool enable_verity) {
    std::string ab_suffix = get_ab_suffix();

    bool verity_enabled;
    if (!avb_user_verity_get(ops, ab_suffix.c_str(), &verity_enabled)) {
        WriteFdFmt(fd, "Error getting verity state\n");
        return false;
    }

从该函数中返回 "Error getting verity state“这个error信息。

#adb disable-verity 这个指令会修改vbmeta.img这个镜像的部分内容,
但这个镜像是在android8.1上被secure boot功能保护的,一旦镜像发生改变,
将会因vbmeta校验不过导致无法开机。

注意:在android7.0的项目中,执行#adb disable-verity命令并不会调用到set_avb_verity_enabled_state(),所以这个问题在android7.0上并不存在。

关于avb(Android verify boot)的解释,可以参考:
https://android.googlesource.com/platform/external/avb/+/master/README.md

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值