在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 ,使用管道进行配合,完成的流式更新的核心部分了。

最新文章

  1. wifi破解实践截图
  2. window虚拟机安装Linux
  3. NSDate和NSString相互转换
  4. TextView 字数限制
  5. HttpClient模拟http请求
  6. WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
  7. NeHe OpenGL教程 第四十二课:多重视口
  8. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
  9. videojs 动态加载视频
  10. IOS Xmpp的Iq发送和解析之请求讨论组成员
  11. Hadoop实战实例
  12. ice grid 完整部署过程
  13. php解决表单重复提交
  14. 拓扑排序的 +Leapms 线性规划模型
  15. 读 Spring实战 遇到的问题记录(一)
  16. 【转】hibernate 延迟加载
  17. 初次启动hive,解决 ls: cannot access /home/hadoop/spark-2.2.0-bin-hadoop2.6/lib/spark-assembly-*.jar: No such file or directory问题
  18. 判断以及防止SQL注入
  19. Oozie如何和安装部署
  20. leetcode1013

热门文章

  1. BZOJ 2462 矩阵模板(二维hash)
  2. Debug快捷键
  3. 【CodeChef PREFIXOR】Prefix XOR
  4. C++11Mutex(互斥锁)详解
  5. Kinect实现简单的三维重建
  6. bzoj3709: [PA2014]Bohater(贪心)
  7. 2018-2019 ACM-ICPC 沈阳赛区 K. Let the Flames Begin
  8. 简单的并发服务器(多个线程各自accept)
  9. css中px em rem vw vh vmax vmin等单位的区别--转载
  10. Vue.js随笔三(npm init webpack my-project指令安装失败解决方案)