当前位置: 首页 > news >正文

RK3288 android7.1 实现ota升级时清除用户数据

一,OTA简介(整包,差分包)

OTA全称为Over-The-Air technology(空中下载技术),通过移动通信的接口实现对软件进行远程管理。
在这里插入图片描述

1. 用途:

OTA两种类型最大的区别莫过于他们的”出发点“(我们对两种不同升级包的创建,并使用它进行OTA升级)。我们创建整包时不需要old包,可以直接使用base包进行升级,因此整包一般用来升级整个固件【∞ -> B】,而差分包一般用于两个特定的点【A->B】

2. 大小:

通常情况下,整包的大小比较接近于整个固件的镜像。而差分包并没有特定的限制,可以和整包差不多大,也可以只有几KB,不过通常情况下,差分包要比整包小得多

3. 内容:

OTA整包从大小和内容上都比较接近完整的固件镜像。而差分包更像是一个patch,我们可以认为是A和B差异的部分。
在这里插入图片描述


二,问题现象

ota整包升级后(ota升级相当于优化上一个系统,内部原本的数据是不会清除掉),上个系统里的残留数据导致升级后出现问题(比如:apk内部无法联网)。


三,修改步骤

1. 设置OPTIONS.wipe_user_data

把OPTIONS.wipe_user_data设为True,再编译生成ota升级包(ota升级后可格式化data分区)。

源码:build/tools/releasetools/ota_from_target_filesdiff --git a/build/tools/releasetools/ota_from_target_files.py b/build/tools/releasetools/ota_from_target_files.py
index e88fa7d832..710c6797c8 100755
--- a/build/tools/releasetools/ota_from_target_files.py
+++ b/build/tools/releasetools/ota_from_target_files.py
@@ -150,7 +150,7 @@ OPTIONS.verify = FalseOPTIONS.require_verbatim = set()OPTIONS.prohibit_verbatim = set(("system/build.prop",))OPTIONS.patch_threshold = 0.95
-OPTIONS.wipe_user_data = False
+OPTIONS.wipe_user_data = TrueOPTIONS.omit_prereq = FalseOPTIONS.downgrade = FalseOPTIONS.extra_script = None

2. 进入系统时需要输入Android密码问题

OPTIONS.wipe_user_data设为True后可能会出现进入系统时需要输入Android密码, 是因为data分区数据有问题(并不是因为加密)。

系统默认data分区格式是f2fs,但是可能会有出入,导致data分区被识别为ext4,导致如上问题(输入Android密码)

3. 解决需要输入Android密码问题

打上如下补丁:

diff --git a/bootable/recovery/updater/install.cpp b/bootable/recovery/updater/install.cpp
index 2651ac6874..43887dac4d 100644
--- a/bootable/recovery/updater/install.cpp
+++ b/bootable/recovery/updater/install.cpp
@@ -343,6 +343,7 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) {goto done;}device = getDevicePath(location);
+    printf("[fy][start]: fs_type=%s\n",fs_type); //加打印看fs_type的值,如果为f2fs则没问题if (strcmp(partition_type, "MTD") == 0) {mtd_scan_partitions();const MtdPartition* mtd = mtd_find_partition_by_name(device);
@@ -388,15 +389,16 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) {goto done;}const char *f2fs_path = "/sbin/mkfs.f2fs";
-        const char* const f2fs_argv[] = {"mkfs.f2fs", "-t", "-d1", location, num_sectors, NULL};
+        const char* const f2fs_argv[] = {"mkfs.f2fs", "-t", "-d1", device, num_sectors, NULL};int status = exec_cmd(f2fs_path, (char* const*)f2fs_argv);free(num_sectors);if (status != 0) {printf("%s: mkfs.f2fs failed (%d) on %s",
-                    name, status, location);
+                    name, status, device);result = strdup("");goto done;}
+       printf("[fy][end]: fs_type is f2fs!\n");result = location;#endif} else {

如果打印看fs_type的值为ext4,则需要去 device目录下搜所有的 recovery*fstab 文件,看看是不是有fstab中的data分区是被定义成ext4格式,如果有的话把它改成f2fs格式

相关文章:

RK3288 android7.1 实现ota升级时清除用户数据

一,OTA简介(整包,差分包) OTA全称为Over-The-Air technology(空中下载技术),通过移动通信的接口实现对软件进行远程管理。 1. 用途: OTA两种类型最大的区别莫过于他们的”出发点“(我们对两种不同升级包的创建&…...

okHttp的https请求忽略ssl证书认证

使用okhttp请求第三方https接口返回异常 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target意思就是非安全的调用&#…...

在Java中使用Spring Boot设置全局的BusinessException

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站:…...

Java 异常处理 -- Java 语言的异常、异常链与断言

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 009 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…...

Spring Cloud Nacos 详解:服务注册与发现及配置管理平台

Spring Cloud Nacos 详解:服务注册与发现及配置管理平台 Spring Cloud Nacos 是 Spring Cloud 生态系统中的一个子项目,提供了服务注册与发现、配置管理等功能,基于 Alibaba 开源的 Nacos 项目。Nacos 是一个易于使用的动态服务发现、配置管…...

java多线程临界区介绍

在Java多线程编程中,"临界区"是指一段必须互斥执行的代码区域。当多个线程访问共享资源时,为了防止数据不一致或逻辑错误,需要确保同一时刻只有一个线程可以进入临界区。Java提供了多种机制来实现这一点,例如synchroniz…...

基于JSP的超市管理系统

你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP MyBatis 工具:IDEA/Eclipse、Navicat、Maven 系统展示 员工管理界面图 管…...

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年,企业越来越注重生产的速度和成本,尤其是“性价比”,生产报工系统已经变成了制造业里不可或缺的一部分。不过,市场上生产报工系统的选择太多,价格也都不一样,这就给很多企业出了个难题&#xff1…...

blender bpy将顶点颜色转换为UV纹理vertex color to texture

一、关于环境 安装blender的bpy,不需要额外再安装blender软件。在python控制台中直接输入pip install bpy即可。 二、关于代码 本文所给出代码仅为参考,禁止转载和引用,仅供个人学习。 本文所给出的例子是https://download.csdn.net/downl…...

Flink Sql:四种Join方式详解(基于flink1.15官方文档)

JOINs flink sql主要有四种连接方式,分别是Regular Joins、Interval Joins、Temporal Joins、lookup join 1、Regular Joins(常规连接 ) 这种连接方式和hive sql中的join是一样的,包括inner join,left join&#xff…...

(delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第3节(泛型约束)

14.3 泛型约束 ​ 正如我们所看到的,您在泛型类的方法中可以做的事情非常少。您可以传递它(即分配它)并执行上面我介绍的泛型类型函数允许的有限操作。 ​ 为了能够执行泛型类的实际操作,通常需要对其进行约束。例如&#xff0c…...

C语言详解(预编译)

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...

解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题 拖拽后表头不变的bug修复 这个问题一般是使用v-for对column的数据进行循环的时候,key值绑定的是个index导致的,请看我上篇文章:eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):-…...

简单塔防小游戏

学习目标:熟悉塔防游戏核心战斗 游戏画面 项目结构目录 核心代码: if ( Input.GetMouseButtonDown(0)){if (EventSystem.current.IsPointerOverGameObject()false){//开发炮台的建造Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);Rayca…...

高考之后第一张大流量卡应该怎么选?

高考之后第一张大流量卡应该怎么选? 高考结束后,选择一张合适的大流量卡对于准大学生来说非常重要,因为假期期间流量的使用可能会暴增。需要综合考虑多个因素,以确保选到最适合自己需求、性价比较高且稳定的套餐。以下是一些建议…...

如何从微软官方下载Edge浏览器的完整离线安装包

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 正文内容 📒🚀 官方直链下载🚬 手动选择下载🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在网上搜索Microsoft Edge浏览器的离线安装包时,很多用户都会发现大部分都是在线安装包,无法满足他们在无网络环境下进…...

git 常用的命令

git 常用的命令 一、基础命令1.1 初始化1.2 添加文件1.3 查看缓存区中的文件1.4 查看上次提交到缓存区中的文件1.5 文件从缓存区取出1.6 提交文件1.6 查看提交中包含的文件1.7 查看commit记录 二、回退命令2.1 git reset2.2 将文件从暂存区取出2.3 将文件从仓库取出2.3.1 保留工…...

【StableDiffusion】Embedding 底层原理,Prompt Embedding,嵌入向量

Embedding 是什么? Embedding 是将自然语言词汇,映射为 固定长度 的词向量 的技术 说到这里,需要介绍一下 One-Hot 编码 是什么。 One-Hot 编码 使用了众多 5000 长度的1维矩阵,每个矩阵代表一个词语。 这有坏处&#xff0c…...

计算机网络(2) 网络层:IP服务模型

一.Internet Protocol在TCP/IP四层模型中的作用 第三层网络层负责数据包从哪里来到哪里去的问题。传输层的数据段提交给网络层后,网络层负责添加IP段,包含数据包源地址与目的地址。将添加IP段的数据包交由数据链路层添加链路头形成最终在各节点传输中所需…...

新人学习笔记之(初识C语言)

一、C语言的简介 1.C语言:1978年1月1日美国贝尔实验室推出的一门非常哇塞计算机语言 2.计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 二、C语言能做什么 1.操作系统 2.驱动开发 3.引擎开发 4.游戏开发 5.嵌入式开发 三、学习C语言的好处 …...

MCP2MQTT 完全指南:用 AI 自然语言控制硬件设备的开源 MCP 工具

前言 2025年4月,MCP2Everything 团队正式开源MCP2MQTT,这是全球首个将 MCP(模型上下文协议)与 MQTT 物联网协议无缝桥接的开源工具,彻底打通了 AI 大模型与物理硬件之间的"最后一公里"。无需编写任何胶水代码…...

终极开源硬件控制方案:5分钟实现OMEN游戏本深度性能调优

终极开源硬件控制方案:5分钟实现OMEN游戏本深度性能调优 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普OMEN游戏本…...

汽车后市场品牌营销路径:以奇正沐古和康明斯为例

在汽车后市场,很多品牌真正的难题并非没有技术、没有产品、没有资源,而是这些优势到了终端之后,无法变成司机、经销商和维修点愿意相信、愿意推荐、愿意购买的理由。康明斯发动机润滑油就是个典型例子,康明斯作为全球柴油发动机技…...

从Gemini Nano到Orion Core:Google 2026 AI芯片级升级路线图(附17个真实POC性能基准数据)

更多请点击: https://intelliparadigm.com 第一章:Gemini Nano到Orion Core:Google 2026 AI芯片级演进全景图 Google 正在以空前的系统性节奏重构其AI硬件栈——从终端侧轻量模型推理引擎 Gemini Nano,到2026年即将量产的全栈自研…...

Go语言安全编码实践:常见漏洞与防护

Go语言安全编码实践:常见漏洞与防护 1. 安全编码原则 安全编码是防止漏洞的根本,包括输入验证、输出编码、最小权限等原则。 2. 安全工具 package securityimport ("regexp""strings" )type Validator struct {emailRegex *regexp.R…...

Resolink MCP:基于MCP协议与Playwright的AI浏览器自动化实践

1. 项目概述:当AI助手学会“动手”——Resolink MCP的浏览器自动化革命如果你和我一样,每天在Cursor、Claude这类AI编程助手的陪伴下写代码,那你一定遇到过这样的场景:你正和AI热烈讨论一个技术方案,突然需要去浏览器里…...

实验记录-农药种衣剂

1.显色度取决于种子颗粒大小,种子越大,则显色越差;2.需加入增稠剂...

【JVM】面试题-有哪些垃圾回收器

【JVM】面试题-有哪些垃圾回收器 在JVM的内存管理中,垃圾收集算法是内存回收的核心逻辑与方法论,而垃圾收集器则是将这套方法论落地实现的具体工具。 不同的垃圾收集器针对JVM堆的不同分代(新生代、老年代)设计,具备不…...

技术生态依赖的实质与破局:从Android到自主可控的实践路径

1. 项目背景与核心议题解析最近在整理行业资料时,翻到一篇2013年的旧文,讨论的是当时中国工信部对国内移动产业过度依赖Android系统的担忧。虽然时过境迁,但文中提到的“技术自主可控”与“全球生态融入”之间的张力,在今天看来依…...

苍穹外卖开发日记-员工管理与AOP自动填充

苍穹外卖开发日记:员工管理、分类管理与AOP自动填充实战今天完成了苍穹外卖项目的员工管理模块、分类管理模块,并通过自定义注解AOP的方式实现了公共字段的自动填充,让我们来回顾一下这些核心功能的实现。一、今日工作概览时间完成内容14:44新…...