Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级

本文主要是介绍Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. bootable/recovery/recovery.cpp

(1) 下面宏变量 USB_BLK_PATH 是U盘节点路径,使用时按实际情况修改。
(2) 函数 usb_mount_thread 中的 max_mount_cnt 变量规定了尝试挂载U盘的次数,每次循环使用2秒延迟,按照实际情况修改。
(3) 当检测到U盘内有名为 force_ota.zip 升级包文件,则执行升级过程。升级成功后,重启到主系统;否则,重启Recovery系统。

diff --git a/recovery.cpp b/recovery.cpp
--- a/recovery.cpp
+++ b/recovery.cppstatic constexpr const char* LAST_LOG_FILE = "/cache/recovery/last_log";static constexpr const char* LOCALE_FILE = "/cache/recovery/last_locale";#define UFS_DEV_SDCARD_BLK_PATH "/dev/block/mmcblk0p1"
+#define USB_BLK_PATH "dev/block/sda1"+std::string force_ota_path = "";static constexpr const char* CACHE_ROOT = "/cache";static Device::BuiltinAction prompt_and_wait(Device* device, int status) {status = ApplyFromAdb(device, false /* rescue_mode */, &reboot_action);} else {adb = false;
-          status = ApplyFromSdcard(device, ui);
+          status = ApplyFromSdcard(device, ui, force_ota_path);}ui->Print("\nInstall from %s completed with status %d.\n", adb ? "ADB" : "SD card", status);static void log_failure_code(ErrorCode code, const std::string& update_package)LOG(INFO) << log_content;}+static InstallResult installOtaPackage(std::string force_ota_path, Device* device)
+{
+  LOG(INFO) << "force_ota.zip found, updating ...";
+  ui->InterruptKey();
+  ui->SetBackground(RecoveryUI::NONE);
+  ui->ShowText(false);
+  return static_cast<InstallResult>(ApplyFromSdcard(device, ui, force_ota_path));
+}+static void* usb_mount_thread(void* device) {
+  const int max_mount_cnt = 10;
+  int* install_result = static_cast<int*>(malloc(sizeof(int))

这篇关于Android系统 —— Recovery子系统下自动检测U盘内升级包并进行升级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885970

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja