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中的 ...
随机推荐
- ubuntu16.04 服务器允许远程连接
ubuntu默认安装了openssh-client,openssh-server需要手动安装. 查看是否安装了ssh服务 apt-cache policy openssh-client openssh ...
- 导入项目报错【Minimum supported Gradle version is 3.3. Current version is 2.14.1】
问题描述 导入项目的时候,因为同事的开发环境是Android Studio 2.3.2 Gradle3.3.而我的开发环境是Android Studio 2.2.2 Gradle2.14.1. 所以 ...
- 最好用的编辑器之一:Vim-Go环境搭建
本文由Librant发表 如果说在Linux环境下,什么编辑器最好用,如果我说是VIM,估计会有一大部分人嗤之以鼻,怎么可能.VIM可能是他用过众多编辑器最难用的一个.在我司用的是云虚拟机,说实话吧, ...
- 解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2
前言 控制流是语言中最基础的部分,我们不谈具体的细节,只讲讲一些关键和有趣的点. 01 流控制 条件语句:if, else if, else if语句的使用非常值得细讲,如何是好的使用习惯.有一点非常 ...
- [转]win10中安装JDK8以及环境配置
本文转自:https://blog.csdn.net/yangsummer2426/article/details/80499775 1. 首先下载jdk,网址如下: http://www. ...
- OKR20180607
OKR---目标与关键成果法 一套明确和跟踪目标及其完成情况的管理工具和方法 OKR的主要目标是明确公司和团队的“目标”以及每个目标达成的可衡量的“关键结果”. “目标”是设定一个定性的时间目标.“关 ...
- async,await,Task 的一些用法
async,await,Task 的一些用法 private void Form1_Load(object sender, EventArgs e) { Display(); } public asy ...
- Centos6.5安装Redis3.0备忘记录
Centos6.5安装Redis3.0 1. 安装C编译环境 首先需要安装编译Redis的C环境,在命令行执行以下命令: [root@itzhouq32 tools] yum install gcc- ...
- Partition(hdu4651)2013 Multi-University Training Contest 5
Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Mybatis入门实例
MyBatis 简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...