欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置及其方法

文檔序號(hào):6525328閱讀:272來(lái)源:國(guó)知局
基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置及其方法
【專利摘要】本發(fā)明公開(kāi)一種基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置及其方法,包括:版本升級(jí)模塊,將預(yù)存儲(chǔ)在動(dòng)態(tài)分區(qū)的各分區(qū)的二進(jìn)制執(zhí)行部件按序組裝合并成一個(gè)文件加入版本頭信息;可燒錄版本模塊,將Nand閃存中實(shí)際存儲(chǔ)的N個(gè)分區(qū)的順序依次進(jìn)行燒錄版本組裝;燒錄模塊:需要燒錄版本文件到Nand閃存時(shí),將帶ECC算法的可燒錄版本燒錄到Nand閃存中;動(dòng)態(tài)分區(qū)解析模塊:用于在引導(dǎo)程序啟動(dòng)時(shí)搜索版本頭,根據(jù)版本頭記錄的信息和Nand閃存依次搜索到的塊狀態(tài)構(gòu)造出動(dòng)態(tài)分區(qū)表,內(nèi)核通過(guò)引導(dǎo)程序傳遞環(huán)境變量的方式或通過(guò)將動(dòng)態(tài)分區(qū)表共享到同一段未使用的內(nèi)存的方式獲取來(lái)構(gòu)造內(nèi)核分區(qū)表。采用本發(fā)明,能夠在解決壞塊的同時(shí)減少冗余塊,提高存儲(chǔ)介質(zhì)的利用率。
【專利說(shuō)明】基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置及其方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù),尤其涉及一種基于Nand閃存(Flash)的動(dòng)態(tài)分區(qū)搜索裝置及其方法,屬于將Nand Flash作為存儲(chǔ)介質(zhì)的Unix/Linux終端產(chǎn)品使用燒錄器燒錄二進(jìn)制版本文件時(shí),在出現(xiàn)壞塊(Bad Block)的情況下系統(tǒng)無(wú)法正常運(yùn)行的防護(hù)機(jī)制。
【背景技術(shù)】
[0002]隨著用戶對(duì)終端產(chǎn)品所具備的功能需求越來(lái)越多,其對(duì)應(yīng)的軟件版本也成遞增的趨勢(shì)。作為大多數(shù)基于Linux操作系統(tǒng)的終端設(shè)備,傳統(tǒng)的存儲(chǔ)方式都是以Nor Flash作為存儲(chǔ)介質(zhì)。但由于Nor Flash容量較小,或者成本太高等原因已經(jīng)慢慢變得不適用起來(lái)。與此相反,以Nand Flash作為存貯介質(zhì)由于容量大、讀寫(xiě)速度快、成本低等優(yōu)勢(shì)開(kāi)始成為家庭網(wǎng)關(guān),機(jī)頂盒,監(jiān)控前端產(chǎn)品等終端設(shè)備的首選存貯介質(zhì)。
[0003]在大規(guī)模產(chǎn)品批量出廠的過(guò)程中,為了提高效率,一般使用專門(mén)的燒錄器將需要燒錄的數(shù)據(jù)寫(xiě)入Nand Flash中,因此需要為燒錄器提供專門(mén)的燒錄文件,燒錄文件的好塊
直接影響著產(chǎn)品量產(chǎn)的效率和良率。
[0004]現(xiàn)有技術(shù)中,一般有兩種方法生成燒錄文件。一種簡(jiǎn)單的方法是先通過(guò)常規(guī)的方式,借助網(wǎng)絡(luò),串口或USB等方式完成一臺(tái)產(chǎn)品的升級(jí),再?gòu)纳?jí)好的產(chǎn)品中將Nand Flash中的所有數(shù)據(jù)讀出來(lái),生成燒錄版本文件。另一種方法是將編譯生成的各二進(jìn)制文件按照他們?cè)贜and Flash上實(shí)際存儲(chǔ)的分區(qū)位置進(jìn)行組裝合并,未達(dá)到實(shí)際分區(qū)大小的進(jìn)行OxFF填充,最后生成燒錄版本文件。
[0005]Nand Flash的特性決定了在出廠時(shí)或者在使用過(guò)程中都有可能產(chǎn)生壞塊。如果燒錄器在燒錄之前Nand Flash已產(chǎn)生了壞塊,或者在燒錄過(guò)程中產(chǎn)生了壞塊,燒錄器將二進(jìn)制燒錄版本文件全部燒錄到Flash上后,Nand Flash上實(shí)際存儲(chǔ)的分區(qū)內(nèi)容將和原始規(guī)劃的分區(qū)內(nèi)容將產(chǎn)生相應(yīng)的偏移,如圖1所示。而Linux終端設(shè)備的系統(tǒng)啟動(dòng)和文件系統(tǒng)的掛載都是按照分區(qū)的方式進(jìn)行的,那么內(nèi)核或文件系統(tǒng)可能就面臨無(wú)法正常啟動(dòng)的問(wèn)題。
[0006]目前,很多廠家為了避免由于壞塊原因?qū)е孪到y(tǒng)無(wú)法啟動(dòng)問(wèn)題,比較普遍使用的一種方法是將uboot引導(dǎo)程序通過(guò)燒錄器或其他方法先燒錄到Nand Flash中,然后通過(guò)uboot引導(dǎo)程序以軟件的方式下載燒錄其他的部分,如內(nèi)核,文件系統(tǒng)等。這種方法雖然能夠避免由于壞塊的原因?qū)е孪到y(tǒng)起不來(lái)的問(wèn)題,但生產(chǎn)效率低下。

【發(fā)明內(nèi)容】

[0007]有鑒于此,本發(fā)明的主要目的在于提供一種基于Nand Flash的動(dòng)態(tài)分區(qū)搜索裝置及其方法,用以解決現(xiàn)有技術(shù)不能實(shí)現(xiàn)簡(jiǎn)單、高效的燒錄Nand Flash版本文件,燒錄的版本文件可啟動(dòng)概率低的問(wèn)題。以及用于解決為規(guī)避由于Nand Flash存儲(chǔ)介質(zhì)存在壞塊的特性必須為每個(gè)分區(qū)預(yù)留一定數(shù)量的多余的冗余塊而引起的存儲(chǔ)空間浪費(fèi)的問(wèn)題。
[0008]為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
一種基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,該裝置包括版本升級(jí)模塊、可燒錄版本模塊、燒錄模塊以及動(dòng)態(tài)分區(qū)解析模塊;其中:
版本升級(jí)模塊,用于將預(yù)存儲(chǔ)在動(dòng)態(tài)分區(qū)的各分區(qū)的二進(jìn)制執(zhí)行部件按序組裝合并成一個(gè)文件,并加入版本頭信息部件;
可燒錄版本模塊,用于將Nand閃存中實(shí)際存儲(chǔ)的N個(gè)分區(qū)的順序依次進(jìn)行燒錄版本組裝;由N-M個(gè)靜態(tài)分區(qū)預(yù)存儲(chǔ)的二進(jìn)制執(zhí)行部件和版本升級(jí)模塊進(jìn)行組裝合并;
燒錄模塊:用于當(dāng)需要燒錄版本文件到Nand閃存中時(shí),將所述帶ECC算法的可燒錄版本提供給燒錄器,由所述燒錄器將所述可燒錄版本文件燒錄到Nand閃存中;
動(dòng)態(tài)分區(qū)解析模塊:用于在引導(dǎo)程序啟動(dòng)時(shí)搜索版本頭,根據(jù)版本頭記錄的信息和Nand閃存依次搜索到的塊狀態(tài)構(gòu)造出動(dòng)態(tài)分區(qū)表,內(nèi)核通過(guò)引導(dǎo)程序傳遞環(huán)境變量的方式或者通過(guò)將動(dòng)態(tài)分區(qū)表共享到同一段未使用的內(nèi)存的方式獲取來(lái)構(gòu)造內(nèi)核分區(qū)表。
[0009]其中,所述的版本升級(jí)模塊,用于按照塊對(duì)齊的方式記錄各動(dòng)態(tài)分區(qū)存儲(chǔ)文件的實(shí)際大小。
[0010]還用于在Nand閃存中的引導(dǎo)程序能正常啟動(dòng)的情況下,將該版本升級(jí)文件用于通過(guò)軟件的方式進(jìn)行版本的在線升級(jí)更新。
[0011]在所述可燒錄版本模塊中,如果N-M個(gè)靜態(tài)分區(qū)預(yù)存儲(chǔ)的二進(jìn)制執(zhí)行部件未達(dá)到該分區(qū)大小,則所述未達(dá)到的部分需要按OxFF進(jìn)行填充。
[0012]在所述可燒錄版本模塊中,各部件組裝合并完畢,再根據(jù)具體的硬件電路加入相應(yīng)ECC算法進(jìn)行填充。
[0013]—種基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,該方法包括:
A、獲取原始分區(qū)信息,所述原始分區(qū)信息包括N個(gè)分區(qū)及每個(gè)所述分區(qū)的空間大小,其中N為正整數(shù);
B、將需要運(yùn)用動(dòng)態(tài)構(gòu)造分區(qū)搜索方法的分區(qū)數(shù)M合并成一個(gè)大的靜態(tài)分區(qū)C;其中M為正整數(shù),且1〈M〈N ;
C、根據(jù)分區(qū)C的起始地址和分區(qū)大小,通過(guò)從分區(qū)C的起始地址開(kāi)始搜索特定的軟件版本頭信息,并根據(jù)版本頭信息和塊狀態(tài)確定各分區(qū)起始地址和動(dòng)態(tài)分區(qū)大小;通過(guò)版本頭中記錄的各分區(qū)存儲(chǔ)的實(shí)際二進(jìn)制文件大小信息和檢測(cè)C分區(qū)的塊狀態(tài),生成M個(gè)分區(qū)的動(dòng)態(tài)分區(qū)表;
D、將所述的動(dòng)態(tài)分區(qū)表通過(guò)環(huán)境變量的方式或?qū)?dòng)態(tài)分區(qū)表共享同一段未使用的內(nèi)存的方式傳遞給內(nèi)核構(gòu)造內(nèi)核分區(qū)表信息。
[0014]其中:步驟C所述根據(jù)版本頭信息和塊狀態(tài)確定各分區(qū)起始地址和動(dòng)態(tài)分區(qū)大小的過(guò)程,具體包括:
Cl、從所述的C分區(qū)的起始地址開(kāi)始搜索特定的軟件版本頭信息,當(dāng)檢測(cè)到當(dāng)前的塊狀態(tài)為壞塊,則將壞塊加I;當(dāng)檢測(cè)到當(dāng)前的塊狀態(tài)為好,則讀取該塊特定軟件版本頭結(jié)構(gòu)大小的數(shù)據(jù)內(nèi)容判斷是否為版本頭;如果該塊存儲(chǔ)的不是版本頭,則繼續(xù)依次檢測(cè)下一塊的狀態(tài);如果是版本頭,則根據(jù)版本頭的信息獲取各分區(qū)實(shí)際存儲(chǔ)的二進(jìn)制文件大小的相
關(guān)信息;
C2、當(dāng)搜到的是存儲(chǔ)版本頭信息的塊時(shí),繼續(xù)檢測(cè)下一塊的狀態(tài),如果是壞塊,則將壞塊加I ;當(dāng)檢測(cè)到的塊狀態(tài)為好,則此塊存儲(chǔ)的就是M分區(qū)里面的第I個(gè)動(dòng)態(tài)分區(qū)的起始地址;根據(jù)版本頭信息記錄的該分區(qū)的大小和依次搜索到的塊狀態(tài)即可確定第I個(gè)動(dòng)態(tài)分區(qū)的終止地址。
[0015]該方法進(jìn)一步包括:在改變內(nèi)核原有構(gòu)造內(nèi)核分區(qū)表的方式時(shí),引導(dǎo)程序?qū)?dòng)態(tài)分區(qū)表通過(guò)環(huán)境變量的方式或?qū)?dòng)態(tài)分區(qū)表共享同一段未使用的內(nèi)存的方式傳遞給內(nèi)核構(gòu)造內(nèi)核分區(qū)表信息。
[0016]所述依據(jù)所述版本頭信息,按第i個(gè)動(dòng)態(tài)分區(qū)的起始地址和版本頭信息記錄的第i個(gè)動(dòng)態(tài)分區(qū)實(shí)際存儲(chǔ)文件大小的塊數(shù)能夠確定第i+1個(gè)動(dòng)態(tài)分區(qū)的起始地址,其中l(wèi)〈=i〈=M ;具體為:第i+1個(gè)動(dòng)態(tài)分區(qū)的起始地址=第i個(gè)動(dòng)態(tài)分區(qū)的起始地址+ (第i個(gè)動(dòng)態(tài)分區(qū)壞塊數(shù)+第i個(gè)動(dòng)態(tài)分 區(qū)存儲(chǔ)的實(shí)際文件內(nèi)容所占的塊數(shù))*塊大小。
[0017]所述執(zhí)行動(dòng)態(tài)分區(qū)搜索之前,還包括:
生成帶特定版本頭信息的升級(jí)版本文件;所述升級(jí)版本文件由版本頭結(jié)構(gòu)體和需要構(gòu)造M個(gè)動(dòng)態(tài)分區(qū)的所對(duì)應(yīng)存儲(chǔ)的二進(jìn)制執(zhí)行文件組成;依次讀取編譯生成的預(yù)存儲(chǔ)在第i(l〈=i〈=M)個(gè)動(dòng)態(tài)分區(qū)二進(jìn)制文件,并按照實(shí)際的分區(qū)順序進(jìn)行組裝合并,并將各分區(qū)實(shí)際存儲(chǔ)的文件大小記錄到版本頭對(duì)應(yīng)的結(jié)構(gòu)體中,各部件按照塊的方式進(jìn)行對(duì)齊。
[0018]在所述執(zhí)行動(dòng)態(tài)分區(qū)搜索之前,還包括:將動(dòng)態(tài)分區(qū)構(gòu)造搜索算法放在引導(dǎo)程序中執(zhí)行,并在引導(dǎo)程序引導(dǎo)內(nèi)核之前執(zhí)行;并且在所述Nand閃存的第一個(gè)分區(qū)的第一個(gè)塊寫(xiě)入引導(dǎo)程序。
[0019]本發(fā)明所提供的基于Nand閃存(Flash)的動(dòng)態(tài)分區(qū)搜索裝置及其方法,具有以下優(yōu)點(diǎn):
本發(fā)明的裝置,采用通過(guò)軟件的方式將要單獨(dú)在線升級(jí)燒錄到各分區(qū)的二進(jìn)制文件進(jìn)行創(chuàng)造性的組裝合并成可以直接使用Nand Flash燒錄器直接燒寫(xiě)的燒錄版本文件;在引導(dǎo)程序引導(dǎo)內(nèi)核代碼之前加入動(dòng)態(tài)分區(qū)搜索算法,可在每次系統(tǒng)時(shí)實(shí)時(shí)構(gòu)造動(dòng)態(tài)分區(qū)表;每個(gè)動(dòng)態(tài)分區(qū)的大小為實(shí)際存儲(chǔ)的二進(jìn)制文件大小,不需要預(yù)留冗余的塊,節(jié)省了 NandFlash的存儲(chǔ)空間,提高了存儲(chǔ)的利用率。而且不需要使用傳統(tǒng)的比較繁瑣的流程就可以實(shí)現(xiàn)Nand Flash版本文件的燒錄,實(shí)現(xiàn)簡(jiǎn)單,且適用于產(chǎn)品的批量生產(chǎn)應(yīng)用。加快了產(chǎn)品的出貨速度,提高了產(chǎn)線的生產(chǎn)效率,降低了生產(chǎn)的人力成本。由于使用了實(shí)時(shí)的動(dòng)態(tài)分區(qū)構(gòu)造算法,燒錄的版本文件可啟動(dòng)概率為100%,不會(huì)出現(xiàn)系統(tǒng)無(wú)法正常啟動(dòng)的問(wèn)題。
【專利附圖】

【附圖說(shuō)明】
[0020]圖1為使用現(xiàn)有技術(shù)通過(guò)燒錄器燒錄版本文件的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)裝置的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)搜索算法的實(shí)現(xiàn)流程圖;
圖4為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)裝置的燒錄版本結(jié)構(gòu)以及在NandFlash上的存儲(chǔ)結(jié)構(gòu)示意圖。
[0021]【主要部件符號(hào)說(shuō)明】
401:uboot 區(qū)
402:用戶配置區(qū)
403:firware 區(qū)
404:版本頭
405:內(nèi)核 406:文件系統(tǒng)
407:f irware文件系統(tǒng)
408:burnrom 版本
409:NAND Flash 物理區(qū)域。
【具體實(shí)施方式】
[0022]下面結(jié)合附圖及本發(fā)明的實(shí)施例對(duì)本發(fā)明的動(dòng)態(tài)分區(qū)搜索裝置及其方法作進(jìn)一步詳細(xì)的說(shuō)明。
[0023]現(xiàn)有技術(shù)中無(wú)法根據(jù)實(shí)際各分區(qū)存儲(chǔ)的文件大小來(lái)進(jìn)行構(gòu)造動(dòng)態(tài)分區(qū),每個(gè)分區(qū)都會(huì)預(yù)留一定的冗余塊作為壞塊損耗用。在大部分情況下這些冗余塊基本都在空閑狀態(tài),浪費(fèi)了大量的存儲(chǔ)資源。而且現(xiàn)有技術(shù)中使用燒錄器燒錄的版本文件經(jīng)常由于Nand Flash存在壞塊的情況導(dǎo)致系統(tǒng)可啟動(dòng)的概率很低。
[0024]本發(fā)明提供的基于Nand Flash的動(dòng)態(tài)分區(qū)搜索方法,能夠根據(jù)存儲(chǔ)在Nand Flash芯片文件中的實(shí)際大小來(lái)構(gòu)造動(dòng)態(tài)分區(qū),每個(gè)構(gòu)造的動(dòng)態(tài)分區(qū)大小為實(shí)際的存儲(chǔ)二進(jìn)制文件大小。而且不需要將動(dòng)態(tài)分區(qū)信息存儲(chǔ)到相關(guān)的存儲(chǔ)介質(zhì)上,直接通過(guò)引導(dǎo)程序的環(huán)境變量的方式或共享內(nèi)存的方式傳遞給內(nèi)核來(lái)構(gòu)造內(nèi)核的動(dòng)態(tài)分區(qū)信息。
[0025]圖4為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)裝置的燒錄版本結(jié)構(gòu)以及在Nand Flash上的存儲(chǔ)結(jié)構(gòu)示意圖。本發(fā)明以單版本的結(jié)構(gòu)為例對(duì)所述的搜索方法進(jìn)行說(shuō)明。
[0026]如圖4所示,為一個(gè)單版本Linux系統(tǒng)在Nand Flash上的物理存儲(chǔ)結(jié)構(gòu)。該系統(tǒng)的Nand Flash物理區(qū)域409本來(lái)由uboot區(qū)401、用戶配置區(qū)402、內(nèi)核405和文件系統(tǒng)406組成。
[0027]現(xiàn)將原始的內(nèi)核405和文件系統(tǒng)406的分區(qū)合并成一個(gè)靜態(tài)分區(qū)fireware區(qū)403。其目的之一是為了不用從存儲(chǔ)介質(zhì)的第一塊開(kāi)始搜索版本頭信息,能夠節(jié)省分區(qū)搜索的時(shí)間。目的二是為了便于firmware版本文件407的在線軟件升級(jí)。
[0028]修改uboot引導(dǎo)代碼,可以將內(nèi)核區(qū)和文件系統(tǒng)區(qū)合并成一個(gè)大的靜態(tài)分區(qū),并增加基于合并的靜態(tài)分區(qū)構(gòu)造動(dòng)態(tài)分區(qū)的搜索算法。
[0029]圖3為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)搜索算法的實(shí)現(xiàn)流程圖。如圖3所示,該步驟包括:
步驟301:初始化變量。內(nèi)核起始之前的壞塊數(shù)bad_block=0,內(nèi)核起始到內(nèi)核終止之間的壞塊數(shù)kbad_block=0,內(nèi)核終止到文件系統(tǒng)起始之間的壞塊數(shù)fbad_block=0 ;好塊:block=。;
步驟302:從靜態(tài)分區(qū)fireware區(qū)403的第0塊開(kāi)始搜索。靜態(tài)分區(qū)的大小是由內(nèi)核405,文件系統(tǒng)406和冗余塊決定的。冗余塊的大小需要根據(jù)芯片廠家的建議百分比值來(lái)設(shè)置。
[0030]步驟303:判斷是否為壞塊。如果是壞塊,bad_block++,搜索下一塊并重新回到步驟 303。
[0031]步驟304:判斷是否是版本頭,如果不是,block++,回到步驟303。
[0032]步驟305:根據(jù)版本頭信息獲取內(nèi)核和文件系統(tǒng)的大小。[0033]步驟306:搜索下一塊,判斷是否為壞塊,如果是壞塊,bad_block++,搜索下一塊并重新回到步驟306。
[0034]步驟307:找到kernel的起始地址,繼續(xù)搜索下一塊。
[0035]步驟308:判斷是否為壞塊,如果是壞塊,kbad_block++ ;搜索下一塊并回到步驟308。
[0036]步驟309:判斷所搜索的塊是否在內(nèi)核區(qū),如果一kernel_blocks ! =1說(shuō)明所在塊還是屬于內(nèi)核區(qū),繼續(xù)搜索下一塊,回到步驟308。
[0037]步驟310:得到內(nèi)核區(qū)的終止塊地址。 從而就可以計(jì)算出動(dòng)態(tài)內(nèi)核分區(qū)的起止區(qū)間。
[0038]步驟311:搜索下一塊,判斷是否為壞塊,如果是壞塊,fbad_block++;跳轉(zhuǎn)到步驟311。
[0039]步驟312:得到文件系統(tǒng)的起始地址。可以將靜態(tài)分區(qū)剩余的塊全部作為文件系統(tǒng)區(qū)。該方法的好處是可以減少分區(qū)數(shù)量。不用將剩余的塊作為一個(gè)獨(dú)立的分區(qū)進(jìn)行設(shè)置。同時(shí)提高了搜索速度,得到文件系統(tǒng)的起始地址后就不用搜索了。此外還可以提高Flash的利用率。
[0040]步驟313:將Linux內(nèi)核靜態(tài)的分區(qū)方式修改為動(dòng)態(tài)的分區(qū)方式,即采用uboot中動(dòng)態(tài)搜索方法計(jì)算出的新的分區(qū)表通過(guò)環(huán)境變量的方式或通過(guò)將動(dòng)態(tài)分區(qū)表共享到同一段未使用的內(nèi)存中進(jìn)行獲取。此時(shí)內(nèi)核啟動(dòng)的分區(qū)信息就是最新的使用動(dòng)態(tài)分區(qū)搜索算法的實(shí)時(shí)分區(qū)信息。
[0041]為了實(shí)現(xiàn)步驟301~步驟313所述的動(dòng)態(tài)分區(qū)搜索方法,合并后的靜態(tài)分區(qū)必須存儲(chǔ)如圖4所示的firmware版本文件407。該升級(jí)版本文件是由版本頭404, Linux內(nèi)核405、根文件系統(tǒng)40以塊大小對(duì)齊的方式進(jìn)行組裝合并而成。版本頭404用于識(shí)別firmware版本文件407和記錄Linux內(nèi)核405、根文件系統(tǒng)406等二進(jìn)制文件大小等信息的數(shù)據(jù)結(jié)構(gòu)。
[0042]對(duì)于需要構(gòu)造N個(gè)動(dòng)態(tài)分區(qū)的實(shí)施例時(shí),N>=2,前N-1個(gè)分區(qū)的搜索過(guò)程按步驟302~步驟312的順序進(jìn)行。第i+1個(gè)分區(qū)的起始地址=第i個(gè)分區(qū)的起始地址+(第i個(gè)分區(qū)壞塊數(shù)+第i個(gè)分區(qū)存儲(chǔ)的實(shí)際文件內(nèi)容所占的塊數(shù))*塊大小。其中,動(dòng)態(tài)分區(qū)之前的靜態(tài)分區(qū)個(gè)數(shù)<i〈N+動(dòng)態(tài)分區(qū)之前的靜態(tài)分區(qū)個(gè)數(shù)。當(dāng)搜索到最后一個(gè)動(dòng)態(tài)分區(qū)的起始地址時(shí),就可以把剩下的存儲(chǔ)空間作為該動(dòng)態(tài)分區(qū)的大小。
[0043]圖2為本發(fā)明實(shí)施例基于Nand Flash的動(dòng)態(tài)分區(qū)的裝置結(jié)構(gòu)示意圖。如圖2所示,該基于Nand Flash的動(dòng)態(tài)分區(qū)的裝置,主要包括:版本升級(jí)模塊201,可燒錄版本模塊202,燒錄模塊203及動(dòng)態(tài)分區(qū)解析模塊204。其中:
版本升級(jí)模塊201:用于將預(yù)存儲(chǔ)在動(dòng)態(tài)各分區(qū)的二進(jìn)制執(zhí)行部件按序組裝合并成一個(gè)文件,并加入版本頭信息部件;還用于記錄各動(dòng)態(tài)分區(qū)存儲(chǔ)文件的實(shí)際大小。并且各部件按照塊對(duì)齊的方式進(jìn)行。不需要進(jìn)行校驗(yàn)和糾錯(cuò)(ECC)算法進(jìn)行填充。所述模塊的一個(gè)作用是可以方便可燒錄版本的制作,另一個(gè)作用是可用來(lái)作為軟件的在線升級(jí)版本文件。
[0044]可燒錄版本模塊202:用于將Nand存儲(chǔ)介質(zhì)上實(shí)際存儲(chǔ)的N個(gè)分區(qū)的順序依次進(jìn)行燒錄版本組裝。如圖4所示,burnrom版本408是由uboot 二進(jìn)制文件、用戶配置文件、fireware版本407組裝合并而成。其中,fireware版本407文件是由版本頭、內(nèi)核和文件系統(tǒng)組裝合并而成。如果uboot 二進(jìn)制文件的大小未達(dá)到uboot區(qū)401的大小時(shí),需要進(jìn)行OxFF進(jìn)行填充,用戶配置需要使用OxFF填充用戶配置區(qū)402的區(qū)域大小。fireware版本407組裝版本頭404,內(nèi)核405和文件系統(tǒng)406時(shí)需要進(jìn)行塊對(duì)齊,大小未達(dá)到的部分使用OxFF進(jìn)行填充。
[0045]這里,根據(jù)不同的硬件設(shè)計(jì)方案,Nand Flash所采用的ECC糾錯(cuò)編碼方式可能有所不同,確定自己所采用的ECC編碼方式后,根據(jù)芯片廠家提供的ECC算法,對(duì)上面組裝成的燒錄版本文件burnrom版本408加入ECC算法進(jìn)行相應(yīng)的填充處理。
[0046]燒錄模塊203:用于當(dāng)需要燒錄版本文件到Nand Flash芯片中時(shí),將所述帶ECC算法的可燒錄版本burnrom版本408提供給燒錄器,由所述燒錄器將所述可燒錄版本文件燒錄到Nand閃存芯片中。
[0047]動(dòng)態(tài)分區(qū)解析模塊204:用于在引導(dǎo)程序啟動(dòng)時(shí)搜索版本頭,根據(jù)版本頭信息和Nand閃存的塊狀態(tài)構(gòu)造出動(dòng)態(tài)分區(qū)表,并向動(dòng)態(tài)分區(qū)表通過(guò)環(huán)境變量的方式或?qū)?dòng)態(tài)分區(qū)表共享同一段未使用的內(nèi)存的方式傳遞給內(nèi)核構(gòu)造內(nèi)核分區(qū)表。
[0048]對(duì)于雙版本、備份版本等存儲(chǔ)結(jié)構(gòu)的應(yīng)用場(chǎng)合,本發(fā)明的上述搜索方法和裝置也同樣適用。
[0049]本發(fā)明實(shí)施例提供的上述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置及其方法,適用于各種支持Nand閃存的燒錄器。應(yīng)用該搜索方法可以減少Nand存儲(chǔ)介質(zhì)預(yù)留的冗余塊,提高Nand存儲(chǔ)介質(zhì)的存儲(chǔ)空間利用率。同時(shí),運(yùn)用上述方法和裝置,能夠改變生產(chǎn)線原有的生產(chǎn)方式,通過(guò)使用燒錄器直接燒錄可燒錄版本文件,能夠簡(jiǎn)化操作人員對(duì)燒錄器軟件的復(fù)雜操作,通過(guò)簡(jiǎn)單配置即可完成燒錄過(guò)程。此外,還可以解決對(duì)于Nand Flash存在壞塊的情況下,在使用現(xiàn)有技術(shù)的燒錄方式可能導(dǎo)致系統(tǒng)無(wú)法正常運(yùn)行的問(wèn)題。
[0050]以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,其特征在于,該裝置包括版本升級(jí)模塊、可燒錄版本模塊、燒錄模塊以及動(dòng)態(tài)分區(qū)解析模塊;其中: 版本升級(jí)模塊,用于將預(yù)存儲(chǔ)在動(dòng)態(tài)分區(qū)的各分區(qū)的二進(jìn)制執(zhí)行部件按序組裝合并成一個(gè)文件,并加入版本頭信息部件; 可燒錄版本模塊,用于將Nand閃存中實(shí)際存儲(chǔ)的N個(gè)分區(qū)的順序依次進(jìn)行燒錄版本組裝;由N-M個(gè)靜態(tài)分區(qū)預(yù)存儲(chǔ)的二進(jìn)制執(zhí)行部件和版本升級(jí)模塊進(jìn)行組裝合并; 燒錄模塊:用于當(dāng)需要燒錄版本文件到Nand閃存中時(shí),將所述帶ECC算法的可燒錄版本提供給燒錄器,由所述燒錄器將所述可燒錄版本文件燒錄到Nand閃存中; 動(dòng)態(tài)分區(qū)解析模塊:用于在引導(dǎo)程序啟動(dòng)時(shí)搜索版本頭,根據(jù)版本頭記錄的信息和Nand閃存依次搜索到的塊狀態(tài)構(gòu)造出動(dòng)態(tài)分區(qū)表,內(nèi)核通過(guò)引導(dǎo)程序傳遞環(huán)境變量的方式或者通過(guò)將動(dòng)態(tài)分區(qū)表共享到同一段未使用的內(nèi)存的方式獲取來(lái)構(gòu)造內(nèi)核分區(qū)表。
2.根據(jù)權(quán)利要求1所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,其特征在于,所述的版本升級(jí)模塊,用于按照塊對(duì)齊的方式記錄各動(dòng)態(tài)分區(qū)存儲(chǔ)文件的實(shí)際大小。
3.根據(jù)權(quán)利要求1或2所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,其特征在于,還用于在Nand閃存中的引導(dǎo)程序能正常啟動(dòng)的情況下,將該版本升級(jí)文件用于通過(guò)軟件的方式進(jìn)行版本的在線升級(jí)更新。
4.根據(jù)權(quán)利要求1所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,其特征在于,在所述可燒錄版本模塊中,如果N-M個(gè)靜態(tài)分區(qū)預(yù)存儲(chǔ)的二進(jìn)制執(zhí)行部件未達(dá)到該分區(qū)大小,則所述未達(dá)到的部分需要按OxFF進(jìn)行填充。
5.根據(jù)權(quán)利要求1或4所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索裝置,其特征在于,在所述可燒錄版本模塊中,各部件組裝合并`完畢,再根據(jù)具體的硬件電路加入相應(yīng)ECC算法進(jìn)行填充。
6.一種基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,該方法包括: A、獲取原始分區(qū)信息,所述原始分區(qū)信息包括N個(gè)分區(qū)及每個(gè)所述分區(qū)的空間大小,其中N為正整數(shù); B、將需要運(yùn)用動(dòng)態(tài)構(gòu)造分區(qū)搜索方法的分區(qū)數(shù)M合并成一個(gè)大的靜態(tài)分區(qū)C;其中M為正整數(shù),且1〈M〈N ; C、根據(jù)分區(qū)C的起始地址和分區(qū)大小,通過(guò)從分區(qū)C的起始地址開(kāi)始搜索特定的軟件版本頭信息,并根據(jù)版本頭信息和塊狀態(tài)確定各分區(qū)起始地址和動(dòng)態(tài)分區(qū)大??;通過(guò)版本頭中記錄的各分區(qū)存儲(chǔ)的實(shí)際二進(jìn)制文件大小信息和檢測(cè)C分區(qū)的塊狀態(tài),生成M個(gè)分區(qū)的動(dòng)態(tài)分區(qū)表; D、將所述的動(dòng)態(tài)分區(qū)表通過(guò)環(huán)境變量的方式或?qū)?dòng)態(tài)分區(qū)表共享同一段未使用的內(nèi)存的方式傳遞給內(nèi)核構(gòu)造內(nèi)核分區(qū)表信息。
7.根據(jù)權(quán)利要求6所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,步驟C所述根據(jù)版本頭信息和塊狀態(tài)確定各分區(qū)起始地址和動(dòng)態(tài)分區(qū)大小的過(guò)程,具體包括: Cl、從所述的C分區(qū)的起始地址開(kāi)始搜索特定的軟件版本頭信息,當(dāng)檢測(cè)到當(dāng)前的塊狀態(tài)為壞塊,則將壞塊加I ;當(dāng)檢測(cè)到當(dāng)前的塊狀態(tài)為好,則讀取該塊特定軟件版本頭結(jié)構(gòu)大小的數(shù)據(jù)內(nèi)容判斷是否為版本頭;如果該塊存儲(chǔ)的不是版本頭,則繼續(xù)依次檢測(cè)下一塊的狀態(tài);如果是版本頭,則根據(jù)版本頭的信息獲取各分區(qū)實(shí)際存儲(chǔ)的二進(jìn)制文件大小的相關(guān)信息; C2、當(dāng)搜到的是存儲(chǔ)版本頭信息的塊時(shí),繼續(xù)檢測(cè)下一塊的狀態(tài),如果是壞塊,則將壞塊加I ;當(dāng)檢測(cè)到的塊狀態(tài)為好,則此塊存儲(chǔ)的就是M分區(qū)里面的第I個(gè)動(dòng)態(tài)分區(qū)的起始地址;根據(jù)版本頭信息記錄的該分區(qū)的大小和依次搜索到的塊狀態(tài)即可確定第I個(gè)動(dòng)態(tài)分區(qū)的終止地址。
8.根據(jù)權(quán)利要求1所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,進(jìn)一步包括:在改變內(nèi)核原有構(gòu)造內(nèi)核分區(qū)表的方式時(shí),引導(dǎo)程序?qū)?dòng)態(tài)分區(qū)表通過(guò)環(huán)境變量的方式或?qū)?dòng)態(tài)分區(qū)表共享同一段未使用的內(nèi)存的方式傳遞給內(nèi)核構(gòu)造內(nèi)核分區(qū)表信息。
9.根據(jù)權(quán)利要求6或7所述基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,依據(jù)所述版本頭信息,按第i個(gè)動(dòng)態(tài)分區(qū)的起始地址和版本頭信息記錄的第i個(gè)動(dòng)態(tài)分區(qū)實(shí)際存儲(chǔ)文件大小的塊數(shù)能夠確定第i+1個(gè)動(dòng)態(tài)分區(qū)的起始地址,其中l(wèi)〈=i〈=M ;具體為:第i+1個(gè)動(dòng)態(tài)分區(qū)的起始地址=第i個(gè)動(dòng)態(tài)分區(qū)的起始地址+ (第i個(gè)動(dòng)態(tài)分區(qū)壞塊數(shù)+第i個(gè)動(dòng)態(tài)分區(qū)存儲(chǔ)的實(shí)際文件內(nèi)容所占的塊數(shù))*塊大小。
10.根據(jù)權(quán)利要求6~9任一項(xiàng)所述的基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,所述執(zhí)行動(dòng)態(tài)分區(qū)搜索之前,還包括: 生成帶特定版本頭信息的升級(jí)版本文件;所述升級(jí)版本文件由版本頭結(jié)構(gòu)體和需要構(gòu)造M個(gè)動(dòng)態(tài)分區(qū)的所對(duì)應(yīng)存儲(chǔ)的二進(jìn)制執(zhí)行文件組成;依次讀取編譯生成的預(yù)存儲(chǔ)在第i(l〈=i〈=M)個(gè)動(dòng)態(tài)分區(qū)二進(jìn)制文件,并按照實(shí)際的分區(qū)順序進(jìn)行組裝合并,并將各分區(qū)實(shí)際存儲(chǔ)的文件大小記錄到版本頭對(duì)應(yīng)的結(jié)構(gòu)體中,各部件按照塊的方式進(jìn)行對(duì)齊。
11.根據(jù)權(quán)利要求6~9任一項(xiàng)所述的基于Nand閃存的動(dòng)態(tài)分區(qū)搜索方法,其特征在于,在所述執(zhí)行動(dòng)態(tài)分區(qū)搜索之前,還包括:將動(dòng)態(tài)分區(qū)構(gòu)造搜索算法放在引導(dǎo)程序中執(zhí)行,并在引導(dǎo)程序引導(dǎo) 內(nèi)核之前執(zhí)行;并且在所述Nand閃存的第一個(gè)分區(qū)的第一個(gè)塊寫(xiě)入引導(dǎo)程序。
【文檔編號(hào)】G06F12/02GK103744694SQ201310720438
【公開(kāi)日】2014年4月23日 申請(qǐng)日期:2013年12月24日 優(yōu)先權(quán)日:2013年12月24日
【發(fā)明者】曹木蓮 申請(qǐng)人:武漢烽火眾智數(shù)字技術(shù)有限責(zé)任公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
酒泉市| 晴隆县| 卫辉市| 邢台县| 梅州市| 天全县| 达州市| 汾西县| 榕江县| 高阳县| 太仆寺旗| 深州市| 大关县| 扎兰屯市| 天峻县| 红桥区| 镶黄旗| 英德市| 那坡县| 大英县| 贵定县| 南昌县| 伊春市| 巨鹿县| 修武县| 宣威市| 邵武市| 乌鲁木齐县| 德令哈市| 曲阜市| 比如县| 晋江市| 宝兴县| 巴南区| 阿拉善右旗| 隆林| 马边| 永福县| 澄迈县| 惠来县| 湛江市|