一種嵌入式Linux存儲(chǔ)分區(qū)的開發(fā)方法
【專利摘要】本發(fā)明公開一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法,包括步驟:S101、bootloader在信息區(qū)創(chuàng)建初始分區(qū)表;S102、bootloader根據(jù)初始分區(qū)表升級(jí)鏡像程序,并根據(jù)升級(jí)的鏡像數(shù)據(jù)地址更新分區(qū)表,以及將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份鏡像分區(qū);S103、bootloader將分區(qū)信息傳入Linux內(nèi)核,Linux內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián)。本發(fā)明還公開一種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)及系統(tǒng)開發(fā)方法。相較于現(xiàn)有技術(shù),本發(fā)明可實(shí)現(xiàn)對(duì)嵌入式Linux系統(tǒng)動(dòng)態(tài)分區(qū)、文件系統(tǒng)故障還原,減少產(chǎn)品的維護(hù)與開發(fā)成本。
【專利說明】
一種嵌入式Li nux存儲(chǔ)分區(qū)的開發(fā)方法[0001 ] 本案是以申請(qǐng)?zhí)枮?01310435177.X,申請(qǐng)日:2013年9月23號(hào),名稱為《嵌入式 Linux分區(qū)與數(shù)據(jù)還原方法、系統(tǒng)及系統(tǒng)開發(fā)方法》的專利申請(qǐng)為母案的分案申請(qǐng)。
技術(shù)領(lǐng)域
[0002]本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,尤其涉及一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法、系統(tǒng)及系統(tǒng)開發(fā)方法。【背景技術(shù)】
[0003]嵌入式Linux系統(tǒng)目前廣泛的使用在電子行業(yè)與微型計(jì)算機(jī)行業(yè),其特點(diǎn)是開發(fā)方便、可移植性強(qiáng)、任務(wù)處理高效與節(jié)省硬件資源。
[0004]嵌入式Linux系統(tǒng)目前主要的數(shù)據(jù)存儲(chǔ)介質(zhì)有硬盤、Nandflash和iNand/SD/MMC, 其中Nandf lash由于價(jià)格低廉、存儲(chǔ)容量大與通用性強(qiáng)處于行業(yè)中普遍使用的存儲(chǔ)器。 Nandflash由于其自身的電氣特性是使用充放電原理來修改數(shù)據(jù),這必然會(huì)導(dǎo)致數(shù)據(jù)的存儲(chǔ)單元,在多次修改之后產(chǎn)生不合格數(shù)據(jù),這不合格數(shù)據(jù)所在的存儲(chǔ)單元,我們俗稱壞塊 (invalid block),壞塊的產(chǎn)生必然會(huì)導(dǎo)致Linux系統(tǒng)下文件系統(tǒng)的破損和分區(qū)不能正常使用等一系列數(shù)據(jù)存儲(chǔ)問題。
[0005]鑒于Linux存儲(chǔ)介質(zhì)可能出現(xiàn)壞塊的現(xiàn)象,而目前嵌入式行業(yè)使用Linux的分區(qū)普遍使用在Linux內(nèi)核中設(shè)置默認(rèn)值,會(huì)存在分區(qū)掛載失敗和文件系統(tǒng)數(shù)據(jù)異常的風(fēng)險(xiǎn)。
【發(fā)明內(nèi)容】
[0006]為解決上述問題,本發(fā)明采用的一個(gè)技術(shù)方案是:
[0007]提供一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法,包括步驟:S101、boot loader在信息區(qū)創(chuàng)建初始分區(qū)表,分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息,鏡像分區(qū)包括bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū);S102、bootloader 根據(jù)初始分區(qū)表升級(jí)鏡像程序,并根據(jù)升級(jí)的鏡像數(shù)據(jù)地址更新分區(qū)表,以及將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份鏡像分區(qū);S103、bootloader將分區(qū)信息傳入Linux內(nèi)核,Linux內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián)。
[0008]本發(fā)明采用的另一個(gè)技術(shù)方案是:
[0009]提供一種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法,包括步驟:設(shè)置bootloader 對(duì)外人機(jī)交互接口,用于支持預(yù)設(shè)傳輸途徑下,數(shù)據(jù)存儲(chǔ)介質(zhì)所有分區(qū)鏡像的升級(jí)以及參數(shù)設(shè)置;設(shè)置bootloader數(shù)據(jù)存儲(chǔ)介質(zhì)驅(qū)動(dòng)接口,用于判斷壞塊以及正確讀寫數(shù)據(jù);在 bootloader代碼中預(yù)置初始分區(qū)表,分區(qū)表保存在信息區(qū),信息區(qū)為數(shù)據(jù)存儲(chǔ)介質(zhì)不可能出現(xiàn)壞塊的位置設(shè)置信息區(qū),分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息,鏡像分區(qū)包括 bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū);在 boot loader代碼中設(shè)計(jì)壞塊管理機(jī)制,當(dāng)boot loader升級(jí)鏡像程序判定出現(xiàn)壞塊時(shí),將分區(qū)的起始地址跳過壞塊向后移動(dòng),將新的分區(qū)的起始地址更新至分區(qū)表。在bootloader代碼中設(shè)計(jì)Linux能夠識(shí)別的分區(qū)信息數(shù)據(jù)格式以將分區(qū)表傳入Linux內(nèi)核,分區(qū)信息包括分區(qū)號(hào)、分區(qū)名稱、分區(qū)的起始地址、分區(qū)容量、分區(qū)屬性;在Linux源碼中添加對(duì)分區(qū)信息數(shù)據(jù)格式的解析函數(shù),用于內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián), 其中解析過程處于early或init階段。
[0010]本發(fā)明提供的嵌入式Linux分區(qū)與數(shù)據(jù)還原方法、系統(tǒng)及系統(tǒng)開發(fā)方法,利用 bootloader對(duì)各個(gè)鏡像的管理和保護(hù),在嵌入式Linux內(nèi)核啟動(dòng)時(shí)傳入動(dòng)態(tài)分區(qū)信息,嵌入式Linux內(nèi)核解析bootloader傳入的分區(qū)信息并與數(shù)據(jù)存儲(chǔ)介質(zhì)關(guān)聯(lián),根文件系統(tǒng)只讀并能夠引導(dǎo)掛載用戶文件系統(tǒng),掛載失敗或者用戶要求還原時(shí),擦除數(shù)據(jù)存儲(chǔ)介質(zhì)標(biāo)記區(qū)并標(biāo)記無效,bootloader啟動(dòng)時(shí)判斷用戶文件系統(tǒng)區(qū)是否無效,如果無效將其從備份區(qū)還原。 相較于現(xiàn)有技術(shù),本發(fā)明增加對(duì)嵌入式Linux系統(tǒng)動(dòng)態(tài)分區(qū)、文件系統(tǒng)故障還原,減少產(chǎn)品的維護(hù)與開發(fā)成本?!靖綀D說明】
[0011]圖1是本發(fā)明一實(shí)施方式中一種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法的執(zhí)行流程圖;
[0012]圖2是本發(fā)明一實(shí)施方式中的鏡像分區(qū)示意圖;
[0013]圖3是本發(fā)明一實(shí)施方式中一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法的執(zhí)行流程圖;
[0014]圖4是數(shù)據(jù)還原步驟的具體執(zhí)行流程圖;
[0015]圖5是步驟S102的具體執(zhí)行流程圖;
[0016]圖6是本發(fā)明一實(shí)施方式中一種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng);[〇〇17]圖7是圖6中升級(jí)模塊的功能模塊圖。[〇〇18]主要元件符號(hào)說明[〇〇19]嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)100;
[0020]創(chuàng)建模塊10;
[0021]升級(jí)模塊20;
[0022]關(guān)聯(lián)模塊30;
[0023]第一判斷模塊40;
[0024]復(fù)制模塊50;
[0025]掛載判斷模塊60;
[0026]重啟模塊70;
[0027]下載子模塊21;
[0028]升級(jí)判斷子模塊22;
[0029]壞塊跳過子模塊23;
[0030]更新子模塊24?!揪唧w實(shí)施方式】
[0031]為詳細(xì)說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖詳予說明。
[0032]請(qǐng)參閱圖1,是本發(fā)明一實(shí)施方式中一種嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法的執(zhí)行流程圖。
[0033] —種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法,包括如下步驟:[〇〇34] 步驟S301、設(shè)置bootloader對(duì)外人機(jī)交互接口,所述對(duì)外人機(jī)交互接口用于支持預(yù)設(shè)傳輸途徑下,數(shù)據(jù)存儲(chǔ)介質(zhì)所有分區(qū)鏡像的升級(jí)以及參數(shù)設(shè)置。[0〇35]步驟S302、設(shè)置bootloader數(shù)據(jù)存儲(chǔ)介質(zhì)驅(qū)動(dòng)接口,所述存儲(chǔ)介質(zhì)驅(qū)動(dòng)接口用于判斷壞塊以及正確讀寫數(shù)據(jù)。[〇〇36] 步驟S303、在bootloader代碼中預(yù)置初始分區(qū)表,分區(qū)表保存在信息區(qū),信息區(qū)為數(shù)據(jù)存儲(chǔ)介質(zhì)不可能出現(xiàn)壞塊的位置設(shè)置信息區(qū),分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息。請(qǐng)參閱圖2,是本發(fā)明一實(shí)施方式中的鏡像分區(qū)示意圖。在本實(shí)施方式中,鏡像分區(qū)包括 bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū)。 [〇〇37] 步驟S304、在bootloader代碼中設(shè)計(jì)壞塊管理機(jī)制,所述壞塊管理機(jī)制用于當(dāng) bootloader升級(jí)鏡像程序判定出現(xiàn)壞塊時(shí),將分區(qū)的起始地址跳過壞塊向后移動(dòng),并當(dāng)完成移動(dòng)后將新的分區(qū)的起始地址更新至分區(qū)表。[0〇38] 步驟S305、在bootloader代碼中設(shè)計(jì)Linux能夠識(shí)別的分區(qū)信息數(shù)據(jù)格式,分區(qū)信息包括分區(qū)號(hào)、分區(qū)名稱、分區(qū)的起始地址、分區(qū)容量、分區(qū)屬性。[〇〇39] 具體地,將分區(qū)信息組包在cmdline中,其格式如下:
[0040] cmdline=mtdarry: [num], [name], [start], [size], [opt];[〇〇41 ] 其中,num表示mtd分區(qū)號(hào),name表示mtd分區(qū)名稱,start表示當(dāng)前分區(qū)的起始地址,size表示分區(qū)容量,opt表示分區(qū)屬性。
[0042]步驟S306、在Linux源碼中添加對(duì)分區(qū)信息數(shù)據(jù)格式的解析函數(shù),所述解析函數(shù)用于內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián),其中解析過程處于 early 或 init 階段。
[0043]在本實(shí)施方式中,所述的一種嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法,還包括步驟:[〇〇44] 步驟S307、在bootloader代碼中設(shè)計(jì)備份機(jī)制,所述備份機(jī)制用于將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份鏡像分區(qū)備份。
[0045]步驟S308、在根文件系統(tǒng)掛載用戶文件系統(tǒng)的腳本中添加掛載失敗機(jī)制,所述掛載失敗機(jī)制用于當(dāng)掛載失敗時(shí)將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法并重啟系統(tǒng)。[0〇46] 步驟S309、在boot loader代碼中設(shè)計(jì)還原機(jī)制,所述還原機(jī)制用于在Linux內(nèi)核啟動(dòng)之前判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為不合法,并當(dāng)判定不合法時(shí)從所述備份鏡像分區(qū)將升級(jí)的鏡像數(shù)據(jù)復(fù)制到用戶文件系統(tǒng)分區(qū),然后將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法。[〇〇47]其中,所述步驟S308前還包括步驟:在根文件系統(tǒng)中添加一個(gè)用于擦寫分區(qū)的工具程序;所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法”具體為:使用所述工具程序?qū)⒂脩粑募到y(tǒng)分區(qū)以第〇塊地址偏移擦除10個(gè)塊;所述“判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為不合法” 具體為:判斷用戶文件系統(tǒng)分區(qū)的第0塊地址上的數(shù)據(jù)是否被擦除,如果被擦除則判定為不合法;所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法”具體為將用戶文件系統(tǒng)分區(qū)的第0塊地址上的數(shù)據(jù)標(biāo)記為已使用。例如,假設(shè)用戶文件系統(tǒng)在mtd第3分區(qū),并且屬于UBI文件系統(tǒng),則添加如下命令:
[0048] “ubiattch/dev/ubi_ctrl-m 3
[0049]mount-t ubifs ubil:usrfs/usr
[0050]if[$?!=〇];
[0051]then
[0052]echo“mount fail”
[0053]/etc/mtd/flash_erase/dev/mtd3 0x0 10
[0054]echo“reboot”
[0055]reboot
[0056]else
[0057]echo“mount ok”
[0058]fi;”[〇〇59]以上命令的意思是,掛載mtd3分區(qū),如果失敗則將mtd3以0地址偏移擦除10個(gè)塊,然后軟件重啟設(shè)備。[0〇6〇]其中,所述工具程序使用開源軟件mtd-utils-tools編譯生成。
[0061]本發(fā)明的嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)開發(fā)方法,解決了系統(tǒng)在反復(fù)升級(jí)過程中導(dǎo)致數(shù)據(jù)存儲(chǔ)介質(zhì)壞塊產(chǎn)生影響分區(qū)正常使用的問題,減少了內(nèi)核源碼的修改和維護(hù);解決了文件系統(tǒng)破損情況無法掛載,從而需要返工維修替換數(shù)據(jù)存儲(chǔ)介質(zhì)與刷新鏡像的問題,很大程度上節(jié)省了開發(fā)維護(hù)周期與成本。
[0062]下面對(duì)基于上述開發(fā)方法開發(fā)出的嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)所執(zhí)行的一種嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原方法進(jìn)行說明。
[0063]請(qǐng)參閱圖3,是本發(fā)明一實(shí)施方式中一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法的執(zhí)行流程圖,包括步驟:[0〇64]步驟S101、bootloader在信息區(qū)創(chuàng)建初始分區(qū)表,分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息,鏡像分區(qū)包括bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū)。
[0065]其中,所述信息區(qū)是數(shù)據(jù)存儲(chǔ)介質(zhì)不可能出現(xiàn)壞塊的位置,所述分區(qū)信息包括各分區(qū)的起始地址、分區(qū)容量。[〇〇66]步驟S102、b〇〇tl〇ader根據(jù)初始分區(qū)表升級(jí)鏡像程序,并根據(jù)升級(jí)的鏡像數(shù)據(jù)地址更新分區(qū)表,以及將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份鏡像分區(qū)。
[0067]步驟S103、boot loader將分區(qū)信息傳入Linux內(nèi)核,Linux內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián)。
[0068]在本實(shí)施方式中,所述的一種嵌入式Linux分區(qū)與數(shù)據(jù)還原方法還包括數(shù)據(jù)還原步驟,請(qǐng)參閱圖4,是數(shù)據(jù)還原步驟的具體執(zhí)行流程圖。該數(shù)據(jù)還原步驟具體包括:[0〇69]步驟S201、boot loader在Linux內(nèi)核啟動(dòng)之前判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為合法,若否,進(jìn)入步驟S202,若是,進(jìn)入步驟S203;
[0070]步驟S202、b〇〇tl〇ader從所述備份鏡像分區(qū)將升級(jí)的鏡像數(shù)據(jù)復(fù)制到用戶文件系統(tǒng)分區(qū),然后將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法,進(jìn)入步驟S201;
[0071]步驟S203、當(dāng)Linux內(nèi)核啟動(dòng)后,執(zhí)行根文件系統(tǒng)掛載其他文件系統(tǒng)并判斷是否掛載成功,若否,進(jìn)入步驟S204,若是,系統(tǒng)正常運(yùn)行;[〇〇72]步驟S204、將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法并重啟系統(tǒng)。
[0073]其中,所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法”具體步驟為:使用工具程序?qū)⒂脩粑募到y(tǒng)分區(qū)以第〇塊地址偏移擦除10個(gè)塊;所述“判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為不合法”具體為:判斷用戶文件系統(tǒng)分區(qū)的第〇塊地址上的數(shù)據(jù)是否被擦除,如果被擦除則判定為不合法;所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法”具體為將用戶文件系統(tǒng)分區(qū)的第〇塊地址上的數(shù)據(jù)標(biāo)記為已使用。
[0074]其中,請(qǐng)參閱圖5,是步驟S102的具體執(zhí)行流程圖。所述步驟S102具體包括:[0〇75]步驟S1021、bootloader將Linux內(nèi)核、用戶文件系統(tǒng)和其他數(shù)據(jù)下載到指定分區(qū)中,在此過程,如果分區(qū)頭處于壞塊區(qū)域,將分區(qū)的相應(yīng)數(shù)據(jù)向后移動(dòng)一個(gè)單元,同時(shí)更新分區(qū)表;[0〇76] 步驟S1022、當(dāng)bootloader升級(jí)鏡像程序時(shí),判斷是否出現(xiàn)壞塊;[〇〇77]步驟S1023、當(dāng)判定出現(xiàn)壞塊時(shí),將分區(qū)的起始地址跳過壞塊向后移動(dòng);[〇〇78] 步驟S1024、當(dāng)完成移動(dòng)后,將新的分區(qū)的起始地址更新至分區(qū)表。
[0079]請(qǐng)參閱圖6,是本發(fā)明一實(shí)施方式中一種嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)的功能模塊中。所述嵌入式Linux動(dòng)態(tài)分區(qū)與數(shù)據(jù)還原系統(tǒng)100包括創(chuàng)建模塊10、升級(jí)模塊20、 關(guān)聯(lián)t旲塊30。[0〇8〇]創(chuàng)建模塊10用于使用bootloader在信息區(qū)創(chuàng)建初始分區(qū)表,分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息,鏡像分區(qū)包括bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū)。[〇〇81]升級(jí)模塊20用于使用bootloader根據(jù)初始分區(qū)表升級(jí)鏡像程序,并根據(jù)升級(jí)的鏡像數(shù)據(jù)地址更新分區(qū)表,以及將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份鏡像分區(qū);[0〇82]關(guān)聯(lián)模塊30用于使用bootloader將分區(qū)信息傳入Linux內(nèi)核,Linux內(nèi)核解析分區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián)。
[0083]其中,所述信息區(qū)是數(shù)據(jù)存儲(chǔ)介質(zhì)不可能出現(xiàn)壞塊的位置,所述分區(qū)信息包括各分區(qū)的起始地址、分區(qū)容量。
[0084]在本實(shí)施方式中,所述的一種嵌入式Linux分區(qū)與數(shù)據(jù)還原系統(tǒng)100還包括第一判斷模塊40、復(fù)制模塊50、掛載判斷模塊60、重啟模塊70。[0〇85]第一判斷模塊40用于使用bootloader在Linux內(nèi)核啟動(dòng)之前判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為合法。[〇〇86]復(fù)制模塊50用于當(dāng)?shù)谝慌袛嗄K40判定用戶文件系統(tǒng)未有標(biāo)記為合法時(shí),使用 bootloader從所述備份鏡像分區(qū)將升級(jí)的鏡像數(shù)據(jù)復(fù)制到用戶文件系統(tǒng)分區(qū),然后將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法,然后通知第一判斷模塊40執(zhí)行判斷操作。[〇〇87]掛載判斷模塊60用于當(dāng)?shù)谝慌袛嗄K40判定用戶文件系統(tǒng)標(biāo)記為合法時(shí),且當(dāng) Linux內(nèi)核啟動(dòng)后,執(zhí)行根文件系統(tǒng)掛載其他文件系統(tǒng)并判斷是否掛載成功,若是,系統(tǒng)正常運(yùn)行。
[0088]重啟模塊70用于當(dāng)掛載判斷模塊判定沒有掛載成功時(shí),將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法并重啟系統(tǒng)。
[0089]請(qǐng)參閱圖7,是圖6中升級(jí)模塊的功能模塊圖。在本實(shí)施方式中,所述升級(jí)模塊20具體包括下載子模塊21、升級(jí)判斷子模塊22、壞塊跳過子模塊23、更新子模塊24。[0〇9〇]下載子模塊21用于使用bootloader將Linux內(nèi)核、用戶文件系統(tǒng)和其他數(shù)據(jù)下載到指定分區(qū)中,在此過程,如果分區(qū)頭處于壞塊區(qū)域,將分區(qū)的相應(yīng)數(shù)據(jù)向后移動(dòng)一個(gè)單元,同時(shí)更新分區(qū)表。
[0091] 升級(jí)判斷子模塊22用于當(dāng)bootloader升級(jí)鏡像程序時(shí),判斷是否出現(xiàn)壞塊。
[0092]壞塊跳過子模塊23用于當(dāng)升級(jí)判斷子模塊當(dāng)判定出現(xiàn)壞塊時(shí),將分區(qū)的起始地址跳過壞塊向后移動(dòng)。[〇〇93]更新子模塊24用于當(dāng)壞塊跳過子模塊23完成移動(dòng)后,將新的分區(qū)的起始地址更新至分區(qū)表。
[0094]本發(fā)明提供的嵌入式Linux分區(qū)與數(shù)據(jù)還原方法、系統(tǒng)及系統(tǒng)開發(fā)方法,利用 bootloader對(duì)各個(gè)鏡像的管理和保護(hù),在嵌入式Linux內(nèi)核啟動(dòng)時(shí)傳入動(dòng)態(tài)分區(qū)信息,嵌入式Linux內(nèi)核解析bootloader傳入的分區(qū)信息并與數(shù)據(jù)存儲(chǔ)介質(zhì)關(guān)聯(lián),根文件系統(tǒng)只讀并能夠引導(dǎo)掛載用戶文件系統(tǒng),掛載失敗或者用戶要求還原時(shí),擦除數(shù)據(jù)存儲(chǔ)介質(zhì)標(biāo)記區(qū)并標(biāo)記無效,bootloader啟動(dòng)時(shí)判斷用戶文件系統(tǒng)區(qū)是否無效,如果無效將其從備份區(qū)還原。 相較于現(xiàn)有技術(shù),本發(fā)明可實(shí)現(xiàn)對(duì)嵌入式Linux系統(tǒng)動(dòng)態(tài)分區(qū)、文件系統(tǒng)故障還原,減少產(chǎn)品的維護(hù)與開發(fā)成本。
[0095]以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種嵌入式Linux存儲(chǔ)分區(qū)的開發(fā)方法,其特征在于,包括步驟:設(shè)置bootloader對(duì)外人機(jī)交互接口,所述對(duì)外人機(jī)交互接口用于支持預(yù)設(shè)傳輸途徑 下,數(shù)據(jù)存儲(chǔ)介質(zhì)所有分區(qū)鏡像的升級(jí)以及參數(shù)設(shè)置;設(shè)置bootloader數(shù)據(jù)存儲(chǔ)介質(zhì)驅(qū)動(dòng)接口,所述數(shù)據(jù)存儲(chǔ)介質(zhì)驅(qū)動(dòng)接口用于判斷壞塊以 及正確讀寫數(shù)據(jù);在bootloader代碼中預(yù)置初始分區(qū)表,分區(qū)表保存在信息區(qū),信息區(qū)為數(shù)據(jù)存儲(chǔ)介質(zhì) 不可能出現(xiàn)壞塊的位置設(shè)置信息區(qū),分區(qū)表用于記錄鏡像分區(qū)對(duì)應(yīng)分區(qū)信息,鏡像分區(qū)包 括bootloader分區(qū)、Linux內(nèi)核分區(qū)、備份鏡像分區(qū)、根文件系統(tǒng)分區(qū)、用戶文件系統(tǒng)分區(qū);在bootloader代碼中設(shè)計(jì)壞塊管理機(jī)制,所述壞塊管理機(jī)制用于當(dāng)bootloader升級(jí)鏡 像程序判定出現(xiàn)壞塊時(shí),將分區(qū)的起始地址跳過壞塊向后移動(dòng),將新的分區(qū)的起始地址更 新至分區(qū)表;在bootloader代碼中設(shè)計(jì)Linux能夠識(shí)別的分區(qū)信息數(shù)據(jù)格式,分區(qū)信息包括分區(qū)號(hào)、 分區(qū)名稱、分區(qū)的起始地址、分區(qū)容量、分區(qū)屬性;在Linux源碼中添加對(duì)分區(qū)信息數(shù)據(jù)格式的解析函數(shù),所述解析函數(shù)用于內(nèi)核解析分 區(qū)信息并將解析成功的分區(qū)信息與存儲(chǔ)介質(zhì)相關(guān)聯(lián),其中解析過程處于early或init階段。2.根據(jù)權(quán)利要求1所述的一種嵌入式Linux存儲(chǔ)分區(qū)的開發(fā)方法,其特征在于,還包括 步驟:在bootloader代碼中設(shè)計(jì)備份機(jī)制,所述備份機(jī)制用于將升級(jí)的鏡像數(shù)據(jù)存儲(chǔ)至備份 鏡像分區(qū)備份在根文件系統(tǒng)掛載用戶文件系統(tǒng)的腳本中添加掛載失敗機(jī)制,所述掛載失敗機(jī)制用于 當(dāng)掛載失敗時(shí)將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法并重啟系統(tǒng);在boot loader代碼中設(shè)計(jì)還原機(jī)制,所述還原機(jī)制用于在Linux內(nèi)核啟動(dòng)之前判斷用 戶文件系統(tǒng)分區(qū)是否標(biāo)記為不合法,并當(dāng)判定不合法時(shí)從所述備份鏡像分區(qū)將升級(jí)的鏡像 數(shù)據(jù)復(fù)制到用戶文件系統(tǒng)分區(qū),然后將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法。3.根據(jù)權(quán)利要求2所述的一種嵌入式Linux存儲(chǔ)分區(qū)的開發(fā)方法,其特征在于,還包括 步驟:在根文件系統(tǒng)中添加一個(gè)用于擦寫分區(qū)的工具程序;所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為不合法”具體為:使用所述工具程序?qū)⒂脩粑募到y(tǒng) 分區(qū)以第0塊地址偏移擦除10個(gè)塊;所述“判斷用戶文件系統(tǒng)分區(qū)是否標(biāo)記為不合法”具體為:判斷用戶文件系統(tǒng)分區(qū)的第 0塊地址上的數(shù)據(jù)是否被擦除,如果被擦除則判定為不合法;所述“將用戶文件系統(tǒng)分區(qū)標(biāo)記為合法”具體為將用戶文件系統(tǒng)分區(qū)的第〇塊地址上的 數(shù)據(jù)標(biāo)記為已使用。4.根據(jù)權(quán)利要求3所述的一種嵌入式Linux存儲(chǔ)分區(qū)的開發(fā)方法,其特征在于,所述工 具程序使用開源軟件mtd-utils-tools編譯生成。
【文檔編號(hào)】G06F11/14GK106095620SQ201610410615
【公開日】2016年11月9日
【申請(qǐng)日】2013年9月23日 公開號(hào)201610410615.0, CN 106095620 A, CN 106095620A, CN 201610410615, CN-A-106095620, CN106095620 A, CN106095620A, CN201610410615, CN201610410615.0
【發(fā)明人】甘禹, 黃歆颋
【申請(qǐng)人】恒鴻達(dá)科技有限公司