recovery&linux系统升级数据更新分析总结
先说说对升级的理解吧。系统升级是软件更新及BUG修复的主要方式,升级的主要原理就是数据搬移的过程,把我们需要的数据,从某个地方,更新到另外的一个地方。这个过程就叫做升级。一般是当我们系统有了新的功能增加,或者是现有的功能出现缺陷或者漏洞无法正常运行时,我们需要进行系统升级。最终达到修复系统缺陷漏洞,增加新功能的目的。
从升级的方式来看,升级主要分为两大类,本地升级及远程升级,我们常说的OTA(over the air)也就是远程升级。显而易见,我们通过名字也就能明白,本地升级就是从本地获取升级数据,从而进行系统升级,本地升级常见的包括USB升级,SD卡升级,UART串口升级等,远程升级常见的有WEB升级,HTTP升级,TS流升级等。
上面所描述的升级方式,基本上都是根据升级数据获取的途径来定义的。获取到数据之后,我们要把数据写入到哪里呢,那么这里就涉及到了存储设备,我们常用的flash存储包括NOR, NAND, EMMC等,在项目立项的时候,都会选择一个或者多种组合形式的flash存储设备。这几种flash都有各自的特色,NOR相对容量较小,读取速度快,启动速度快,在现在大容量盛行时代,使用的场景较少,NAND flash相对NOR flash,容量方面就大了很多,适合存储较多的数据,NAND写入之前必须执行擦除动作,才能写入,这是跟NAND只能把1写0决定的。并且NAND flash是有坏块的,那么读写的时候,要跳过坏块部分。EMMC其实也是NAND的一种,通常也称作INAND,EMMC对NAND来说,不用擦除再写,不用考虑坏块,能够自己管理坏块,比NAND使用起来更方便。上面只是大致简单的介绍下这几种flash存储设备,想了解更多的可以自行深入的学习了解。
说完升级数据来源及flash存储设备,我们再来看看数据格式,升级的时候,并非只是单纯的数据搬移,针对不同类型的数据有不同的处理方式,常见的有RAW,UBI,EXT4等,一般普通镜像都是raw格式,NAND上面使用的ubi fs, EMMC上面使用的ext4 fs。raw原意是未被处理的数据,针对raw数据,我们直接数据搬移即可,针对ubi及ext4格式,我们需要特殊处理。同样是raw镜像,我们在nand与emmc上面的处理方式也不同,写nand的时候,我们需要按照block size的最小单位大小,先擦擦,再按照page size最小单位写入。而emmc则不需要这么麻烦。及时是相同的存储设备,我们对char device(字符设备)与block device(块设备)的处理方式也不相同。
也就是说,我们对某个分区镜像更新时,需要根据数据类型(raw/ubi/ext4等)存储设备类型(nand/emmc等)字符设备类型(char/block等)综合考虑,采用对应的方式,更新数据。后面将对,每种不同的场合分析,如何更新。有兴趣的也可以自己研究,本文只是做大致的分析。
分析完升级方式,flash存储,及数据格式后,我们列几点升级的设计注意点:
(1)对升级的源数据,采用只读的方式获取。
(2)对重要的分区,可以采用分区备份的机制保护。
(3)升级过程禁止所有的输入中断,包括串口,按键,IR等。
(4)升级前数据完整性校验及安全性校验。
(5)对存在镜像加密的时候,在升级前对加密镜像合法性校验。
(6)设计异常掉电保护机制,防止升级过程掉电。
(7)升级过程任意掉电,重新上电都能够继续升级或者恢复原系统。
(8)升级流程可配置化,能够修改升级包改变升级流程。
(9)升级过程自动化,尽可能少的人为操作。
(10)升级出错立马退出并提示出错信息。
(11)升级日志尽可能完整的记录升级的每个过程及关键点信息。
(12)记录最近5次的升级日志,方便升级跟踪。
recovery&linux系统升级数据更新分析总结的更多相关文章
- 《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖
<Unix/Linux网络日志分析与流量监控>获2015年度最受读者喜爱的IT图书奖.刊登在<中华读书报>( 2015年01月28日 19 版) 我的2015年新作刊登在< ...
- Linux Bluetooth内核分析
目录 1. 初始化 2. hci部分 Linux提供了对Bluetooth的支持,核心代码位于net/bluetooth 1. 初始化 主要由subsys_initcall调用函数bt_init()来 ...
- Linux之kernal分析与启动20160610
说一下LINUX内核的分析与启动: 一. 内核启动流程,据此配置内核(机器ID) 1.1 修改Makefile 1.2 选择默认配置 : make s3c2410_defconfig 1.3 make ...
- linux源码分析2
linux源码分析 这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html ...
- Linux网络地址转换分析
Linux网络地址转换分析 地址转换用来改变源/目的端口,是netfilter的一部分,也是通过hook点上注册相应的结构来工作. Nat注册的hook点和conntrack相同,只是优先级不同,数据 ...
- linux串口驱动分析
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...
- Linux input子系统分析
输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...
- Linux系统IO分析工具之iotstat常用参数介绍
Linux系统IO分析工具之iotstat常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.安装iostat [root@flume115 ~]# yum - ...
- Linux系统IO分析工具之iotop常用参数介绍
Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...
随机推荐
- C# 结合 using 语句块的三种实用方法
一.简介 阅读 Abp 源码的过程中,自己也学习到了一些之前没有接触过的知识.在这里,我在这儿针对研究学习 Abp 框架中,遇到的一些值得分享的知识写几篇文章.如果有什么疑问或者问题,欢迎大家评论指正 ...
- (转)pycharm快捷键、常用设置、配置管理
原文: http://blog.csdn.net/pipisorry/article/details/39909057 本博客一直在同步更新中! 内容包含:pycharm学习技巧 Learning t ...
- LearnOpenGL学习笔记(五)——纹理
在设计物体表面时,很多时候我们不满足于一种颜色或者几种简单颜色,我们希望是丰富多彩的图案,或者说我们提供给它的图片.这样一个顶点一个顶点的去指定那是行不通了,我们不可能把所有顶点用数字去表达出来,必须 ...
- 如何在优雅地Spring 中实现消息的发送和消费
本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...
- mysql开启general_log查看执行sql
1.查看是否打开 SHOW variables like "%general_log%"; 2.打开 set global general_log=On 3.查看sql执行 tai ...
- shell脚本--cut命令
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 选项说明 cut命令将行按指定的分隔符分割成多列,它的 ...
- Perl数据序列化和持久化(入门):Storable模块
Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据. 序列化后的数据可以写入文件实现持久化,可以将持久 ...
- SPI 方式初始化 SD 卡总流程图(V2.0)
- 20.Module 的语法
Module 的语法 Module 的语法 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能, ...
- c#使用js上传图片
前几天朋友说用js上传图片过去遇到点问题,于是自己也想写一个demo这里就把自己挖的坑填了. 话不多说上代码 前台就一个file控件加按钮 <!DOCTYPE html> <html ...