Android - lock/unlock bootloader

news2024/11/14 7:21:13

在执行 adb remount 时高版本经常会提示失败

 此时就需要对设备的进行解锁操作。记录两个部分,Google解锁和展锐解锁。

目录

一、Google解锁

二、展锐解锁

三、补充跳过按键检测的方案


一、Google解锁

官网介绍的unlock方法如下:锁定/解锁引导加载程序  |  Android Open Source Project

简单总结一下需要的步骤如下:

1、进入引导加载程序

adb reboot bootloader

2、解锁引导加载程序(设备处于lock状态,进行unlock)

fastboot flashing unlock

3、锁定引导加载程序(设备处于unlock状态,进行lock)

fastboot flashing lock
二、展锐解锁

我们使用的是展锐的芯片,根据以上步骤操作会提示未知的命令,如下图:

查阅了相关的 《Android 12.0 Secure Boot使用指南V1.0.pdf》、《Android 14 Secure Boot使用指南V1.0.pdf》 都有介绍详细流程。这里根据自己理解记录下需要的操作。

 1、进入引导加载程序

adb reboot bootloader

2、获取当前手机的id  

fastboot oem get_identifier_token

 3、生成解锁凭证 certificate.bin(ubuntu环境下)

脚本路径为:vendor/sprd/tools/packimage_scripts

秘钥路径为:bsp/tools/secureboot_key/config/rsa4096_vbmeta.pem

vendor/sprd/tools/packimage_scripts$ ./signidentifier_unlockbootloader.sh 上一步获取到的id ../../../../bsp/tools/secureboot_key/config/rsa4096_vbmeta.pem certificate.bin

4、PC上执行如下的解锁指令,需要在设备侧按音量下键确认

fastboot flashing unlock_bootloader certificate-b.bin

然后重启设备即可。

 5、PC上执行如下的锁定指令

fastboot flashing lock

注意:需要使用平台编译生成的 fastboot,编译指令为 make fastboot。生成路径为out/host/windows-x86

三、补充跳过按键检测的方案
bsp/bootloader/lk

diff --git a/app/sprdboot/fastboot.c b/app/sprdboot/fastboot.c
index 7291950a..679bb2b8 100755
--- a/app/sprdboot/fastboot.c
+++ b/app/sprdboot/fastboot.c
@@ -3137,12 +3137,15 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
                        fastboot_okay("Bootloader has been locked!\n");
                        return;
                }
-
+               // lichang 忽略按键选项,直接lock 
+               /*@start*/
                lcd_printf("\n   Warning: lock device may erase user data.\n");
+               lcd_printf("\n   Ignore key.\n");
+               /*
                lcd_printf("   Press volume down button to confirm that.\n");
                lcd_printf("   Press volume up button to cancel.\n");
                while(!butt_check) {
-                       /* continue check till button pressed */
+                       *//* continue check till button pressed *//*
                        key_code = wait_for_keypress();
                        if (key_code == KEY_VOLUMEDOWN) {
                                butt_check = true;
@@ -3151,7 +3154,8 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
                                fastboot_okay("Info:user cancel lock bootloader!   ");
                                return;
                        }
-               }
+               }*/
+               /*@end*/
                lcd_printf("   Begin to erase user data...\n");
                if (0 != common_raw_erase("userdata", 0, 0)) {
                        debugf("erase userdata failed\n");
@@ -3191,11 +3195,15 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
                        return;
                }
 
+               // lichang 忽略按键选项,直接lock 
+               /*@start*/
                lcd_printf("\n   Warning: lock device may erase user data.\n");
+               lcd_printf("\n   Ignore key.\n");
+               /*
                lcd_printf("   Press volume down button to confirm that.\n");
                lcd_printf("   Press volume up button to cancel.\n");
                while(!butt_check) {
-                       /* continue check till button pressed */
+                       *//* continue check till button pressed *//*
                        key_code = wait_for_keypress();
                        if (key_code == KEY_VOLUMEDOWN) {
                                butt_check = true;
@@ -3204,7 +3212,8 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
                                fastboot_okay("Info:user cancel lock bootloader!   ");
                                return;
                        }
-               }
+               }*/
+               /*@end*/
                lcd_printf("   Begin to erase user data...\n");
                if (0 != common_raw_erase("userdata", 0, 0)) {
                        debugf("erase userdata failed\n");
@@ -3259,10 +3268,14 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
         //memset(product_sn_signature, 0, sizeof(product_sn_signature));
 
                lcd_printf("\n   Warning: Unlock device may erase user data.\n");
+               //lichang 忽略按键,直接unlock
+               /*@start*/
+               /*
+               lcd_printf("   Ignore key.\n");
                lcd_printf("   Press volume down button to confirm that.\n");
                lcd_printf("   Press volume up button to cancel.\n");
                while(!butt_check) {
-                       /* continue check till button pressed */
+                       *//* continue check till button pressed *//*
                        key_code = wait_for_keypress();
                        if (key_code == KEY_VOLUMEDOWN) {
                                butt_check = true;
@@ -3271,7 +3284,8 @@ void fb_cmd_flashing(const char *arg, void *data, uint64_t sz)
                                fastboot_okay("Info:user cancel unlock bootloader!   ");
                                return;
                        }
-               }
+               }*/
+               /*@end*/
                lcd_printf("   Begin to erase user data...\n");
                if (0 != common_raw_erase("userdata", 0, 0)) {
                        debugf("erase userdata failed\n");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程与并发安全

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(3)

💖💖💖亲爱的朋友们,热烈欢迎你们来到我的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博客&…

如何使用ssm实现基于HTML5的出租车管理系统

TOC ssm126基于HTML5的出租车管理系统jsp 绪论 1.1 选题背景 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以…

【数据结构5】二叉搜索树(插入、查询、删除)

1 二叉搜索树 1.1 二叉搜索树-插入 1.2 二叉搜索树-查询 1.3 二叉搜索树-删除 1 二叉搜索树 二叉搜索树是一颗二叉树且满足性质:设是二叉树的一个节点。 如果y是x左子树的一个节点&#xff0c;那么y.key< x.key;如果y是x右子树的一个节点&#xff0c;那么y.key > x.key。…

【非常困难】 猿人学web第一届 第10题 js 混淆 - 重放攻击对抗

文章目录 调试干扰第一个 debuggerHook 代码 第二个 debuggerHook 代码 第三个 Function.constructor.prototype 检测Hook 代码 完整的 Hook 代码 接口分析加密参数 m 生成位置加密参数还原加密点扣代码提示_yrxyA\$()var _yrxmEu _yrxWKg(_yrxyHJ...._yrxWKg() let result _…

命令执行漏洞-rce

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 1.1 命令执行漏…

47.x86游戏实战-VEHHOOK封包函数

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具

Aiseesoft Mac Video Converter Ultimate是一款视频转换与编辑软件&#xff0c;以其强大的功能和简单易用的操作界面赢得了广泛好评。该软件不仅支持多种视频格式的转换&#xff0c;还集成了丰富的视频编辑功能&#xff0c;满足了用户多样化的视频处理需求。 核心功能概述 视频…

mysqlcheck

mysql bin中的其他工具包 对于mysql的其他工具, 有很多选项是公共的, 例如你在对数据库进行检查的时候, 需要指定host和user以及其password来连接上mysqlserver来进行相关操作, 这个时候其实用到的host等东西跟我们之前的mysql-client其实是类似的 也就是说他们是作为mysql众…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

C++不同数据类型连接成一个字符串

在C中数据连接的方式使用号进行连接。 1.都是字符型时直接使用连接几个字符串&#xff1b; 2.不是字符类型时&#xff0c;要用to_string函数转换后再连接。

做空股指期货一手多少钱?

股指期货的保证金比例是12%-15%不等&#xff0c;所以做空一手股指期货的保证金最少是要十几万元&#xff0c;部分平台两万。关于做空一手股指期货的具体金额&#xff0c;这并非固定不变&#xff0c;而是会根据市场的实时价格、合约的乘数以及交易所的规定等因素而有所变动。 股…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题&#xff1a; module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初&#xff0c;我的代码有错误,代码如下…

快速判断一个项目是Spring MVC框架还是Spring Boot框架

1. 查看项目的启动类 Spring Boot: 通常有一个主类&#xff0c;包含 SpringBootApplication 注解&#xff0c;并且有一个 main 方法来启动应用程序。 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Appli…

探索数据结构:图(三)之最短路径算法

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 最短路径算法 最短路径问题可分为单源最短路径和多源最短路径。其指…

如何使用ssm实现珠宝首饰交易平台开发

TOC ssm101珠宝首饰交易平台开发jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于珠宝首饰交易平台所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商品信息管…

【Material-UI】Radio Group中的 Label Placement 属性详解

文章目录 一、Radio Group 组件概述1. 组件介绍2. Label Placement 属性的作用 二、Label Placement 属性的基本用法三、Label Placement 属性详解1. 标签位置的选择2. 如何在实际项目中选择标签位置 四、Label Placement 属性的实际应用场景1. 表单布局中的应用2. 符合用户习惯…

多进程多线程及之间通信机制

目录 前言 一、多进程与多线程 1. 多进程 多进程的特点 多进程的应用场景 2. 多线程 多线程的特点 多线程的应用场景 3. 多进程与多线程的对比 二、进程与线程之间的通信机制 1. 进程间通信&#xff08;IPC, Inter-Process Communication&#xff09; 2. 线程间通信…

Golang | Leetcode Golang题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; type pair struct {x, y int }func canMeasureWater(jug1Capacity int, jug2Capacity int, targetCapacity int) bool {//剪枝if jug1Capacityjug2Capacity < targetCapacity {return false}var (dfs func(x, y int) bool // jug1有x水…

NC包含min函数的栈

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 定义栈的数据…