OTA之流式更新及shell实现
2024-10-20 06:44:03
在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 ,使用管道进行配合,完成的流式更新的核心部分了。
最新文章
- wifi破解实践截图
- window虚拟机安装Linux
- NSDate和NSString相互转换
- TextView 字数限制
- HttpClient模拟http请求
- WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
- NeHe OpenGL教程 第四十二课:多重视口
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
- videojs 动态加载视频
- IOS Xmpp的Iq发送和解析之请求讨论组成员
- Hadoop实战实例
- ice grid 完整部署过程
- php解决表单重复提交
- 拓扑排序的 +Leapms 线性规划模型
- 读 Spring实战 遇到的问题记录(一)
- 【转】hibernate 延迟加载
- 初次启动hive,解决 ls: cannot access /home/hadoop/spark-2.2.0-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory问题
- 判断以及防止SQL注入
- Oozie如何和安装部署
- leetcode1013
热门文章
- BZOJ 2462 矩阵模板(二维hash)
- Debug快捷键
- 【CodeChef PREFIXOR】Prefix XOR
- C++11Mutex(互斥锁)详解
- Kinect实现简单的三维重建
- bzoj3709: [PA2014]Bohater(贪心)
- 2018-2019 ACM-ICPC 沈阳赛区 K. Let the Flames Begin
- 简单的并发服务器(多个线程各自accept)
- css中px em rem vw vh vmax vmin等单位的区别--转载
- Vue.js随笔三(npm init webpack my-project指令安装失败解决方案)