linux差分包升级流程,OTA 差分升级包的制作

OTA 升级是 Android 系统提供的标准软件升级方式。 它功能强大,提供了完全升级、增量升级模式,可以通过 SD卡升级,也可以通过网络升级。

那如何生成差分升级包呢?

Android源码的根目录下有以下两个命令:

1、make ——会生成系统的img文件,system.img,boot.img,userdata.img,recovery.img

2、make otapackage——会生成sd卡用的全部系统升级包,如msm8974-target_files-eng.xxxx.zip

要生成差分升级包,需要先制作出两个全升级包,然后根据这两个升级包做出差分升级包,这里以高通的msm8974为例,讲诉Android差分包的制作过程。

1、制作全系统升级包

1.1 使能编译脚本  在Android源码目录下运行source build/envsetup.sh

1.2 选择具体机型  在终端运行lunch,随后会打印机型列表,通过输入数字选择具体的机型

1.3 编译 在终端运行make,如果之前没有编译过Android源码,该过程相当久。

1.4  make otapackage

注(1.1-1.3也是Android源码官方的标准编译方式,其实也是输出一些临时变量,供编译时使用,可通过    printenv查看具体的配置信息,很简单对不对)

2、建立一个目录

这个随意,在哪里建都行, 主要要于保存升级文件如

mkdir ~/OTA

注(~代表为用户目录,一般为/home/用户名,可通过cd ~,然后通过pwd查看路径)

3、将编译生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip 拷贝并且更名放到目录~/OTA/A.zip

4、在代码中做一些修改,产生一些差异

5、第二次make;make otapackage(修改于Android源码后out/target/product/msm8974/文件在重新编译后,某个文件(如apk)虽已不再生成,但该文件不会自动删除(上一次的生成文件残留),个人感觉这个有BUG,希望谷歌方面改进一下,这样我们在make之前,最好手动删除一下out/target/product/msm8974/system这个目录)

6、将第二次编译生成的out/target/product/msm8974/obj/PACKAGING/target_files_intermediates/msm8974-target_files-eng.xxxx.zip 拷贝并且更名放到目录~/OTA/B.zip

7、在src根目录下执行制作差分包的命令,必须在src根目录下执行,因为ota_from_target_files.py这个脚本里面写定了相对路径的引用文件。

./build/tools/releasetools/ota_from_target_files  -i     。

如: ./build/tools/releasetools/ota_from_target_files -i ~/OTA/A.zip ~/OTA/B.zip ~/OTA/update.zip

注:-i指定制作差分包,~/OTA/update.zip  就是升级用的差分包,这个脚本要在Android源码的根目录下执行。

8、升级原理

打开update.zip,有一个升级脚本META-INF/com/google/android/updater-script。Android就是根据这个脚本进行升级的,有兴趣的可以研究一下。当然升级失败了,最好从这个脚本中找原因了,因为这个文件会打印升级过程中的信息。通过adb shell,进入/tmp目录,有个文件记录了升级过程的信息,可通过这个文件查看升级失败的原因。

9、应用升级包

差分包制作好后,可以用Android的recovery应用该升级包。应用该升级包的时候,遇到了两个问题,这里给大家分享一下。

9.1时间戳失败

时间戳失败即OTA包必须比recovery的编译时间要早,这个在编译的时候控制一下即可。当然,你也可屏蔽OTA包的时间戳检测,见http://blog.csdn.net/mike8825/article/details/49332249

9.2指纹校验失败。差分升级包就是比较现存基础包与原来的基础包的差异而生成的,即该OTA包有特定的应用背景(用于两个差分包之间)。升级过程中,升级脚本(打开该升级包,如下图所示)会检测fingerprint,确保该升级包被正确应用。fingerprint这个属性存在于/build.prop,可通过adb shell进入根路径,通过cat build.prop查看这个属性(或getprop)。如果自己做版本控制的话,这个也可以屏蔽。关于指纹校验该篇博客有较详细的介绍http://blog.csdn.net/huangyabin001/article/details/44465145。

844a9db16d1ed64617958f2df679be30.png

9.3提示system分区不够大,升级失败。这里的system分区为500M,剩余200M。这里感觉挺奇怪的,200M的的空间还升级不了一个20多M的升级包。开始的时候认为是selinux引起的,因为串口会打印一下selinux的错误,尝试改正这些错误后,升级包并没有应用成功。这里,单纯一点,它提示system分区容量不够,那咱就给它大一点哦。尝试修改将system分区的容量改为1G后,成功升级。

关于OTA包的详解见

http://blog.csdn.net/thl789/article/details/8743743

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

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

相关文章

wps for linux alpha 15 语言包,WPS Office for Linux Alpah 7发布

WPS Office for Linux A7终于出来了,想当年做了一个ppt给老大发过去,后来发现没人能打开。。。先不看功能上的改进,光bug就修复了将近3千条,可见wps4linux团队的付出。版本摘要:增加et组建和主干同步至10月15日和v9分支…

50 个 Bootstrap 插件

Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。 本文向你推荐 50 个 Bootstrap 的插件…

python能和c语音交互吗_Python和C语言交互--ctypes,struct

python和c语言进行数据交互,涉及类型转换,字节对齐,字节序大小端转换等。相关模块ctypes,struct,memoryview。 一.ctypes:python和c语言使用结构体数据进行交互 场景:有一个C语言生成的动态链接库&#xff…

python3获取网页内容_python3获取一个网页特定内容

我们今天要爬取的网址为:https://www.zhiliti.com.cn/html/luoji/list7_1.html 一、目标:获取下图红色部分内容即获取所有的题目以及答案。 二、实现步骤。 分析: 1,首先查看该网站的结构。分析网页后可以得到: 我们需…

Linux64位steam,这下没得玩了! Steam无奈抛弃Linux用户

众所周知,Linux被公认为最安全的操作系统,近日,网络有消息传出Linux发行版Ubuntu确认将从今年下半年的19.10版本开始不再支持传统32位,而仅支持64位,而没有了32位系统的存在,许多游戏将不能支持。据了解&am…

远程主机http协议版本信息泄漏_Web基础之http协议

Http协议介绍HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议什么是超文本包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page…

c语言opengles程序,OpenGL ES _ 着色器_程序

演示图你不知道这个东西,请不要看了,请看我的其他文章先了解一下O!学习目标掌握着色器程序的执行过程简单的例子uniform float t; // 时间uniform mat4 gl_ModelViewMatrix; // 模型视图矩阵attribute vec4 vel;const vec4 g vec4(0.0,-9.8,0.0) // 重力加速度void…

spring IOC加载流程

看了网上、书上很多对于spring IOC容器加载过程的分析。大多都只是粗略的讲一下加载流程。其实这样也不错,简单粗暴。清晰记得之前和一个前辈交流时他说的一句话:什么设计模式、设计框架都是扯淡,能实现这个功能就是最好的。其实这样的说法是…

pytorch 模型可视化_【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力...

作者:Eugene Khvedchenya 编译:ronghuaiyang导读只报告模型的Top-1准确率往往是不够的。将train.py脚本转换为具有一些附加特性的强大pipeline每一个深度学习项目的最终目标都是为产品带来价值。当然,我们想要最好的模型。什么是“最好的”…

tstringlist怎么查看是否存在该数据_注意!研究生招生信息只公开1个月!应该怎么用?...

请注意!全国硕士研究生招生信息公开平台(以下简称“研招信息公开平台”)已于2019年7月1日开放-2019年7月30日结束。招生信息怎么看?老师在线教你看懂研究生招生信息!本篇目录:1.全国硕士研究生招生信息公开…

delphi读取xml中的内容property name传递参数_Python 进阶知识全篇-XML 解析

什么是 XML?XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 你可以通过本站学习 XML 教程XML 被设计用来传输和存储数据。XML 是一套定…

c语言编写网页图形界面代码,「分享」C语言如何编写图形界面

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大…

python 读取word_教你怎么使用 Python 对 word文档 进行操作

使用Python对word文档进行操作一、安装Python-docxPython-docx是专门针对于word文档的一个模块,只能读取docx 不能读取doc文件。说白了,python就相当于windows操作系统,QQ就是跑在windows操作系统上的软件,QQ最大的作用是可以去聊…

stm32cubemx adc_STM32CubeMX__Exp5_ADC1_2CH_DMA_TIM3_Trig__简明指导文件__jyb

用定时器TIM3触发DMA方式的双通道ADC定时采样:拷贝STM32CubeMX工程文件LED_Flash_PC12.ioc,修改为:Exp5_ADC1_2CH_DMA_TIM3_Trig.ioc(1)配置ADC1的通道和参数配置ADC通道参数(2)配置ADC1的DMA①通过点"Add"按钮,添加ADC…

JS 实现 jQuery的$(function(){});

1、浏览器渲染引擎的HTML解析流程 何谓“渲染”,其实就是浏览器把请求到的HTML内容显示出来的过程。渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程: 1,解析html以构…

html 分页_MySQL——优化嵌套查询和分页查询

Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注优化嵌套查询嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。嵌套查询写起来简单,也…

从原理上搞定编码-- Base64编码

开发者对Base64编码肯定很熟悉,是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了,如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容,花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编…

docker mysql总是退出_Docker提升测试效率之路

现如今,Docker已经成为了很多公司部署应用、服务的首选方案。依靠容器技术,我们能在不同的体系结构之上轻松部署几乎任何种类的应用。作为测试一方,我们应与时俱进,将Docker容器技术应用到测试工作中。为了让小伙伴们可以快速上手…

32位mysql安装包_软件测试基础——Linux系统搭建MySQL数据库

一、mysql下载1. 下载:官方网址:https://dev.mysql.com/downloads/mysql/2. 选择相应的版本,由于cenos是基于红帽的,所以Select Operating System选择Red Hat...。我所用的镜像为cenos7所以Red Hat....linux7,一定要选相应的版本&…

python gevent模块 下载_Python中的多任务,并行,并发,多线程,多进程,协程区别...

多任务CPU承担了所有的计算任务。一个CPU在一个时间切片里只能运行一个程序。当我们想同时运行多于一个程序的时候,就是多任务,例如同时运行微信,QQ,浏览器等等。多任务的目的是提升程序的执行效率,更充分利用CPU的资源…