android oem解锁,Android平台OEM解锁分析

本文深入探讨了Android设备的OEM解锁过程,涉及关键的解锁变量、分区权限、安全启动状态以及如何通过设置和命令行进行解锁和锁定操作。内容包括解锁标志的存储位置,如devinfo分区和config分区,并解释了如何通过设置`is_unlocked`和`is_unlock_critical`字段来控制设备解锁状态。
摘要由CSDN通过智能技术生成

一般安卓fastboot刷机需要unlock device,也叫unlock bootloader,我想多半和lock/unlock在bootloader中实现有关,ok,下面就来看下相关代码,参考高通平台P LK。

device_info中记录了是否解锁,有两个:is_unlocked, is_unlock_critical:static device_info device = {DEVICE_MAGIC,0,0,0,0,{0},{0},{0},1,{0},0,{0}};struct device_info

{

unsigned char magic[DEVICE_MAGIC_SIZE];

bool is_unlocked; //tj: here

bool is_tampered;

bool is_unlock_critical; //tj: here

bool charger_screen_enabled;

char display_panel[MAX_PANEL_ID_LEN];

char bootloader_version[MAX_VERSION_LEN];

char radio_version[MAX_VERSION_LEN];

bool verity_mode; // 1 = enforcing, 0 = logging

...

};enum unlock_type {

UNLOCK = 0,

UNLOCK_CRITICAL,

};

刷机代码有提到区别:ifeq ($(BOARD_AVB_ENABLE),true)

VERIFIED_BOOT_2 := VERIFIED_BOOT_2=1

else

VERIFIED_BOOT_2 := VERIFIED_BOOT_2=0

endifvoid cmd_flash_mmc(const char *arg, void *data, unsigned sz)

{

...

#if VERIFIED_BOOT || VERIFIED_BOOT_2

if (target_build_variant_user())

{

/* if device is locked:

* common partition will not allow to be flashed

* critical partition will allow to flash image.

*/

if(!device.is_unlocked && !critical_flash_allowed(arg)) {

fastboot_fail("Partition flashing is not allowed");

return;

}

/* if device critical is locked:

* common partition will allow to be flashed

* critical partition will not allow to flash image.

*/

if (VB_M <= target_get_vb_version() &&

!device.is_unlock_critical &&

critical_flash_allowed(arg)) {

fastboot_fail("Critical partition flashing is not allowed");

return;

}

}

#endif

看下critical_flash_allowed:static const char *critical_flash_allowed_ptn[] = {

"aboot",

"rpm",

"tz",

"sbl",

"sdi",

"sbl1",

"xbl",

"hyp",

"pmic",

"bootloader",

"devinfo",

"partition"};

static bool critical_flash_allowed(const char * entry)

{

uint32_t i = 0;

if (entry == NULL)

return false;

for (i = 0; i < ARRAY_SIZE(critical_flash_allowed_ptn); i++) {

if(!strcmp(entry, critical_flash_allowed_ptn[i]))

return true;

}

return false;

}

userdebug刷机不care这个unlock。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值