OTA之流式更新及shell实现
在OTA升级时,需要从网络下载OTA包,并写到flash上的对应分区中。
最简单的方式是将下载与更新分离,先将完整的数据包下载到本地,再将本地的OTA包更新到flash上。方便可靠。
但这种方式的问题是,本地需要有足够的空间存放OTA包,这对一些flash较小的产品来说,会起到很大的限制作用,需要在flash上留出一个不小于系统占用大小的空间,用于存放OTA包。
但空间确实不够啊,怎么办呢?这个时候就需要能支持流式更新了,让从网络下载的数据,直接写到flash中。
安卓在AB升级方案中,就支持了这种流式更新(streaming updates)的方式,无需临时空间存放OTA包。
那么具体怎么实现了,其实流式更新最简单的实现,只需几行shell脚本,调用外部现成的工具,通过管道的形式配合即可实现。
例如使用wget下载ota包的话,则可以使用 wget 的 -S 参数,滤出OTA包的长度
file_length=$(wget -S "$file_download" 2>&1 | grep "Content-Length" | awk '{print $2}')
再通过wget与dd相配合,将数据直接写入对应分区。
wget "$file_download" -q -O - | dd of="$partition"
最后再下载md5校验值,并将写入的数据流式读出,同样通过管道传给md5sum,算出校验值进行校验。
md51=$(wget "$file_download.md5" -q -O -)
md52=$(dd if="$partition" bs=512 count="$file_sectors" | md5sum | cut -d ' ' -f 1)
以上就是使用shell脚本,调用wget,dd,md5sum ,使用管道进行配合,完成的流式更新的核心部分了。
OTA之流式更新及shell实现的更多相关文章
- Spark Streaming流式处理
Spark Streaming介绍 Spark Streaming概述 Spark Streaming makes it easy to build scalable fault-tolerant s ...
- FunDA(2)- Streaming Data Operation:流式数据操作
在上一集的讨论里我们介绍并实现了强类型返回结果行.使用强类型主要的目的是当我们把后端数据库SQL批次操作搬到内存里转变成数据流式按行操作时能更方便.准确.高效地选定数据字段.在上集讨论示范里我们用集合 ...
- Storm:最火的流式处理框架
伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这 ...
- 翻译-In-Stream Big Data Processing 流式大数据处理
相当长一段时间以来,大数据社区已经普遍认识到了批量数据处理的不足.很多应用都对实时查询和流式处理产生了迫切需求.最近几年,在这个理念的推动下,催生出了一系列解决方案,Twitter Storm,Yah ...
- JavaScript AJAX stream 流式显示
当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传 ...
- Citrix服务器虚拟化之三十 XenApp 6.5发布流式应用程序
Citrix服务器虚拟化之三十 XenApp 6.5发布流式应用程序 XenApp可发布以下类型的资源向用户提供信息访问,这 ...
- 浅谈Storm流式处理框架(转)
Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据.但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂. 有需求也就有创造,在Hadoop基本奠定了大数据霸 ...
- JDFS:一款分布式文件管理系统,第三篇(流式云存储)
一 前言 看了一下,距离上一篇博客的发表已经过去了4个月,时间过得好快啊.本篇博客是JDFS系列的第三篇博客,JDFS的目的是为了实现一个分布式的文件管理系统,前两篇实现了基本的上传.下载功能,但是那 ...
- JDFS:一款分布式文件管理系统,第四篇(流式云存储续篇)
一 前言 本篇博客是JDFS系列博客的第四篇,从最初简单的上传.下载,到后来加入分布式功能,背后经历了大量的调试,尤其当实验的虚拟计算结点数目增加后,一些潜在的隐藏很深的bug就陆续爆发.在此之前笔者 ...
随机推荐
- Vue 自定义指令练习
Vue.directive(id,definition)注册一个全局自定义指令,接收两个参数,指令ID以及定义对象 取值: <div v-demo="{ color: 'white', ...
- bootstrap 中的静态模式的控制按钮上的一个坑
在使用modal时发现,代码:<button class="btn btn-danger" data-toggle="modal" data-target ...
- 【.Net】win10 uwp unix timestamp 时间戳 转 DateTime
有时候需要把网络的 unix timestamp 转为 C# 的 DateTime ,在 UWP 可以如何转换? 转换函数可以使用下面的代码 private static DateTime UnixT ...
- idea Class<>表示的含义
- [codeforces696B]Puzzles
B. Puzzles time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- 【刷题】洛谷 P4142 洞穴遇险
题目背景 ZRQ在洞穴中准备采集矿物的时候遇险了!洞穴要塌了! 题目来源:zhoutb2333 题目描述 整个洞穴是一个 \(N*N\) 的方格图,每个格子形如 \((X,Y),1 \le X,Y \ ...
- 把lighttpd配置为系统服务
每次启动切换到 /usr/local/lighttpd/sbin 执行 ./lighttpd -f /usr/local/lighttpd/lighttpd.conf 比较麻烦, 而且不方便重新启动! ...
- 解题:ZJOI 2006 游戏排名系统
题面 跟i207M学了学重载运算符后找前驱后继,然后就是练练无旋树堆 #include<map> #include<cstdio> #include<string> ...
- 【bzoj3796】Mushroom追妹纸
Portal -->bzoj3796 Description 给出字符串s1.s2.s3,找出一个字符串w,满足: 1.w是s1的子串: 2.w是s2的子串: 3.s3不是w的子串. 求w的 ...
- 驱动之NandFlash的介绍与应用20170209
本文主要介绍的是NAND FLASH的介绍与应用,直接看个人笔记即可: