一款采用1MHz电流模式脉宽调制(P MAX1582能够以恒定电流驱动多达6个串联的白色LED,为蜂窝电话和其他手持设备提供双显示屏(主和次)的背光驱动。这个配置无需镇流电阻和昂贵的工厂校准过程。专
摘 要: 提出了一种嵌入式Linux系统多重备份与恢复机制。采用在一片NAND Flash上划分多个系统镜像区(包括内核和文件系统),在U-Boot和系统镜像中添加多重备份与恢复机制。当运行中的镜像区域出现故障,触发watchdog机制重启,激活自动备份与恢复机制,保证系统任何时候都有一个可用的系统运行。该方法在S5PV210处理器和Linux平台下进行模拟实验,得到很好的验证。当故障出现时,均能保证系统的正常启动,并且将出现故障的系统镜像自动恢复,测试结果证明了该方法的可行性。
关键词: 嵌入式;U-Boot;Linux;UBIFS;备份;恢复
0 引言
尽管Linux作为嵌入式操作系统有着诸多的优势,但是由于嵌入式操作系统自身的特点,如嵌入式应用范围的多样性和复杂性,导致嵌入式产品维护难度大的问题更加突出。嵌入式系统在实际环境中投入运行后,掉电等意外的灾难、用户错误或恶意地对数据进行修改和删除、一部分无法在开发中充分测试的错误等都会导致功能失效,严重的可能导致系统瘫痪。如果采用人工更新方式,由于安装位置等因素有时会不方便。因此,嵌入式系统的自动备份与恢复机制是恢复数据最容易和最有效的保证方法[1],并逐渐成为嵌入式系统实际应用中的一个重要问题。
目前,普遍使用双机热备份[2]、容灾备份[3]等技术做为实现嵌入式系统高可靠性的设计方案,由于采用独立的两套系统,因此增加了一定的设计难度和成本[4]。本文针对当前嵌入式系统备份技术存在的一些问题,通过分析嵌入式U-Boot及Linux内核,将嵌入式系统镜像在一套设备上备份为多份,每次仅有一个系统运行。当运行的操作系统出现故障时,就会触发系统备份恢复机制,使用下一个可用的备份分区覆盖掉出现故障的系统分区,然后启动下一个可用的系统。整个系统不需要备用设备,大大地节约了成本和功耗,提高了系统的稳定性和可靠性。
1 系统总体方案设计
1.1 系统总体设计
嵌入式Linux系统中的备份与恢复总体实现方案如图1所示。
该系统由x-loader(SPL)、U-Boot、U-Boot Env、Judge-
Area、Kernel(uImage)和Rootfs(ubi.img)六部分组成。mtd是同一NAND Flash上划分出的不同分区,并且uImage和ubi.img在设备上备份了多份,系统各组成部分特性及作用介绍如下:
(1)x-loader是一级引导程序[5],U-Boot是二级引导程序[6],U-Boot Env存储内核启动参数。
(2)Judge-Area存储系统备份及恢复参数。在U-Boot和Linux下可以共享访问。
(3)Kernel是Linux内核[7],Rootfs采用开源的无排序区块图像文件系统UBIFS(Unsorted Block Image File System),特别适用于嵌入式系统[8]。
A、B、C均为系统镜像区,存放内核和文件系统。U-Boot通过判断Judge-Area中的参数,启动其中一个系统镜像区,并将启动过程中的故障情况反馈给Judge-Area。当系统运行出现故障或者崩溃时,使用watchdog机制来使其硬件复位,通过U-Boot下的自动备份恢复机制,用其他可运行的备份来覆盖出现故障的系统镜像区,确保能启动一个可用系统。
目前运行Linux系统的NAND Flash配置都比较大,而裁剪后的内核和精简的UBI文件系统实际占用不到20 MB容量,或者更少[9]。因此,这为实现Linux系统的多重备份提供了可能。
1.2 备份及恢复机制
下面以三重备份与恢复为例来说明系统的备份及恢复流程,整个系统镜像分3个地方保存在NAND Flash,具体的过程如下:
(1)系统上电或复位U-Boot启动运行,假设A区相关的r_active_1(引导标志)和b_success_1(内核启动成功标志)为“yes”,BC区域均为“no”。在系统镜像未成功启动以前的过程可以认为是启动失败的,所以先设置A区r_active_1、b_success_1为“no”,rec_kernel_1(内核恢复标志)、rec_fs_1(文件系统恢复标志)为“yes”。还要设置B区r_active_2、b_success_2为“yes”。
(2)然后U-Boot加载A区域的系统,若Linux系统运行正常,则在Linux下还原所有标志值为初始值。若引导失败,则若干时间后触发watchdog复位系统,此时U-Boot再次运行,判断b_success_1为“no”,表示上次引导失败,并且rec_kernel_1、rec_fs_1为“yes”,表示需要将B区的内核及文件系统覆盖到A区,覆盖成功后清除恢复标志和重置b_success_1,再通过watchdog复位系统。