国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式Linux系統(tǒng)中的多重備份與恢復(fù)設(shè)計

2015-02-23 10:52丁元舟羅小巧葉連松
電子技術(shù)應(yīng)用 2015年3期
關(guān)鍵詞:內(nèi)核鏡像備份

丁元舟,羅小巧,葉連松,陳 宇

(華中師范大學 物理科學與技術(shù)學院,湖北 武漢430079)

嵌入式Linux系統(tǒng)中的多重備份與恢復(fù)設(shè)計

丁元舟,羅小巧,葉連松,陳 宇

(華中師范大學 物理科學與技術(shù)學院,湖北 武漢430079)

提出了一種嵌入式Linux系統(tǒng)多重備份與恢復(fù)機制。采用在一片NAND Flash上劃分多個系統(tǒng)鏡像區(qū)(包括內(nèi)核和文件系統(tǒng)),在U-Boot和系統(tǒng)鏡像中添加多重備份與恢復(fù)機制。當運行中的鏡像區(qū)域出現(xiàn)故障,觸發(fā)watchdog機制重啟,激活自動備份與恢復(fù)機制,保證系統(tǒng)任何時候都有一個可用的系統(tǒng)運行。該方法在S5PV210處理器和Linux平臺下進行模擬實驗,得到很好的驗證。當故障出現(xiàn)時,均能保證系統(tǒng)的正常啟動,并且將出現(xiàn)故障的系統(tǒng)鏡像自動恢復(fù),測試結(jié)果證明了該方法的可行性。

嵌入式;U-Boot;Linux;UBIFS;備份;恢復(fù)

0 引言

盡管 Linux作為嵌入式操作系統(tǒng)有著諸多的優(yōu)勢,但是由于嵌入式操作系統(tǒng)自身的特點,如嵌入式應(yīng)用范圍的多樣性和復(fù)雜性,導(dǎo)致嵌入式產(chǎn)品維護難度大的問題更加突出。嵌入式系統(tǒng)在實際環(huán)境中投入運行后,掉電等意外的災(zāi)難、用戶錯誤或惡意地對數(shù)據(jù)進行修改和刪除、一部分無法在開發(fā)中充分測試的錯誤等都會導(dǎo)致功能失效,嚴重的可能導(dǎo)致系統(tǒng)癱瘓。如果采用人工更新方式,由于安裝位置等因素有時會不方便。因此,嵌入式系統(tǒng)的自動備份與恢復(fù)機制是恢復(fù)數(shù)據(jù)最容易和最有效的保證方法[1],并逐漸成為嵌入式系統(tǒng)實際應(yīng)用中的一個重要問題。

目前,普遍使用雙機熱備份[2]、容災(zāi)備份[3]等技術(shù)做為實現(xiàn)嵌入式系統(tǒng)高可靠性的設(shè)計方案,由于采用獨立的兩套系統(tǒng),因此增加了一定的設(shè)計難度和成本[4]。本文針對當前嵌入式系統(tǒng)備份技術(shù)存在的一些問題,通過分析嵌入式U-Boot及Linux內(nèi)核,將嵌入式系統(tǒng)鏡像在一套設(shè)備上備份為多份,每次僅有一個系統(tǒng)運行。當運行的操作系統(tǒng)出現(xiàn)故障時,就會觸發(fā)系統(tǒng)備份恢復(fù)機制,使用下一個可用的備份分區(qū)覆蓋掉出現(xiàn)故障的系統(tǒng)分區(qū),然后啟動下一個可用的系統(tǒng)。整個系統(tǒng)不需要備用設(shè)備,大大地節(jié)約了成本和功耗,提高了系統(tǒng)的穩(wěn)定性和可靠性。

1 系統(tǒng)總體方案設(shè)計

1.1 系統(tǒng)總體設(shè)計

嵌入式 Linux系統(tǒng)中的備份與恢復(fù)總體實現(xiàn)方案如圖1所示。

圖1 系統(tǒng)總體實現(xiàn)方案

該系統(tǒng)由x-loader(SPL)、U-Boot、U-Boot Env、Judge-Area、Kernel(uImage)和Rootfs(ubi.img)六部分組成。mtd是同一NAND Flash上劃分出的不同分區(qū),并且uImage和ubi.img在設(shè)備上備份了多份,系統(tǒng)各組成部分特性及作用介紹如下:

(1)x-loader是一級引導(dǎo)程序[5],U-Boot是二級引導(dǎo)程序[6],U-Boot Env存儲內(nèi)核啟動參數(shù)。

(2)Judge-Area存儲系統(tǒng)備份及恢復(fù)參數(shù)。在U-Boot和Linux下可以共享訪問。

(3)Kernel是Linux內(nèi)核[7],Rootfs采用開源的無排序區(qū)塊圖像文件系統(tǒng)UBIFS(Unsorted Block Image File System),特別適用于嵌入式系統(tǒng)[8]。

A、B、C均為系統(tǒng)鏡像區(qū),存放內(nèi)核和文件系統(tǒng)。UBoot通過判斷Judge-Area中的參數(shù),啟動其中一個系統(tǒng)鏡像區(qū),并將啟動過程中的故障情況反饋給 Judge-Area。當系統(tǒng)運行出現(xiàn)故障或者崩潰時,使用 watchdog機制來使其硬件復(fù)位,通過U-Boot下的自動備份恢復(fù)機制,用其他可運行的備份來覆蓋出現(xiàn)故障的系統(tǒng)鏡像區(qū),確保能啟動一個可用系統(tǒng)。

目前運行 Linux系統(tǒng)的NAND Flash配置都比較大,而裁剪后的內(nèi)核和精簡的UBI文件系統(tǒng)實際占用不到20 MB容量,或者更少[9]。因此,這為實現(xiàn) Linux系統(tǒng)的多重備份提供了可能。

1.2 備份及恢復(fù)機制

下面以三重備份與恢復(fù)為例來說明系統(tǒng)的備份及恢復(fù)流程,整個系統(tǒng)鏡像分3個地方保存在NAND Flash,具體的過程如下:

(1)系統(tǒng)上電或復(fù)位 U-Boot啟動運行,假設(shè) A區(qū)相關(guān)的 r_active_1(引導(dǎo)標志)和 b_success_1(內(nèi)核啟動成功標志)為“yes”,BC區(qū)域均為“no”。在系統(tǒng)鏡像未成功啟動以前的過程可以認為是啟動失敗的,所以先設(shè)置A區(qū) r_active_1、b_success_1為“no”,rec_kernel_1(內(nèi)核恢復(fù)標志)、rec_fs_1(文件系統(tǒng)恢復(fù)標志)為“yes”。還要設(shè)置B區(qū)r_active_2、b_success_2為“yes”。

(2)然后 U-Boot加載 A區(qū)域的系統(tǒng),若 Linux系統(tǒng)運行正常,則在Linux下還原所有標志值為初始值。若引導(dǎo)失敗,則若干時間后觸發(fā) watchdog復(fù)位系統(tǒng),此時U-Boot再次運行,判斷b_success_1為“no”,表示上次引導(dǎo)失敗,并且 rec_kernel_1、rec_fs_1為“yes”,表示需要將B區(qū)的內(nèi)核及文件系統(tǒng)覆蓋到A區(qū),覆蓋成功后清除恢復(fù)標志和重置b_success_1,再通過watchdog復(fù)位系統(tǒng)。

(3)U-Boot判斷r_active_2、b_success_2為“yes”,故選擇啟動B區(qū)域的系統(tǒng)。在系統(tǒng)啟動成功以前,設(shè)置B區(qū)r_active_2、b_success_2為“no”,rec_kernel_2、rec_fs_2為“yes”,還要設(shè)置C區(qū)r_active_3為“yes”。

要推進經(jīng)濟轉(zhuǎn)型、產(chǎn)業(yè)升級,關(guān)鍵在于推進技術(shù)進步。以組織編寫《路線圖》的方式來推動技術(shù)進步,是中國印刷及設(shè)備器材工業(yè)協(xié)會一次全新的嘗試。

(4)加載 B區(qū)域的系統(tǒng),若 Linux系統(tǒng)能正常運行,則在Linux下還原所有標志為初始值。如果B區(qū)也失敗了,復(fù)位系統(tǒng),在U-Boot下用C區(qū)覆蓋B區(qū)域。覆蓋成功后清除恢復(fù)標志和重置b_success_2,再通過watchdog復(fù)位系統(tǒng)。同理,再從C區(qū)域的系統(tǒng)啟動,當C區(qū)域也出現(xiàn)問題后,則重新從A區(qū)域啟動,循環(huán)依次選擇。

2 系統(tǒng)實現(xiàn)

2.1 Judge-Area基礎(chǔ)設(shè)計

Judge-Area是在NAND Flash上劃分出的單獨區(qū)域,內(nèi)部存儲系統(tǒng)備份及恢復(fù)的環(huán)境參數(shù),該區(qū)類似U-Boot Env區(qū)域。

為了能在U-Boot下查看和修改這些參數(shù),將本區(qū)域的所有參數(shù)定義在一個judge_tab數(shù)組中,然后導(dǎo)入到哈希表judge_htab中。

為方便調(diào)試和實現(xiàn)手動進行備份恢復(fù)操作,添加U-Boot下串口打印命令printjudge,修改命令setjudge,保存命令savejudge。打印命令printjudge的實現(xiàn)為:

同理,修改命令setjudge也是對judge_htab的簡單操作,由于這些修改只是對內(nèi)存上的數(shù)值進行操作,所以修改后的值沒有保存在NAND Flash中。保存命令savejudge便是對這些變量進行存儲,存儲的過程如下:使用hexport_r將數(shù)據(jù)導(dǎo)出到新的哈希表 judge_htab_new,然后調(diào)用 nand_erase_opts擦除 Judge-Area區(qū)域,最后使用nand_write將數(shù)據(jù)寫入到該區(qū)域。為提高讀寫數(shù)據(jù)的可靠性,開啟硬件壞塊檢測、ECC校驗。

2.2 U-Boot下備份及恢復(fù)設(shè)計

U-Boot下備份及恢復(fù)機制設(shè)計如圖 2所示。

函數(shù) judge_get()實際上調(diào)用 hsearch_r函數(shù)查詢哈希表 judge_htab,從 Judge-Area讀取下一個系統(tǒng)鏡像的地址addr_x及大小size_x。

圖2 U-Boot下備份及恢復(fù)機制設(shè)計

函數(shù) img_recover()的功能是調(diào)用 img_read、img_write恢復(fù)下一個系統(tǒng)鏡像到當前系統(tǒng)鏡像區(qū)。

Judge-Area參數(shù)重置函數(shù)judge_reset()主要工作是調(diào)用setjudge分別設(shè)置b_success_x為"yes",設(shè)置 rec_fs_x、rec_kernel_x為"no"。

U-Boot Env參數(shù)重置函數(shù) uEnv_reset()的工作是調(diào)用 setenv設(shè)置 nand_src_addr、nand_img_siz、nand_root對應(yīng)為 "n_kaddr_x"、"n_ksize_x"、"ubi0:rootfsrw ubi.mtd=y, 2048"。其中,setenv為 U-Boot自帶的函數(shù)[10],y(y=2*x+ 6)為文件系統(tǒng)所在分區(qū)。

參數(shù)預(yù)處理函數(shù)judge_init()主要工作是調(diào)用setjudge分別設(shè)置 r_active_x、b_success_x為"no",設(shè)置 rec_kernel_x、rec_fs_x、r_active_y、b_success_y為"yes"。其中,y= cyc_add(x),函數(shù) cyc_add()為周期相加函數(shù),即當 x<MAX_MTD_SYSTEM(系統(tǒng)鏡像區(qū)數(shù)量)時,x++,否則x=1。

2.3 Linux下備份及恢復(fù)設(shè)計

在系統(tǒng)鏡像啟動之前,U-Boot已經(jīng)修改了 Judge-Area中的參數(shù)并保存到NAND Flash,那么,Linux下就是對這些參數(shù)進行后期處理。本文采用開機自啟動腳本方式實現(xiàn)參數(shù)的處理[11],針對實際的應(yīng)用環(huán)境,可以將腳本插入到“不信任”位置。一旦系統(tǒng)或程序崩潰,腳本就會接收到由應(yīng)用程序、內(nèi)核等傳來的命令。然后決定是進行參數(shù)還原,還是復(fù)位系統(tǒng)。Linux下備份及恢復(fù)機制主要就是通過該腳本實現(xiàn),如圖3所示。

本文使用MTD+UBIFS的方式管理Flash,跳過FTL/ NFTL(Flash轉(zhuǎn)換層/NAND Flash轉(zhuǎn)換層),大大提高了管理能力[12]。借用mtd-utils工具包中針對NAND操作的工具[13],可以將 Judge-Area(mtd6)區(qū)中的內(nèi)容保存到 judge. txt文件中。然后調(diào)用Linux下的sed命令修改標志位,最后將修改后的文件寫回到 Judge-Area區(qū)。整個操作由anti_judge_init腳本完成,主要工作如下:

圖3 Linux下備份及恢復(fù)機制設(shè)計

為保證NAND分區(qū)一致性,需要修改內(nèi)核NAND partition信息。內(nèi)核分區(qū)信息存放在mtd_partition結(jié)構(gòu)體中,該文件一般位于arm/arm/plat目錄下。另外,制作UBIFS文件系統(tǒng)也要和內(nèi)核分區(qū)保持一致。制作UBIFS鏡像文件,需要使用mkfs.ubifs工具,該工具也是mtd-utils工具包中的內(nèi)容[14]。

3 系統(tǒng)測試

本系統(tǒng)在多款開發(fā)板上測試通過,以Tiny210開發(fā)板上的三重備份與恢復(fù)系統(tǒng)為例,測試方法是重新編譯包含自動備份與恢復(fù)機制的u-boot.img、uImage和ubi.img。ubi.img中加入了視頻監(jiān)控程序,在該程序中預(yù)留運行一段時間攝像頭就會打開失敗的BUG。因此,視頻監(jiān)控程序就是本系統(tǒng)“不信任”位置,如果程序運行失敗,就執(zhí)行Linux下的自動備份與恢復(fù)機制。Tiny210開發(fā)板集成了512 MB SLC NAND Flash,將NAND Flash被分成12個區(qū)域,見表1。

表1 NAND Flash分區(qū)設(shè)計

進入SD卡上的U-Boot,運行updatesys將生成的uboot.img、uImage、ubiubi.img燒寫到指定區(qū)域。上電,系統(tǒng)啟動成功,運行視頻監(jiān)控程序一段時間后,系統(tǒng)自動重啟,在串口上查看到的備份與恢復(fù)信息如圖4所示。

圖4 備份與恢復(fù)過程中的信息

從打印的信息可以看出,A區(qū)的系統(tǒng)鏡像被B區(qū)覆蓋,接著運行另一個分區(qū)的系統(tǒng)鏡像。

4 結(jié)論

從測試結(jié)果看,本文設(shè)計的備份與恢復(fù)機制可以保證系統(tǒng)能在特殊的環(huán)境下穩(wěn)定地工作,整個過程都是系統(tǒng)自動完成,維護方便。目前,NAND Flash的成本越來越低,容量越來越大[15],這種備份與恢復(fù)方法無疑是降低成本、保證系統(tǒng)穩(wěn)定性方便有效的方法。該方案可以應(yīng)用在一些對功能穩(wěn)定性要求高和維護不方便的系統(tǒng)測試等場合。

[1]索紅軍.嵌入式系統(tǒng)中熱備份雙機切換技術(shù)研究[J].微計算機信息,2008,24(8):32-34.

[2]馬錦榮.一種嵌入式系統(tǒng)bootrom自動備份及切換技術(shù)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011,11(12):74-75.

[3]謝長生,韓德志,李懷陽.容災(zāi)備份的等級和技術(shù)[J].中國計算機用戶,2003,19(18):30-31.

[4]郭榮佐,黃君.嵌入式實時控制系統(tǒng)硬件可靠性及應(yīng)用研究[J].電子技術(shù)應(yīng)用,2012(5):11-14.

[5]蔡利平,任家富,童銳,等.基于ARM的Nand Flash啟動分析與移植[J].計算機工程與設(shè)計,2012(3):931-935.

[6]高文輝,師奕兵,張偉.基于 S3C2440的 U-Boot雙啟動實現(xiàn)[J].測控技術(shù),2012(2):87-91.

[7]胡勇其,侯紫峰.嵌入式Linux下NAND存儲系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程,2006(4):61-63,81.

[8]韋斯,丁志剛,張偉宏.LINUX下 UBI子系統(tǒng)的研究與應(yīng)用[J].計算機應(yīng)用與軟件,2010(10):68-71.

[9]賈源泉,肖儂,賴明澈,等.基于NAND FLASH的多路并行存儲系統(tǒng)中壞塊策略的研究[J].計算機研究與發(fā)展,2012(z1):68-72.

[10]武貝貝.面向 NAND閃存的 SQLite數(shù)據(jù)恢復(fù)技術(shù)研究與應(yīng)用[D].浙江:杭州電子科技大學,2012.

[11]陳鵬,王樹志,董孝峰,等.一種嵌入式操作系統(tǒng)休眠喚醒后程序自動運行的方法[J].電子技術(shù)應(yīng)用,2012,38 (2):11-13.

[12]張少波,徐廣輝,田小鋒,等.基于 Nand FLASH高可靠自恢復(fù)實時文件系統(tǒng)[J].計算機工程與科學,2012(6):169-173.

[13]高麗,張歡慶.嵌入式 Linux中NAND Flash設(shè)備驅(qū)動研究[J].電腦開發(fā)與應(yīng)用,2014(5):11-16.

[14]鞠高明,俞建新.UBIFS閃存文件系統(tǒng)分析與研究[J].電腦知識與技術(shù),2014(4):749-754.

[15]魯慧榮.2012年閃存技術(shù)與市場變化趨勢[J].集成電路應(yīng)用,2013(1):4-6.

Design on multiple backup and recovery in embedded Linux system

Ding Yuanzhou,Luo Xiaoqiao,Ye Liansong,Chen Yu
(Institute of Physical Science and Technology,Central China Normal University,Wuhan 430079,China)

In this paper,one of multiple backup and restore mechanism is put forward in embedded Linux system.Division of a number of system image area(including the kernel and file system)on a NAND Flash using this design,multiple backup and recovery mechanism are added in the U-Boot and the system image area.When running image area fails,triggering mechanism of watchdog restarts and activates the automatic backup and recovery mechanism,ensuring one of the available system operation at any time.The method is simulated in the S5PV210 processor and Linux system platform and it is well verified.When a failure occurs, it also can guarantee normal starting system,and automatic recover system image which goes wrong.Test results prove the feasibility of this method.

embedded;U-Boot;Linux;UBIFS;backup;restore

TP302

:A

:0258-7998(2015)03-0024-04

10.16157/j.issn.0258-7998.2015.03.004

2014-09-09)

丁元舟(1988-),通信作者,男,在讀碩士,主要研究方向:嵌入式系統(tǒng)與應(yīng)用等,E-mail:dyzok88@126.com。

羅小巧(1972-),女,副教授,主要研究方向:嵌入式系統(tǒng)和智能信息處理等。

葉連松(1990-),男,在讀碩士,主要研究方向:嵌入式系統(tǒng)與應(yīng)用等。

猜你喜歡
內(nèi)核鏡像備份
“備份”25年:鄧清明圓夢
VSAT衛(wèi)星通信備份技術(shù)研究
強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
鏡像
創(chuàng)建vSphere 備份任務(wù)
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
Linux內(nèi)核mmap保護機制研究
鏡像
舊瓶裝新酒天宮二號從備份變實驗室
提升影視文化軟實力的人文內(nèi)核審視
钦州市| 乃东县| 邵阳市| 三门县| 隆昌县| 上饶市| 巩留县| 新巴尔虎左旗| 昌黎县| 广汉市| 银川市| 繁峙县| 大宁县| 遂溪县| 斗六市| 呼和浩特市| 漳州市| 曲水县| 茂名市| 海阳市| 四子王旗| 岢岚县| 册亨县| 绍兴市| 堆龙德庆县| 峡江县| 荃湾区| 东乌珠穆沁旗| 陇南市| 武平县| 六盘水市| 邯郸市| 漳浦县| 石门县| 望都县| 鄂尔多斯市| 台山市| 兴义市| 海阳市| 包头市| 札达县|