Android 7.0 OTA升级(高通)
文章目录
- 1. Full OTA 方式升级介绍
- 1.1 Full OTA 制作第一步:生成 msm89xx-target_files-eng.XXX.zip
- 1.2 Full OTA 制作第二步:Modem 等非 HLOS 加入升级包的方法
- 1.3 Full OTA 制作第三步:生成 update.zip 升级包
- 2. Incremental OTA 方式升级介绍
- 2.1 Incremental OTA 制作第一步:生成各个版本的 msm89xx-target_files-eng. xxx.zip
- 2.2 Incremental OTA 制作第三步:生成 update.zip 升级包
- 3. OTA 升级操作步骤和方法
- 3.1 通过 Recovery 模式手动升级系统
- 3.2 通过 Android 接口 adb 命令方式升级
- 3.3 通过 Andorid 接口 apk 的方式升级系统
- 4. 对 img 文件进行升级
文档中主要描述 Full OTA 升级和 Incremental OTA 两种升级方式
1. Full OTA 方式升级介绍
Full OTA 升级就是对整个下载包做打包,然后将完整的升级包通过 recovery 系统升级。操作步骤如下 说明。
升级对象:boot.img,cache.img, system.img, emmc_appsboot.mbn, persist.img, non-hlos.bin, sbl1.mbn, tz.mbn, rpm.mbn,整体来说,可以通过 ota 升级除 userdata 分区之外的分区。
1.1 Full OTA 制作第一步:生成 msm89xx-target_files-eng.XXX.zip
关于制作 OTA升级所用资源包,使用命令 make dist 命令打包 img 和 OTA资源包,手动执行命令
source build/envsetup.sh
lunch
make –j8 dist
在\out\dist\目录下会有手动制作OTA包所需的msmXXXX-target_files-eng.quectel.zip和已经做好的完整 包 msmXXXX-ota-eng.quectel.zip;
P.s 目前 make dist 命令 不支持 Android5 和 Android6 的平台,Android7 以下平台,请使用如下编译 命令:
make –j8 otapackage
1.2 Full OTA 制作第二步:Modem 等非 HLOS 加入升级包的方法
关于添加 modem 等非 ap 分区,有两种方法:
方法 1.官方,也就是高通给出的方案是这样的:
Create a folder named RADIO in the path /device/qcom// and add the non-HLOS files (non-hlos.mbn, tz.mbn, rpm.mbn, etc.) that must be upgraded into this folder. 则首先需要查看 device/qcom/msm89XX 目录下是否已存在 radio 这个文件夹,若没有则创建一个:

通常这个文件默认已经存在,所以我们在编译版本时只要将非 AP 部分加入到这个文件夹中就可以了。 比如我们可以先将 modem 部分加入到这里:
cp (modem 所在路径) ./device/qcom/msmXXXX/radio 的
该文件夹中默认包含 filesmap 文件 如下:

这个名为 filesmap 的文件内容是这样的:

这个文件主要定义了对应放入的文件名称和其相应的分区。
添加完后编译生成整包(请参考 2.1):
out/target/product/msmXXXX/obj/PACKAGING/target_files_intermediates 目录下的整包原始文件中:
方法 2:当我们编译了版本,生成了:
out/target/product/msmXXXX/obj/PACKAGING/target_files_intermediates/XXX.zip 这几个文件后
我们可以通过手动将modem 等非 AP 部分文件放入 msmXXXX-target_files-eng.xxxx.zip 压缩包中的 RADIO 文件中
1.3 Full OTA 制作第三步:生成 update.zip 升级包
./build/tools/releasetools/ota_from_target_files --block -p out/host/linux-x86/ -k build/target/product/secur ity/testkey -v out/target/product/msm8909/obj/PACKAGING/target_files_intermediates/msm8909-target_files-en g.smart-jenkins.zip update.zip

2. Incremental OTA 方式升级介绍
Incremental OTA 升级就是针对两个版本,通过工具生成 Incremental 包,做 Incremental 升级的方案。 所以注意要有版本升级对应关系。
升级对象:boot.img, emmc_appsboot.mbn, non-hlos.bin, sbl1.mbn, rz.mbn, rpm.mbn ….
2.1 Incremental OTA 制作第一步:生成各个版本的 msm89xx-target_files-eng. xxx.zip
假设我们编译了版本 V1.
在编译完成后的 out/target/product/msm89xx/obj/PACKAGING/target_files_intermediates 目录下,会自动 生成这个版本的整包压缩文件:msm89xx-target_files-eng.XXX.zip(可能名字会有所区别)

然后我们修改编译 V2 版本,这个版本相对 V1 版本做了一些修改
source build/envsetup.sh
lunch msm8909-userdebug
make dist -j8

2.2 Incremental OTA 制作第三步:生成 update.zip 升级包
烧写第一版本的系统包(system.img)必须要从 out/dist 目录下的 msm8909-img-eng.zyz.zip 解压出来, 替换 out/target/product/msm8909/system.img
进入工程目录中,执行:
./build/tools/releasetools/ota_from_target_files -v --block -p out/host/linux-x86/ -k build/target/product/sec urity/testkey -i out/target/product/msm8909/obj/PACKAGING/target_files_intermediates/msm8909-target_files-e ng.smart-jenkins.zip out_1/target/product/msm8909/obj/PACKAGING/target_files_intermediates/msm8909-target_files-eng.smart-jenkins.zip update_c.zip

-i 为产生增量包;
P.s 其余选项 FULLOTA 中已介绍。

生成差分包的包字可以任意为什么名字,和之前的整包做一个区分
3. OTA 升级操作步骤和方法
3.1 通过 Recovery 模式手动升级系统
这个刷机包拷贝到 sd 卡中。通过 adb reboot recovery 方式重启进入 recovery 模式进行升级; SC20/SC60 默认情况通过 PWRKEY 开机+ 同时 VOL_UP 拉低 进入 Recovery 界面。

3.2 通过 Android 接口 adb 命令方式升级
安卓提供了接口给我们来进行升级。
首先通过
adb root
adb push update.zip /data/update.zip
将升级包导入手机,这个步骤,到时候我们就可以直接通过 apk 下载升级包到/data/ 目录或 /cache 目 录或 SD 下。
接下来我们在 cache 目录下创建 recovery 文件夹:
adb shell “mkdir /cache/recovery”
然后在 recovery 目录下创建文件 command
adb shell “touch /cache/recovery/command”
下一步就是往 command 这个文件中写入:
adb shell
echo “–update_package=/data/update.zip” > /cache/recovery/command
sync
最后我们重启到 recovery,系统就会自动进行更新了:
adb reboot recovery
PS: 安卓 8 之后的版本不支持 adb 命令升级,因为 data 分区加密
adb root
adb push- p update.zip /data/ota_package/update.zip
adb shell uncrypt /data/ota_package/update.zip /cache/recovery/block.map
adb shell “echo”–update_package=@/cache/recovery/block.map" > /cache/recovery/command"
adb reboot recovery

3.3 通过 Andorid 接口 apk 的方式升级系统
通过上层 java 接口升级,主要使用如下两个 andorid 的标准接口:

4. 对 img 文件进行升级
例:对 splash.img 文件进行升级
splash.img 这里面存放的是开机动画,默认使用的都是我司的开机动画
修改点:

相关文章:
Android 7.0 OTA升级(高通)
文章目录1. Full OTA 方式升级介绍1.1 Full OTA 制作第一步:生成 msm89xx-target_files-eng.XXX.zip1.2 Full OTA 制作第二步:Modem 等非 HLOS 加入升级包的方法1.3 Full OTA 制作第三步:生成 update.zip 升级包2. Incremental OTA 方式升级介…...
工作负载之DeployMent
DeployMent 无状态工作负载(Deployment):即kubernetes中的“Deployment”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress等。 也是公司中应…...
淘宝tmall页面数据获取,API接口对接程序
item_get-获得淘宝商品详情请求参数请求参数:num_iid652874751412&is_promotion1参数说明:num_iid:淘宝商品IDis_promotion:是否获取取促销价响应参数Version: Date:2022-04-04名称类型必须示例值描述itemitem[]1宝贝详情数据num_iidBigint152081325…...
基于粒子群优化算法的电动汽车充放电V2G研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
java并发编程原理2 (AQS, ReentrantLock,线程池)
一、AQS: 1.1 AQS是什么? AQS就是一个抽象队列同步器,abstract queued sychronizer,本质就是一个抽象类。 AQS中有一个核心属性state,其次还有一个双向链表以及一个单项链表。 首先state是基于volatile修饰&#x…...
研报精选230219
目录 【行业230219山西证券】煤炭行业周报:复工改善,港口价格企稳反弹【行业230219中航证券】农林牧渔行业周观点:一号文件落地,生物育种超势不改【行业230219华西证券】汽车行业周报:新车密集上市 自主转型提速【个股…...
【PPPoE】PPPoE拨号流程
简介 PPPoE(Point-to-Point Protocol over Ethernet)是一种在以太网上封装PPP协议的方式,常用于在宽带接入中进行拨号。 PPPoE的拨号原理如下: 客户端发起PPPoE Active Discovery Initiation (PADI)报文,广播到网络…...
django项目实战(django+bootstrap实现增删改查)
目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1&…...
Lesson4---Python语言基础(2)
4.1 内置数据结构 4.1.1 序列数据结构(sequence) 成员是有序排列的每个元素的位置称为下标或索引通过索引访问序列中的成员Python中的序列数据类型有字符串、列表、元组 “abc” ≠ “bac” 4.1.1.1 创建列表和元组 Python中的列表和元组,…...
NCHW - NHWC - CHWN 排列
TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…...
2019蓝桥杯真题矩阵切割(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正…...
Java线程池的创建以及原理
一、为什么要使用线程池 在外面的日常开发中,也使用了不少池化技术,比如线程池、数据库连接池、HTTP连接池等等都是对这个思想的应用。 池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资…...
Java集合学习之Map
1.什么是Map Java里的Map接口是一个集合根接口,表示一个 键值对(Key-Value) 的映射。 简单来说就是键和值是一对的,每一个 Key都有唯一确定的 Value对应。 其中要求 键(Key) 唯一,因为是按照…...
java 基于maven多模块合并打包部署
项目环境 jdk 1.8spring 2.7.xmaven 3.6 项目结构 模块功能 client – 对外service common – 共用工具切面等 main – 启动类 goods – 子模块具体实现 模块间依赖关系 client – 无依赖 common – 无依赖 main – client、common、goods goods – client、common 具体P…...
Kubernetes是个什么东东?
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语,意…...
【go语言grpc之client端源码分析三】
go语言grpc之server端源码分析三newClientStreamnewAttemptLocked上一篇在介绍了grpc.Dial之后,然后再介绍一下后面的 //创建RPC客户端client : pb.NewGreetsClient(conn)//设置超时时间_, cancel : context.WithTimeout(context.Background(), time.Second)defer c…...
Android 基础知识4-2.6LinearLayout(线性布局)
一、LinearLayout的概述 线性布局(LinearLayout)主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能…...
补充前端面试题(三)
图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…...
.net开发安卓入门-自动升级(配合.net6 webapi 作为服务端)
文章目录思路客户端权限清单(AndroidManifest.xml)权限列表(完整内容看 权限清单(AndroidManifest.xml))打开外部应用的权限(完整内容看 权限清单(AndroidManifest.xml))添加文件如下…...
分享111个HTML艺术时尚模板,总有一款适合您
分享111个HTML艺术时尚模板,总有一款适合您 111个HTML艺术时尚模板下载链接:https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码:k8dx Python采集代码下载链接:采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
