MTK:oemlock介绍

参考:

1、https://source.android.com/security/verifiedboot/boot-flow
2、vendor/mediatek/proprietary/bootable/bootloader/lk/platform/common/boot/vboot_state.c
3、system/core/fastboot/device/utility.cpp
4、system/core/fs_mgr/libfs_avb/util.cpp

重要属性介绍:

1、androidboot.verifiedbootstate
androidboot.verifiedbootstate有四个值
green、yellow、orange(设备已UNLOCKED)、red

在uboot(lk中),根据 g_boot_state全局变量,对该属性进行赋值
在fastboot代码中,会通过cat /proc/cmdline去查找androidboot.verifiedbootstate=orange
在system/core/fs_mgr/libfs_avb中,提供IsDeviceUnlocked,返回unlock的状态

2、androidboot.veritymode

引导加载程序通过内核命令选项将启动时验证状态传达给 Android。它会将 androidboot.verifiedstate 选项设置为以下其中一个值:

green:如果设备已LOCKED且未使用可由用户设置的信任根
yellow:如果设备已LOCKED且使用了可由用户设置的信任根
orange:如果设备已UNLOCKED
androidboot.veritymode 选项设置为 eio 或 restart,具体取决于引导加载程序在处理 dm-verity 错误时所处的状态。

androidboot.verifiedbootstate相关代码

vendor/mediatek/proprietary/bootable/bootloader/lk/platform/common/boot/vboot_state.c

int set_boot_state_to_cmdline()
{
	int ret = 0;

#ifndef MTK_SECURITY_SW_SUPPORT
	cmdline_append("androidboot.verifiedbootstate=orange");
#else
	switch (g_boot_state) {
		case BOOT_STATE_ORANGE:
			cmdline_append("androidboot.verifiedbootstate=orange");
			break;
		case BOOT_STATE_YELLOW:
			cmdline_append("androidboot.verifiedbootstate=yellow");
			break;
		case BOOT_STATE_RED:
			cmdline_append("androidboot.verifiedbootstate=red");
			break;
		case BOOT_STATE_GREEN:
			cmdline_append("androidboot.verifiedbootstate=green");
			break;
		default:
			break;
	}
#endif
 
	return ret;
}

system/core/fastboot/device/utility.cpp

bool GetDeviceLockStatus() {
    std::string cmdline;
     // Return lock status true if unable to read kernel command line.
    if (!android::base::ReadFileToString("/proc/cmdline", &cmdline)) {
         return true;
     }
     return cmdline.find("androidboot.verifiedbootstate=orange") == std::string::npos;
}

system/core/fs_mgr/libfs_avb/util.cpp

bool IsDeviceUnlocked() {
    std::string verified_boot_state;
 
    if (fs_mgr_get_boot_config("verifiedbootstate", &verified_boot_state)) {
         return verified_boot_state == "orange";
     }
    return false;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值