参考:
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;
}