先说说对升级的理解吧。系统升级是软件更新及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系统升级数据更新分析总结的更多相关文章

  1. 《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖

    <Unix/Linux网络日志分析与流量监控>获2015年度最受读者喜爱的IT图书奖.刊登在<中华读书报>( 2015年01月28日 19 版) 我的2015年新作刊登在< ...

  2. Linux Bluetooth内核分析

    目录 1. 初始化 2. hci部分 Linux提供了对Bluetooth的支持,核心代码位于net/bluetooth 1. 初始化 主要由subsys_initcall调用函数bt_init()来 ...

  3. Linux之kernal分析与启动20160610

    说一下LINUX内核的分析与启动: 一. 内核启动流程,据此配置内核(机器ID) 1.1 修改Makefile 1.2 选择默认配置 : make s3c2410_defconfig 1.3 make ...

  4. linux源码分析2

    linux源码分析 这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html  ...

  5. Linux网络地址转换分析

    Linux网络地址转换分析 地址转换用来改变源/目的端口,是netfilter的一部分,也是通过hook点上注册相应的结构来工作. Nat注册的hook点和conntrack相同,只是优先级不同,数据 ...

  6. linux串口驱动分析

    linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作 ...

  7. Linux input子系统分析

    输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...

  8. Linux系统IO分析工具之iotstat常用参数介绍

    Linux系统IO分析工具之iotstat常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.安装iostat [root@flume115 ~]# yum - ...

  9. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

随机推荐

  1. 【ABP框架系列学习】启动配置(5)

    ABP提供了在启动时配置模块的基础设施和模型. 1.配置ABP 配置ABP是在模块的PreInitialize方法中完成的,例如: public class SimpleTaskSystemModul ...

  2. C++常见笔试题

    1.实现字符串转整数的函数:int atoi(const char *nptr) 2.实现数组折半查找:int BinarySearch(int a[],int len, int key) 3.实现字 ...

  3. iOS逆向开发(4):注入目标函数 | fishhook | MobileSubstrate | MSHookFunction | iOSOpenDev

    从获得APP的所有类声明,到锁定目标类与函数,现在是时候注入函数了. 所谓"注入函数",小程的意思是让APP执行到小程写的代码中,跟"钩子"的概念一致.小程把个 ...

  4. JavaScript和Ajax部分(1)

    1. JavaScript变量有哪些数据类型? JavaScript是一种弱类型语言,在声明变量时不需要指变量的类型,变量的类型由赋给变量的值来决定. 常用的基本数据类型: 1 undefined(未 ...

  5. Win32知识之窗口绘制.窗口第一讲

    Win32知识之窗口本质 一丶摘要 在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么. 窗口的本质是不断绘制.是windows通过消息机制进行绘制的. 我们知道. ...

  6. vue中使用refs定位dom出现undefined?

    之前在公司做项目,一直感觉用ref来定位dom节点挺方便的.但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined? 于是我就对 ...

  7. Jenkins结合.net平台工具之Opencover

    首先先介绍一下Opencover是什么,Opencover是.net平台下用于生成单元测试覆盖率报告的一款软件,是.net平台下为数不多的一款免费覆盖率报告工具,类似的工具还有Jetbrains的do ...

  8. Redis实现世界杯排行榜功能(实战)

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9754346.html 需求 前段时间,做了一个世界杯竞猜积分排行榜.对世界杯64场球赛胜负平进行猜测,猜对+ ...

  9. 区块链--Ubuntu上搭建以太坊私有链

    1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...

  10. Gitlab仓库搭建及在linux/windows中免密使用gitlab(二)--技术流ken

    Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的 ...