嵌入式系統(tǒng)中ubi設(shè)備分區(qū)快速加載方法
【專利摘要】本發(fā)明公開了一種嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,包括UBI設(shè)備初始化、UBI設(shè)備卸載流程設(shè)計(jì)和UBI設(shè)備加載流程設(shè)計(jì);由于壓縮包存儲(chǔ)的頁面數(shù)遠(yuǎn)小于現(xiàn)有掃描需要讀取的頁面數(shù),可以減少大量系統(tǒng)度外設(shè)的DMA中斷耗時(shí),進(jìn)而大幅度節(jié)約系統(tǒng)啟動(dòng)時(shí)間。
【專利說明】
嵌入式系統(tǒng)中UBI設(shè)備分區(qū)快速加載方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于計(jì)算機(jī)嵌入式系統(tǒng)應(yīng)用領(lǐng)域,具體設(shè)及一種嵌入式系統(tǒng)UBI設(shè)備分區(qū) 快速加載方法。
【背景技術(shù)】
[0002] 當(dāng)前W智能設(shè)備為代表的嵌入式產(chǎn)品廣泛普及,所依賴的嵌入式平臺(tái)幾乎都使用 支持內(nèi)存管理單元(MMU)的操作系統(tǒng)。例如,嵌入式Linux系統(tǒng)、基于Linux內(nèi)核的An化iod系 統(tǒng),W及在An化iod基礎(chǔ)上深度開發(fā)的各種變本等。多數(shù)嵌入式平臺(tái)都會(huì)使用NAND FLA甜閃 存設(shè)備,基于NAND的文件系統(tǒng)也被廣泛使用,主要有YAFFS JEFFS2、無排序區(qū)塊鏡像文件系 統(tǒng)(UBIFS)等。UBIFS是針對(duì)NAND開發(fā)的一種專業(yè)閃存日志文件系統(tǒng),相比較傳統(tǒng)的文件系 統(tǒng)具備很多優(yōu)點(diǎn)。UBIFS文件系統(tǒng)是基于無排序區(qū)塊鏡像化BI)設(shè)備層基礎(chǔ)上使用,UBI設(shè)備 是為管理NAND存儲(chǔ)塊而設(shè)計(jì)的一種設(shè)備管理接口層。UBI是一種設(shè)計(jì)用于NAND塊設(shè)備的管 理接口層,架設(shè)于mtd設(shè)備之上。UBI對(duì)mtd層的物理擦寫塊(Physical Erase Block,陽B)進(jìn) 行統(tǒng)一管理,將其打包成邏輯擦寫塊化Ogical化ase,LEB),內(nèi)部封裝壞塊管理、損益均衡 管理W及卷管理等功能,提供給上層文件系統(tǒng)W統(tǒng)一的設(shè)備讀寫接口。UBIFS文件系統(tǒng)層只 需要關(guān)注于日志文件管理層的設(shè)計(jì),結(jié)構(gòu)上相互獨(dú)立。系統(tǒng)啟動(dòng)時(shí)UBI需要掃描分區(qū)中所有 物理存儲(chǔ)塊(Block)的頭信息,進(jìn)而在內(nèi)存中建立起管理設(shè)備分區(qū)的數(shù)據(jù)結(jié)構(gòu)信息,完成 UBI設(shè)備加載,為上層UB WS提供文件操作接口。
[0003] UBI設(shè)備分區(qū)格式化過程中會(huì)對(duì)所屬存儲(chǔ)分區(qū)的mtd層物理PEB塊進(jìn)行格式化操 作。UBI向陽B中寫入頭信息:VID header和ECC header,大小為64字節(jié)(B^e),占用陽B前兩 個(gè)頁面(Page),同時(shí)在內(nèi)存中建立起邏輯管理結(jié)構(gòu)。格式化后P邸塊被UBI作為邏輯L邸接口 統(tǒng)一使用。系統(tǒng)啟動(dòng)時(shí),UBI設(shè)備的加載過程其實(shí)就是建立起UBI邏輯管理結(jié)構(gòu),UBI會(huì)依次 掃描分區(qū)中的所有物理PEB,讀取L邸頭信息結(jié)構(gòu)和壞塊(Bad Block)標(biāo)志。UBI設(shè)備卸載相 對(duì)簡單,只需要釋放相關(guān)內(nèi)存資源即可。
[0004] UBI設(shè)備占用P邸塊的前兩個(gè)頁面,每個(gè)頁面只使用64Bytes用于存儲(chǔ)頭信息,在大 頁面NAND(如4KB、8KB型)中只使用到頁面的一小部分存儲(chǔ)空間。由于NAND設(shè)備的隨機(jī)讀取 (Random read)效率很低,一般驅(qū)動(dòng)程序都會(huì)W整頁為單位進(jìn)行DMA讀操作。讀取P邸的前兩 個(gè)化ge屬于DMA讀外設(shè)數(shù)據(jù)的過程,DMA控制器發(fā)送讀數(shù)據(jù)命令后需要等待NAND內(nèi)部wait/ busy(R/B)信號(hào)結(jié)束才會(huì)觸發(fā)對(duì)應(yīng)端口開始數(shù)據(jù)采樣。NAND內(nèi)部R/B信號(hào)等待時(shí)間遠(yuǎn)大于通 常CPU指令的工作時(shí)間,不同制程和款型NAND的內(nèi)部取數(shù)據(jù)的R/B信號(hào)等待時(shí)間約為20US到 IOOus不等。另外,DMA完成從1/0端口采樣整個(gè)化ge的2112Bytes數(shù)據(jù)操作也會(huì)耗費(fèi)較長時(shí) 間。
[0005] 圖1為系統(tǒng)控制器WDMA方式讀取NAND化ge數(shù)據(jù)的耗時(shí)分析。圖1中WK9K8G08U0M 型NAND作為測(cè)試對(duì)象,該型NAND的頁面結(jié)構(gòu)為2048Bytes數(shù)據(jù)區(qū)(Main da化)加64Bytes冗 余區(qū)(Spare data)共2112Bytes [9]。從時(shí)序圖的分析中可看出,一次DMA頁面讀取需要指令 00H、5次地址指令A(yù)cMress、指令30H、等待NAND內(nèi)部R/B信號(hào),然后觸發(fā)1/0端進(jìn)行2112次下 降沿采樣依次讀出全部頁面數(shù)據(jù)。其中指令耗時(shí)Tcad為I化s,等際指令忙耗時(shí)Twb為100ns, 控制器等R/B信號(hào)耗時(shí)Tr為20ys,下降沿采樣周期Trc為25ns。由此可統(tǒng)計(jì)出讀頁面所需時(shí)間
TPage
[0006] (1)
[0007]由公式(1)分析可知,讀取單位NAND頁面數(shù)據(jù)周期達(dá)72.984ys,相對(duì)于CPU指令周 期耗時(shí)很大,尤其對(duì)于高性能嵌入式處理器平臺(tái)。因此,讀外設(shè)數(shù)據(jù)對(duì)于系統(tǒng)啟動(dòng)時(shí)間來說 是一種較大的負(fù)擔(dān)。UBI加載時(shí)需要掃描的P邸越多,意味著加載時(shí)間越長。嵌入式平臺(tái)不斷 發(fā)展的同時(shí),NAND制程也越來越先進(jìn),從43nm發(fā)展到28nm工藝,從小容量的單層單元NAND (化C NAND巧Ij大容量的多層單元NAND(MLC NAND)逐漸在智能平臺(tái)中普及。系統(tǒng)UBI設(shè)備分 區(qū)也不斷擴(kuò)展,W容納更多的應(yīng)用程序和數(shù)據(jù),但存在的問題也逐漸顯現(xiàn)出來。UBI設(shè)備是 依靠掃描分區(qū)所有Block的頭信息完成加載的,設(shè)備分區(qū)的不斷擴(kuò)展導(dǎo)致需要掃描的Block 越來越多。由于系統(tǒng)讀取外設(shè)數(shù)據(jù)通常是耗時(shí)較大的操作,因此會(huì)出現(xiàn)設(shè)備開機(jī)時(shí)間變長。 運(yùn)種情況對(duì)于實(shí)時(shí)便捷性要求較高的嵌入式產(chǎn)品往往比較棘手,能直接影響用戶對(duì)設(shè)備的 使用體驗(yàn)。
【發(fā)明內(nèi)容】
[000引發(fā)明目的:針對(duì)上述現(xiàn)有技術(shù)存在的問題和不足,本發(fā)明的目的是提供一種嵌入 式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,對(duì)UBI設(shè)備架構(gòu)進(jìn)行研究并重新設(shè)計(jì)了其架構(gòu),提高系 統(tǒng)開機(jī)速度,W適應(yīng)大容量閃存的嵌入式系統(tǒng)發(fā)展。
[0009]技術(shù)方案:本發(fā)明公開了一種嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,包括UBI設(shè) 備初始化、UBI設(shè)備卸載流程設(shè)計(jì)和UBI設(shè)備加載流程設(shè)計(jì);UBI設(shè)備卸載流程設(shè)計(jì)包括W下 步驟:在系統(tǒng)分區(qū)格式化中在固定物理位置劃分出若干PEB塊的預(yù)留區(qū)域;對(duì)內(nèi)存中UBI管 理信息進(jìn)行壓縮并存入步驟1.1中的預(yù)留區(qū)域內(nèi);
[0010] UBI設(shè)備加載流程設(shè)計(jì)包括W下步驟:從預(yù)留區(qū)域內(nèi)讀出壓縮包,解壓即可建立其 UBI管理信息,實(shí)現(xiàn)加載;其中,預(yù)留區(qū)域采用Block循環(huán)隊(duì)列設(shè)計(jì)進(jìn)行管理。
[0011] 本發(fā)明的方法和現(xiàn)有的UBI加載掃描所有P邸的頭信息一樣,均可得到前一次設(shè)備 卸載時(shí)的最后信息記錄,由于壓縮包存儲(chǔ)的頁面數(shù)遠(yuǎn)小于現(xiàn)有掃描需要讀取的頁面數(shù),可 W減少大量系統(tǒng)度外設(shè)的DM中斷耗時(shí),進(jìn)而大幅度節(jié)約系統(tǒng)啟動(dòng)時(shí)間。
[0012] 由于NAND FLA細(xì)本身會(huì)存在Bad Block問題,W及操作中也可能意外產(chǎn)生Bad Block。因此,不能簡單地將UBI壓縮包固定在某物理Block。本發(fā)明使用Block循環(huán)隊(duì)列設(shè) 計(jì),將劃分的預(yù)留區(qū)域的Block統(tǒng)一管理起來,按照隊(duì)列的方式循環(huán)供數(shù)據(jù)存儲(chǔ)線程使用, 確保數(shù)據(jù)信息安全性和穩(wěn)定性。
[0013] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明所述的Block循環(huán)隊(duì)列設(shè)計(jì)W每個(gè)用于隊(duì) 列循環(huán)累加計(jì)數(shù)作為索引標(biāo)志位,定位存儲(chǔ)位置時(shí),讀出最大索引標(biāo)志位Block X,Block X 即為上一次壓縮數(shù)據(jù)的存儲(chǔ)位置,則隊(duì)列中的下一個(gè)Block X+1即為本次存儲(chǔ)位置,將標(biāo)志 值最大的索引標(biāo)志位Block X+1和壓縮包一起存入隊(duì)列完成壓縮包更新,可W確保預(yù)留區(qū) 域的Block被循環(huán)使用,提高使用壽命。
[0014] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明所述的索引標(biāo)志位為每個(gè)Block的化ge的 前四個(gè)4B^es。
[0015] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明所述的UBI設(shè)備加載流程設(shè)計(jì)還包括標(biāo)志 鎖機(jī)制,當(dāng)出現(xiàn)異常錯(cuò)誤導(dǎo)致加載異常,利用標(biāo)志鎖機(jī)制W采用現(xiàn)有加載方法進(jìn)行加載,異 常錯(cuò)誤包括系統(tǒng)在UBI設(shè)備卸載流程中出現(xiàn)錯(cuò)誤導(dǎo)致更新壓縮包信息失敗,或者系統(tǒng)運(yùn)行 過程中異常導(dǎo)致無法進(jìn)入U(xiǎn)BI設(shè)備卸載流程。
[0016] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明所述的標(biāo)志鎖機(jī)制包括表示隊(duì)列中沒有正 確的壓縮包可供讀取的鎖定狀態(tài)和表示Block X中數(shù)據(jù)為最新壓縮包的開鎖狀態(tài);
[0017]當(dāng)最大索引標(biāo)志位Block X+1中第一個(gè)化ge信息為預(yù)定義標(biāo)志鎖,表示壓縮包處 在鎖定狀態(tài),意味著當(dāng)前隊(duì)列中沒有前一次卸載所更新的UBI壓縮包可供讀取,系統(tǒng)退出加 載流程;當(dāng)最大索引標(biāo)志位Block X+1中第一個(gè)化ge信息中存儲(chǔ)最小UBI壓縮包編號(hào)信息, 表示壓縮包處于開鎖狀態(tài),意味著Block X中數(shù)據(jù)為最新壓縮包,系統(tǒng)進(jìn)入加載流程,加載 完成后鎖定UBI壓縮包隊(duì)列。UBI設(shè)備的前一次運(yùn)行中,如果出現(xiàn)異常錯(cuò)誤導(dǎo)致異常,利用標(biāo) 志鎖方法恢復(fù)傳統(tǒng)加載方法,防止系統(tǒng)啟動(dòng)崩潰。
[0018] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明加載完成后,向Block X+1中第一個(gè)化ge寫 入標(biāo)志鎖,UBI卸載時(shí)會(huì)將最新UBI壓縮包和UBI壓縮包信息編號(hào)更新到Block X+1中,即覆 蓋快速加載后的標(biāo)志鎖,將UBI隊(duì)列打開,為系統(tǒng)下次啟動(dòng)UBI加載進(jìn)行狀態(tài)設(shè)置,采用運(yùn)種 標(biāo)志鎖機(jī)制防止系統(tǒng)工作異常。
[0019] 作為本發(fā)明的進(jìn)一步優(yōu)化說明,本發(fā)明UBI設(shè)備初始化,在分區(qū)格式化中,對(duì)預(yù)留 區(qū)域的Block循環(huán)隊(duì)列進(jìn)行格式化處理,在隊(duì)列N個(gè)Block中依次遞增寫入U(xiǎn)BI壓縮包編號(hào)信 息,取值為從0到N-2,Block N-I寫入標(biāo)志鎖,分區(qū)格式化后,UBI壓縮包隊(duì)列初始化為鎖定 狀態(tài),第一次開機(jī)執(zhí)行常規(guī)掃描加載流程,通過卸載流程建立起第一個(gè)UBI壓縮包。
[0020] 有益效果:本發(fā)明與現(xiàn)有技術(shù)相比,具有W下優(yōu)點(diǎn):本發(fā)明通過采用Block循壞隊(duì) 列設(shè)計(jì)確保數(shù)據(jù)信息安全性和穩(wěn)定性,利用標(biāo)志鎖機(jī)制確保系統(tǒng)運(yùn)行的健壯性,防止系統(tǒng) 啟動(dòng)崩潰,采用本發(fā)明的設(shè)計(jì)能夠大大提高系統(tǒng)開機(jī)速度,W適應(yīng)大容量閃存的嵌入式系 統(tǒng)發(fā)展。
【附圖說明】
[0021] 圖1為本發(fā)明【背景技術(shù)】中DMA讀NAND頁面耗時(shí)分析示意圖;
[0022] 圖2為本發(fā)明的UBI設(shè)備運(yùn)行原理圖;
[0023] 圖3為本發(fā)明的UBI設(shè)備卸載流程圖;
[0024] 圖4為本發(fā)明的UBI設(shè)備加載流程圖;
[0025] 圖5為本發(fā)明的UBI設(shè)備初始化流程圖。
【具體實(shí)施方式】
[0026] W下結(jié)合具體的實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說明,但同時(shí)說明本發(fā)明的保護(hù)范圍并 不局限于本實(shí)施例的具體范圍,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出 創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0027] 現(xiàn)有技術(shù)中UBI讀取64Bytes頭信息需要讀整個(gè)頁面,頁面大部分?jǐn)?shù)據(jù)為OxFF,大 量的啟動(dòng)時(shí)間被耗費(fèi)在DMA讀外設(shè)操作上,因此,有必要對(duì)UBI進(jìn)行改進(jìn),W適應(yīng)系統(tǒng)平臺(tái)不 斷升級(jí)帶來的問題。本實(shí)施例中的UBI設(shè)備卸載時(shí)調(diào)用相關(guān)線程對(duì)UBI管理信息進(jìn)行壓縮處 理,更新至分區(qū)中指定的物理存儲(chǔ)區(qū)域,UBI再次啟動(dòng)加載時(shí)調(diào)用線程從該區(qū)域直接讀取壓 縮信息即可完成加載,從而節(jié)約大量系統(tǒng)開機(jī)讀外設(shè)時(shí)間。
[0028] 圖2為新架構(gòu)UBI設(shè)備原理圖。本實(shí)施的設(shè)計(jì)方案設(shè)計(jì)充分考慮系統(tǒng)運(yùn)行的健壯 性。
[0029] 在UBI設(shè)備中,系統(tǒng)分區(qū)格式化中在固定物理位置劃分出若干PEB塊的預(yù)留區(qū)域, 卸載時(shí),調(diào)用線程對(duì)內(nèi)存中UBI設(shè)備管理信息進(jìn)行壓縮,然后將壓縮包信息存儲(chǔ)進(jìn)預(yù)留區(qū) 域,系統(tǒng)啟動(dòng)UBI設(shè)備加載時(shí),調(diào)用相關(guān)線程從預(yù)留區(qū)域讀出壓縮包,直接解壓即可建立起 UBI管理信息,完成加載。該方法和傳統(tǒng)UBI加載掃描所有P邸的頭信息一樣,均可得到前一 次設(shè)備卸載時(shí)的最后信息記錄。但由于壓縮包存儲(chǔ)的頁面數(shù)遠(yuǎn)小于常規(guī)掃描需要讀取的頁 面數(shù),可W減少大量系統(tǒng)讀外設(shè)的DM中斷耗時(shí),進(jìn)而大幅節(jié)約系統(tǒng)啟動(dòng)時(shí)間。
[0030] 如圖3所示,設(shè)備卸載時(shí)先啟動(dòng)線程對(duì)UBI管理信息進(jìn)行打包壓縮處理,具體做法 為申請(qǐng)一塊連續(xù)內(nèi)存緩沖區(qū),將UBI管理信息依次拷入緩沖區(qū),然后使用壓縮算法對(duì)緩沖區(qū) 數(shù)據(jù)進(jìn)行壓縮處理,得到UBI信息壓縮包,存儲(chǔ)關(guān)機(jī)時(shí)UBI的最后信息。目前很多高端IC平臺(tái) 都自帶有支持高效壓縮算法的硬件控制器,基于該類平臺(tái)時(shí)可W使用硬件數(shù)據(jù)壓縮方式將 UBI信息盡可能地壓縮到較小格式。UBI分區(qū)中邏輯塊LEB的頭信息VID header和ECC header均為64字節(jié),通常只占用頁面的一小部分,在方案測(cè)試實(shí)驗(yàn)中,整個(gè)分區(qū)的管理信息 經(jīng)過壓縮處理后通??蒞存儲(chǔ)在一個(gè)陽B塊中。
[0031] UBI壓縮包制作好后,需要將其更新到預(yù)留物理存儲(chǔ)區(qū)域供下次啟動(dòng)使用。WUBI 壓縮包格式大小為一個(gè)PEBW內(nèi)為例,NAND FLA甜存儲(chǔ)塊Block有使用擦寫壽命(Program/ Erase 巧cle,P/E 切cles)問題,常規(guī)制程的化C NAND的P/E Cycles約60K~100K,MLC NAND約為3K~5K不等,Block隨著擦寫次數(shù)增加會(huì)產(chǎn)生位反轉(zhuǎn)(bit-flip)并逐漸增多導(dǎo)致 ECC無法糾正,同時(shí)NAND FLASH本身會(huì)存在Bad Block問題,W及操作中也可能意外產(chǎn)生Bad Block,運(yùn)些因素都會(huì)影響系統(tǒng)穩(wěn)定性。因此,不能簡單地將UBI壓縮包固定在某物理Block。 本實(shí)施例的UBI中使用Block循環(huán)隊(duì)列設(shè)計(jì),將劃分的預(yù)留區(qū)域Block統(tǒng)一管理起來,按照隊(duì) 列的方式循環(huán)供數(shù)據(jù)存儲(chǔ)線程使用,確保數(shù)據(jù)信息安全性和穩(wěn)定性。如圖3中Block循環(huán)隊(duì) 列工作流程設(shè)計(jì),預(yù)留區(qū)域使用Block循環(huán)隊(duì)列管理,每個(gè)預(yù)留Block的化ge的前四個(gè) 4Bytes作為索引標(biāo)志位,用于隊(duì)列的循環(huán)累加計(jì)數(shù)。UBI定位存儲(chǔ)位置時(shí),遍歷隊(duì)列,讀出預(yù) 留標(biāo)志位,標(biāo)志值最大的B10 C k X即為上一次壓縮數(shù)據(jù)的存儲(chǔ)位置,則隊(duì)列中的下一個(gè) Block X+1即為本次存儲(chǔ)位置,將標(biāo)志位的計(jì)數(shù)器加1和UBI壓縮包一起存入隊(duì)列,完成UBI 壓縮包更新,在遍歷隊(duì)列和更新壓縮包的過程中遇到Bad Block就跳過使用下一個(gè)。通過一 系列操作流程,使新UBI設(shè)備最大程度地克服NAND固有的Bad Block和P/E切Cles問題,確 保系統(tǒng)工作穩(wěn)定性。
[0032] 系統(tǒng)啟動(dòng)后,UBI設(shè)備分區(qū)開始執(zhí)行加載流程。如圖2中所示,UBI設(shè)備會(huì)首先啟動(dòng) 線程嘗試從預(yù)留區(qū)域?qū)ふ易钚耈BI壓縮包W實(shí)現(xiàn)快速加載。
[0033] UBI設(shè)備的前一次卸載操作中,如果預(yù)留區(qū)域出現(xiàn)大量Bad Block,則會(huì)導(dǎo)致定位 儲(chǔ)存位置出錯(cuò)W及更新壓縮包出錯(cuò)等問題,卸載流程失敗。另外,若出現(xiàn)嵌入式系統(tǒng)常見的 意外斷電情況,也無法執(zhí)行UBI卸載流程。運(yùn)類情況下預(yù)留區(qū)域均無最新UBI壓縮包供加載 讀取,本實(shí)施例的UBI架構(gòu)中使用標(biāo)志鎖設(shè)計(jì)W避免加載流程出錯(cuò)。圖4為UBI設(shè)備加載工作 流程設(shè)計(jì)。
[0034] 如圖4所示,UBI加載操作中首先啟動(dòng)新線程嘗試快速加載。系統(tǒng)從物理預(yù)留區(qū)域 尋找目標(biāo)UBI壓縮包,對(duì)Block循環(huán)隊(duì)列進(jìn)行遍歷,依次讀出Block中第一個(gè)化ge的前4B^es 存儲(chǔ)的壓縮包編號(hào)信息(UBI index)。若隊(duì)列中均為Bad Block,則預(yù)留區(qū)存儲(chǔ)塊無法使用, 視為極端情況,退出快速加載。遍歷完成后定位隊(duì)列中UBI index最大的Block X,接著檢查 緊鄰下一個(gè)無故障Block X+1作進(jìn)一步判斷:若Block X+1中存儲(chǔ)最小UBI index,表示UBI 壓縮包隊(duì)列處于開鎖狀態(tài),Block X中數(shù)據(jù)為最新壓縮包;若Block X+1中第一個(gè)化ge信息 為預(yù)定義標(biāo)志鎖,則表示UBI壓縮包隊(duì)列處于鎖定狀態(tài),意味著當(dāng)前隊(duì)列中沒有前一次卸載 所更新的UBI壓縮包可供讀取,推斷系統(tǒng)前一次UBI卸載更新壓縮包出錯(cuò),或者發(fā)生意外掉 電狀況,此時(shí)退出快速加載。針對(duì)UBI隊(duì)列開鎖狀態(tài),直接讀取Block X中UBI壓縮包,解壓數(shù) 據(jù)包建立起UBI信息結(jié)構(gòu),實(shí)現(xiàn)快速加載,然后在退出前Lock UBI隊(duì)列:向Block X+1中第一 個(gè)化ge寫入標(biāo)志鎖。同時(shí),圖3分析中,UBI卸載時(shí)會(huì)將最新UBI壓縮包和UBI壓縮包信息編號(hào) 更新到Block X+1中,即覆蓋快速加載后的標(biāo)志鎖,將UBI隊(duì)列打開,為系統(tǒng)下次啟動(dòng)UBI加 載進(jìn)行狀態(tài)設(shè)置。采用運(yùn)種標(biāo)志鎖機(jī)制防止系統(tǒng)工作異常。
[0035] 本實(shí)施例的UBI加載流程中出現(xiàn)退出快速加載時(shí),則快速加載失敗,關(guān)閉新線程重 新走常規(guī)UBI掃描加載流程。UBI分區(qū)格式化中,對(duì)Block循環(huán)隊(duì)列進(jìn)行格式化處理,在隊(duì)列N 個(gè)Block中依次遞增寫入U(xiǎn)BI index,取值為從0到N-2,Block N-I寫入標(biāo)志鎖。分區(qū)格式化 后,UBI壓縮包隊(duì)列初始化為鎖定狀態(tài),第一次開機(jī)會(huì)執(zhí)行常規(guī)掃描加載流程,通過卸載流 程建立起第一個(gè)UBI壓縮包,為后續(xù)運(yùn)行提供可用信息。圖5為設(shè)備初始化工作流程圖。
[0036] 基于本實(shí)施例的UBI設(shè)備的分區(qū)加載時(shí)間普遍縮短約50%左右。設(shè)計(jì)中采用UBI隊(duì) 列標(biāo)志鎖機(jī)制,測(cè)試中加入意外斷電操作,重啟系統(tǒng)可W按照原始開機(jī)速率正常啟動(dòng)。針對(duì) Bad Block問題,現(xiàn)聯(lián)中使用指令操作人為將Block循環(huán)隊(duì)列中Block全部標(biāo)記為Bad,重啟 系統(tǒng)后同樣按照原始開機(jī)速率正常啟動(dòng)。系統(tǒng)健壯較性表現(xiàn)較好。當(dāng)系統(tǒng)平臺(tái)中大容量分 區(qū)較多時(shí),本實(shí)施例的UBI設(shè)備可W節(jié)省大量系統(tǒng)啟動(dòng)時(shí)間,表現(xiàn)十分可觀。本實(shí)施例的UBI 設(shè)計(jì)方案在設(shè)備分區(qū)加載速度上相對(duì)原始UBI設(shè)備具備很大優(yōu)勢(shì)。
【主權(quán)項(xiàng)】
1. 嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:包括UBI設(shè)備初始化、UBI設(shè)備 卸載流程設(shè)計(jì)和UBI設(shè)備加載流程設(shè)計(jì); 所述UBI設(shè)備卸載流程設(shè)計(jì)包括以下步驟: 1.1、 在系統(tǒng)分區(qū)格式化中在固定物理位置劃分出若干PEB塊的預(yù)留區(qū)域; 1.2、 對(duì)內(nèi)存中UBI管理信息進(jìn)行壓縮并存入步驟1.1中的預(yù)留區(qū)域內(nèi); 所述UBI設(shè)備加載流程設(shè)計(jì)包括以下步驟: 2.1、從預(yù)留區(qū)域內(nèi)讀出壓縮包,解壓建立其UBI管理信息; 其中,所述預(yù)留區(qū)域采用Block循環(huán)隊(duì)列設(shè)計(jì)進(jìn)行管理。2. 根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:所述 Block循環(huán)隊(duì)列設(shè)計(jì)以每個(gè)用于隊(duì)列循環(huán)累加計(jì)數(shù)作為索引標(biāo)志位,定位存儲(chǔ)位置時(shí),讀出 最大索引標(biāo)志位Block X,將Block X+1和壓縮包一起存入隊(duì)列完成壓縮包更新。3. 根據(jù)權(quán)利要求2所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:所述索 引標(biāo)志位為每個(gè)Block的Page的前四個(gè)4Bytes。4. 根據(jù)權(quán)利要求1或3所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:所述 UBI設(shè)備加載流程設(shè)計(jì)包括標(biāo)志鎖機(jī)制,當(dāng)出現(xiàn)異常錯(cuò)誤導(dǎo)致加載異常,利用標(biāo)志鎖機(jī)制以 采用現(xiàn)有加載方法進(jìn)行加載,異常錯(cuò)誤包括系統(tǒng)在UBI設(shè)備卸載流程中出現(xiàn)錯(cuò)誤導(dǎo)致更新 壓縮包信息失敗,或者系統(tǒng)運(yùn)行過程中異常導(dǎo)致無法進(jìn)入U(xiǎn)BI設(shè)備卸載流程。5. 根據(jù)權(quán)利要求4所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:所述標(biāo) 志鎖機(jī)制包括表示隊(duì)列中沒有正確的壓縮包可供讀取的鎖定狀態(tài)和表示Block X中數(shù)據(jù)為 最新壓縮包的開鎖狀態(tài); 當(dāng)最大索引標(biāo)志位Block X+1中第一個(gè)Page信息為預(yù)定義標(biāo)志鎖,表示壓縮包處在鎖 定狀態(tài),系統(tǒng)退出加載流程; 當(dāng)最大索引標(biāo)志位Block X+1中第一個(gè)Page信息中存儲(chǔ)最小壓縮包編號(hào)信息,表示壓 縮包處于開鎖狀態(tài),系統(tǒng)進(jìn)入加載流程。6. 根據(jù)權(quán)利要求5所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:加載完 成后,向Block X+1中第一個(gè)Page寫入標(biāo)志鎖。7. 根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)UBI設(shè)備分區(qū)快速加載方法,其特征在于:所述UBI 設(shè)備初始化,在分區(qū)格式化中,對(duì)預(yù)留區(qū)域的Block循環(huán)隊(duì)列進(jìn)行格式化處理,在隊(duì)列N個(gè) Block中依次遞增寫入U(xiǎn)BI壓縮包編號(hào)信息,取值為從0到N-2,Block N-I寫入標(biāo)志鎖,分區(qū) 格式化后,UBI壓縮包隊(duì)列初始化為鎖定狀態(tài),第一次開機(jī)執(zhí)行常規(guī)掃描加載流程,通過卸 載流程建立起第一個(gè)UBI壓縮包。
【文檔編號(hào)】G06F9/44GK105955722SQ201610251784
【公開日】2016年9月21日
【申請(qǐng)日】2016年4月20日
【發(fā)明人】衛(wèi)兵, 郭玉堂, 謝飛, 潘潔珠, 張忠祥, 周元元, 方璐
【申請(qǐng)人】合肥師范學(xué)院