將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件方法
【專利摘要】本發(fā)明公開了一種將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,包括下列步驟:從分區(qū)文件讀取linux嵌入式設(shè)備的nandflash分區(qū)信息;利用mkimage工具制作uboot啟動文件;將內(nèi)核kernel和根文件系統(tǒng)rootfs集成為鏡像文件;轉(zhuǎn)化系統(tǒng)文件;追加nandflash的spare區(qū)內(nèi)容,計算文件ECC校驗數(shù)據(jù);制作在分區(qū)模式下可燒錄的映像文件,所述映像文件包括分區(qū)表文件和合并文件。本發(fā)明無需燒錄工裝,不需要制作費用,制作工廠燒錄映像時間短,無需人工干預(yù),只需幾秒鐘,便可自動生成完全正確的映像文件,減少燒錄時間,提高Linux嵌入式產(chǎn)品生產(chǎn)流水線的效率。
【專利說明】將Ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù),尤其涉及一種用于Linux嵌入設(shè)備中的將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法。
【背景技術(shù)】
[0002]nandflash結(jié)構(gòu)能提供極高的單元密度,存儲密度高,寫入和擦除速度很快,存儲介質(zhì)成本低,逐漸成為嵌入式系統(tǒng)的首選存儲設(shè)備,不過從成本和技術(shù)上綜合考慮,nandflash允許存在一定比例的壞塊。
[0003]nandflash的壽命是有限的,一個nandflash塊的擦寫次數(shù)大概在10~5_10~6次,為了保持nandflash的使用壽命足夠長,必須避免擦寫的區(qū)域不均衡,否則閃存會因為局部達(dá)到擦寫極限而造成整個nandflash報廢,這實際上是浪費,所以應(yīng)該使用磨損均衡(WearBalance)技術(shù)以延長閃存的有效使用壽命,ubi文件系統(tǒng)格式具有損耗均衡技術(shù),從而延長nandflash的壽命。
[0004]傳統(tǒng)燒錄nandflash的方法為使用腳本命令燒錄,需要較長時間,并且量產(chǎn)時要使用工裝,需要一定的制作費用。如果使用燒錄器直接燒錄編譯生成的系統(tǒng)原始文件(bootstrap, bin、uboot.bin、ulmage、rootfs),由于不帶 spare 區(qū)信息,系統(tǒng)無法運行。
[0005]由于nandflash出廠時有一定概率的壞塊,使用燒錄器直接燒錄帶spare區(qū)信息的燒錄鏡像,則系統(tǒng)仍無法運行。因為,當(dāng)nandflash第一個分區(qū)有I壞塊,nandflash燒錄以跳過壞塊的方式燒錄,燒錄器會把第一個分區(qū)的剩余數(shù)據(jù)順延寫到第二個分區(qū)的第一個塊block中,則原第二個分區(qū)的數(shù)據(jù)燒錄到了第二個分區(qū)的第二個塊block里,但是系統(tǒng)啟動時都是從固定地址讀取數(shù)據(jù)的,即系統(tǒng)到第二個分區(qū)的第一個塊block里讀取數(shù)據(jù),此時第二個分區(qū)的第一個block里存放的是第一個分區(qū)的剩余數(shù)據(jù),則系統(tǒng)無法運行。
[0006]現(xiàn)有Linux嵌入式設(shè)備燒錄主要有兩種方法:一種方法是使用腳本命令燒錄各個系統(tǒng)文件(bootstrap、config、ubootl、uboot2、集成鏡像 imagel、集成鏡像 image2),該方法有兩個缺點,第一需要制作燒錄工裝,需要一定的制作費用;第二、燒錄系統(tǒng)文件時間較長,生產(chǎn)效率低;另一種方法是手工制作分區(qū)表文件partTable.bin和合并文件Merge, bin燒錄映像,首先程序員手工輸入命令把各個系統(tǒng)文件下載到嵌入式設(shè)備的nandflash,拆下nandflash用燒錄器讀出所有數(shù)據(jù),再保存nandflash各分區(qū)數(shù)據(jù),然后使用第三方應(yīng)用軟件手工制作分區(qū)表文件partTable.bin和合并文件Merge, bin,最后使用燒錄器燒錄制作后的映像文件(分區(qū)表文件partTable.bin和合并文件Merge, bin),該方法的缺點是制作映像文件步驟多,時間長,需人工干預(yù),工序復(fù)雜,容易出錯等缺點。
【發(fā)明內(nèi)容】
[0007]有鑒于此,本發(fā)明的目的是提供一種將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,無需燒錄工裝,不需要制作費用,制作工廠燒錄映像時間短,無需人工干預(yù),只需幾秒鐘,便可自動生成完全正確的映像文件,減少燒錄時間,提高Linux嵌入式產(chǎn)品生產(chǎn)流水線的效率。
[0008]為了達(dá)到上述目的,本發(fā)明的目的是通過下述技術(shù)方案實現(xiàn)的:
[0009]—種將Ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其中,包括下列步驟:
[0010]從分區(qū)文件讀取Iinux嵌入式設(shè)備的nandflash分區(qū)信息;
[0011]利用mkimage工具制作uboot啟動文件;
[0012]將內(nèi)核kernel和根文件系統(tǒng)rootfs集成為鏡像文件;
[0013]轉(zhuǎn)化系統(tǒng)文件,包括把uboot和集成鏡像轉(zhuǎn)化為ubi文件系統(tǒng)格式;
[0014]追加nandflash的spare區(qū)內(nèi)容,計算文件ECC校驗數(shù)據(jù);
[0015]制作在分區(qū)模式下可燒錄的映像文件,所述映像文件包括分區(qū)表文件和合并文件。
[0016]上述將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其中,利用mkimage工具在制作Uboot映像文件時,在原來的可執(zhí)行映像文件的前面加上一段參數(shù)信息,使得uboot識別這個映像文件針對的CPU體系結(jié)構(gòu),操作系統(tǒng)名字,文件類型,加載內(nèi)存中位置和映像名字,如果相同,就從這個地址開始提取出這個參數(shù)信息并對其進(jìn)行分析,然后去掉參數(shù)信息,把數(shù)據(jù)復(fù)制到指定的地址中運行。
[0017]上述將Ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其中,制作集成鏡像文件包括下列步驟:
[0018]計算集成后的鏡像文件的大??;
[0019]申請鏡像文件大小的內(nèi)存空間,用于存儲將要生成的集成鏡像;
[0020]計算并統(tǒng)計鏡像信息;
[0021]拷貝鏡像信息到內(nèi)存空間,把鏡像信息拷入內(nèi)存空間的前512字節(jié);
[0022]拷貝內(nèi)核到內(nèi)存空間以512字節(jié)為偏移地址處;
[0023]拷貝根文件系統(tǒng)到內(nèi)存空間的相應(yīng)偏移地址處;
[0024]保存內(nèi)存空間的數(shù)據(jù)為集成的鏡像文件。
[0025]上述將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其中,所述集成后的鏡像文件包括鏡像信息、內(nèi)核和根文件系統(tǒng),所述鏡像信息用于記錄集成鏡像的信息,包括集成后鏡像文件的大小、根文件系統(tǒng)在集成后的鏡像文件中的偏移位置、鏡像信息的CRC校驗和、內(nèi)核和根文件系統(tǒng)的CRC校驗和、根文件系統(tǒng)文件的系統(tǒng)類型和集成后鏡像文件的名稱,所述集成后鏡像文件的大小包括鏡像信息大小、內(nèi)核大小和根文件系統(tǒng)大小,所述內(nèi)核是編譯內(nèi)核生成的文件,所述根文件系統(tǒng)是內(nèi)核啟動的初始階段創(chuàng)建虛擬的文件系統(tǒng)后加載的真正文件系統(tǒng)。
[0026]與已有技術(shù)相比,本發(fā)明的有益效果在于:
[0027]1、制作成工廠燒錄映像文件是在工程編譯時自動生成的,無需后期處理就可以使用燒錄器直接燒錄;
[0028]2、uboot和集成鏡像都有備份,大大減少系統(tǒng)運行時出錯概率;
[0029]3、將內(nèi)核kernel和文件系統(tǒng)rootfs集成為一個文件,方便客戶升級程序,防止升級程序時內(nèi)核kernel和根文件系統(tǒng)rootfs不匹配問題,另外加入集成鏡像的校驗信息,增加數(shù)據(jù)可靠性;[0030]4、系統(tǒng)文件使用ubi文件系統(tǒng),ubi文件系統(tǒng)提供高效靈活的損耗均衡技術(shù),提高了 nandflash的使用壽命。
【專利附圖】
【附圖說明】
[0031]構(gòu)成本發(fā)明的一部分的附圖用來提供對本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0032]圖1是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法的流程示意圖;
[0033]圖2是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法中制作集成鏡像文件的流程示意圖;
[0034]圖3是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法中將ubi文件格式的uboot和ubi文件格式的集成鏡像加入ECC校驗數(shù)據(jù)的軟件流程;
[0035]圖4是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法中將ubi文件格式的Uboot和ubi文件格式的集成鏡像加入ECC校驗數(shù)據(jù)的軟件流程的第四步完成后的計算結(jié)果示意圖;
[0036]圖5是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法中制作支持分區(qū)模式可燒錄的映像文件的流程示意圖;
[0037]圖6是本發(fā)明將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法中partTable.bin分區(qū)表文件的內(nèi)容示意圖。
【具體實施方式】
[0038]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
[0039]需要說明的是,在不沖突的情況下,本發(fā)明中的實施例及實施例中的特征可以相
互組合。
[0040]本發(fā)明實施例提供Linux嵌入式設(shè)備中的一種將ubi文件系統(tǒng)格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,參照圖1,包括如下主要步驟:
[0041]首先從分區(qū)文件讀取Iinux嵌入式設(shè)備的nandflash分區(qū)信息;
[0042]然后利用mkimage工具制作uboot啟動文件;
[0043]將內(nèi)核kernel和根文件系統(tǒng)rootfs集成為鏡像文件;
[0044]轉(zhuǎn)化系統(tǒng)文件,如,把uboot和集成鏡像轉(zhuǎn)化為ubi文件系統(tǒng)格式;
[0045]追加nandflash的spare區(qū)內(nèi)容,計算文件ECC校驗數(shù)據(jù);
[0046]最后制作在分區(qū)模式下可燒錄的映像文件,包括分區(qū)表文件partTable.bin和合并文件 Merge, bin。
[0047]以下詳細(xì)說明本發(fā)明的上述各步驟。
[0048]1、根據(jù)分區(qū)信息制作燒錄器燒錄映像:
[0049]分區(qū)文件內(nèi)容為!bootstrap(0x200000) ;config (0x200000);ubootl (0x400000) ;uboot2 (0x400000) ;imagel (OxlcOOOOO) ;image2 (OxlcOOOOO),其中括號里表示該文件在nandflash里所占空間大小,空間大小不含spare區(qū)的信息。
[0050]2、利用mkimage工具制作uboot啟動文件:
[0051]mkimage在制作uboot映像文件的時候,是在原來的可執(zhí)行映像文件的前面加上64字節(jié)的參數(shù)信息,這樣uboot才能識別這個映像文件針對的CPU體系結(jié)構(gòu),操作系統(tǒng)名字,文件類型,加載內(nèi)存中位置,映像名字。如果相同,就從這個地址開始提取出這個64字節(jié)參數(shù)信息,對其進(jìn)行分析,然后去掉64字節(jié)的參數(shù)信息,把數(shù)據(jù)復(fù)制到指定的地址中運行。
[0052]3、將內(nèi)核kernel和根文件系統(tǒng)rootfs集成為鏡像文件:
[0053]集成后的鏡像文件由鏡像信息、內(nèi)核kernel和根文件系統(tǒng)rootfs共3部分組成,且連續(xù)存放。鏡像信息大小為512字節(jié),記錄集成鏡像的信息,包括:
[0054](A)集成后鏡像文件的大小,共包括三個部分,分別為鏡像信息大小、內(nèi)核kernel大小和根文件系統(tǒng)rootfs大??;
[0055](B)內(nèi)核 kernel 大??;
[0056](C)根文件系統(tǒng)rootfs大小;
[0057](D)根文件系統(tǒng)rootfs在集成后的鏡像文件中的偏移位置;
[0058](E )鏡像信息的CRC校驗和;
[0059](F)內(nèi)核kernel和根文件系統(tǒng)rootfs的CRC校驗和;
[0060](G)根文件系統(tǒng)rootfs文件的系統(tǒng)類型;
[0061](H)集成后鏡像文件的名稱。
[0062]內(nèi)核kernel是編譯內(nèi)核生成的文件。
[0063]根文件系統(tǒng)rootfs是Kernel啟動的初始階段創(chuàng)建虛擬的文件系統(tǒng)后加載的真正文件系統(tǒng)。
[0064]制作集成鏡像文件的流程圖如圖2所示:
[0065]①計算集成后鏡像文件的大小,其大小為鏡像信息大小512字節(jié)、內(nèi)核kernel文件大小和根文件系統(tǒng)rootfs文件大小的總和;
[0066]②申請鏡像文件大小的內(nèi)存空間buf,其用于存儲將要生成的集成鏡像;
[0067]③計算并統(tǒng)計鏡像信息;
[0068]④拷貝鏡像信息到buf,把鏡像信息拷入buf的前512字節(jié);
[0069]⑤拷貝內(nèi)核kernel到buf以512字節(jié)為偏移地址處;
[0070]⑥拷貝根文件系統(tǒng)roofs到buf相應(yīng)偏移地址處;
[0071]⑦保存buf數(shù)據(jù)為集成的鏡像文件。
[0072]4、轉(zhuǎn)化uboot和集成后的鏡像文件為ubi文件系統(tǒng)格式:
[0073]使用ubinize制作ubi文件系統(tǒng)格式的uboot命令如下:
[0074]./ubinize-o outubiuboot.1mg-m2048-pl28KiB-s512-0512cfg_ubiuboot.cfg
[0075]使用ubinize制作ubi文件系統(tǒng)格式的集成鏡像命令如下:
[0076]./ubinize-o outubiimage.1mg-m2048-pl28KiB-s512-0512cfg_ubiimage.cfg
[0077]命令里參數(shù)的解釋為:
[0078]-O:輸出文件名字[0079]-m:頁面大小(2048)
[0080]-p:物理擦除塊大小(128KB)
[0081]-S:最小的硬件輸入輸出頁面大小(512)
[0082]outubi image, img為ubi文件系統(tǒng)格式的集成鏡像的輸出文件,cfg_ubi image,cfg為制作ubi文件系統(tǒng)的配置文件,其內(nèi)容為:
[0083][image]
[0084]mode=ubi
[0085]image=pro_image
[0086]vol_id=0
[0087]vol_size=13000KiB
[0088]vol_type=dynami c
[0089]vol_name=0
[0090]vol_flags=autoresize
[0091]5、追加nandflash的spare區(qū)內(nèi)容,計算文件ECC校驗數(shù)據(jù):
[0092]下面針對三星的K9F1G08U0A的nandflash芯片為例,由1024個塊block組成,每個block包含64個頁page,每個page是2048+64 = 2112字節(jié)。對于一個page, O至2047個字節(jié)為主存儲區(qū)(Main Area),用來存儲用戶數(shù)據(jù);2048至2111共64個字節(jié)為擴(kuò)展存儲區(qū)(Spare Area),用來存儲頁的信息,包括壞塊標(biāo)記和錯誤檢查糾正ECC等???cè)萘繛?024* (64*2112) =132MB,其中4MB是用來保存ECC等其它數(shù)據(jù)的,所以可使用的空間為128MB。
[0093]關(guān)于ECC校驗方法,nandflash的每一頁有兩區(qū):main區(qū)和spare區(qū),main區(qū)用于存儲正常的數(shù)據(jù),spare區(qū)用于存儲其他附加信息,其中就包括ECC校驗碼。向nandflash寫入數(shù)據(jù)的時候,每256字節(jié)原始文件數(shù)據(jù)生成3字節(jié)ECC校驗數(shù)據(jù)。存儲到頁面page的spare區(qū)中OOB (out-of-band)特定位置中。在下次讀取這一頁數(shù)據(jù)的時候,同樣也計算ECC校驗碼,然后與spare區(qū)中的ECC校驗碼比較,如果一致則說明讀取的數(shù)據(jù)正確,如果不一致則錯誤。
[0094]將ubi文件格式的uboot和ubi文件格式的集成鏡像加入ECC校驗數(shù)據(jù)的軟件流程。
[0095]加入ECC校驗數(shù)據(jù)的流程圖,如圖3所示:
[0096]①計算含spare區(qū)文件大小:先打開被計算ECC校驗的文件(如ubi文件格式的uboot或ubi文件格式的集成鏡像),再獲取被計算ECC校驗的文件大小為oriFileLen字節(jié)。三星的K9F1G08U0A的nandflash芯片的頁page大小為2048字節(jié),每頁page的spare區(qū)大小為64字節(jié),那么含spare區(qū)文件大小為oriFileLen/2048*2112字節(jié);
[0097]②申請含spare區(qū)文件大小的內(nèi)存空間Buf IncEcc,用于存儲計算ECC校驗后的文件,并且初始化剛申請內(nèi)存BufIncEcc的地址為bufAddr為O ;
[0098]③從被計算ECC校驗的文件讀出I頁page的數(shù)據(jù)2048字節(jié)到BufIncEcc [bufAddr],并初始化頁內(nèi)偏移地址dataNum為O ;
[0099]④如果dataNum小于頁面大小2048,先從BufIncEcc里偏移地址bufAddr+dataNum處讀出256字節(jié)到eccBuf,再使用查表法計算eccBuf的256字節(jié)為3字節(jié)ECC,然后將3字節(jié)校驗數(shù)據(jù) ECC 填入 BufIncEcc 對應(yīng) OOB 區(qū),最后 dataNum=dataNum+256,即 BufIncEcc頁內(nèi)偏移地址加256,返回④繼續(xù)執(zhí)行循環(huán);
[0100]計算結(jié)果如圖4所示,上方框部區(qū)域是256字節(jié)原始文件數(shù)據(jù),OOB區(qū)的下方區(qū)域是上述2048字節(jié)數(shù)據(jù)計算得到的ECC數(shù)據(jù)。下方區(qū)域最后三個字節(jié)數(shù)據(jù)(aa9a97)是由上方區(qū)域256字節(jié)數(shù)據(jù)計算得到的ECC數(shù)據(jù)。
[0101]如果dataNum不小于頁面大小2048,則表示計算該頁ECC校驗結(jié)束,繼續(xù)往后執(zhí)行。
[0102]⑤bufAddr = bufAddr+2112,即 BufIncEcc 偏移地址加 2112 ;
[0103]⑥如果沒到達(dá)被計算校驗文件結(jié)尾,返回③,否則繼續(xù);
[0104]⑦如果到被計算校驗文件結(jié)尾說明計算文件ECC校驗數(shù)據(jù)結(jié)束。保存BuflncEcc數(shù)據(jù)為含spare區(qū)文件,如ubootspa.bin、imagespa.bin,整個流程完成。
[0105]6、制作支持分區(qū)模式下可燒錄的映像文件:
[0106]支持分區(qū)模式燒錄的映像文件是由兩個文件構(gòu)成的。第一是分區(qū)表文件(partTable.bin),包含nandFlash芯片的基本信息,分區(qū)表信息。第二是將要燒錄到NandFlash的二進(jìn)制合并文件(Merge, bin)。該二進(jìn)制合并文件是由多個文件構(gòu)成的,由分區(qū)表文件控制其燒錄。
[0107]合并文件由六個二進(jìn)制文件構(gòu)成,分別為bootstrap, bin, config.bin, ubootl.bin, uboot2.bin, imagel.bin, image2.bin。bootstrap.bin 用于引導(dǎo) ubootl.bin 啟動,config.bin是配置文件,ubootl.bin用于引導(dǎo)內(nèi)核kernel啟動,imagel.bin是內(nèi)核kernel和根文件系統(tǒng)rootfs的集成文件,其中ubootl.bin和uboot2.bin是相同的文件,uboot2.bin是ubootl.bin的備份文件,如果系統(tǒng)從ubootl.bin啟動失敗就從uboot2.bin啟動。imagel.bin和image2.bin也是相同的文件,image2.bin是imagel.bin的備份文件,如果系統(tǒng)從imagel.bin啟動失敗就從image2.bin啟動。ubootl.bin和imagel.bin在前面的步驟里已經(jīng)追加了 spare區(qū)的信息。不含spare區(qū)的信息每個block大小為2048*64=0x20000字節(jié),含spare區(qū)的信息每個block大小為(2048+64) *64 = 0x21000字節(jié)。
[0108]生成用于燒錄的分區(qū)表文件,分區(qū)表文件共有512字節(jié),每16字節(jié)表示一個分區(qū),最多可以劃分32個分區(qū)。每16字節(jié)的前I?4字節(jié)表示該分區(qū)的第一個塊(block),5?8字節(jié)表示該分區(qū)的最后一個塊(block),9?12字節(jié)表示該分區(qū)的文件所占的塊數(shù)(block), 13?16字節(jié)用Oxff填充。
[0109]制作支持分區(qū)模式可燒錄的映像文件的軟件流程:
[0110]①定義Merge_Info結(jié)構(gòu)體,每個參數(shù)在②里舉例說明;
[0111]typedef struct Merge—lnfo
{
UINT32 fileNum;
UINT8 fileName[32][32];
UINT32 fileSize[32];
UINT32 fileOffset[32];
UINT32 mergeSize;
UINT32 partStarBlock[32];
UINT32 partEndBlock[32];
UINT32 fileBlockSize[32];
}Merge_lnfo;[0112]②統(tǒng)計各文件信息填入該結(jié)構(gòu)體;
[0113]根據(jù)不含spare區(qū)的分區(qū)信息文件內(nèi)容:bootstrap (0x200000);config(0x200000) ;ubootl (0x400000) ;uboot2(0x400000) ;imagel(OxlcOOOOO);image2 (OxlcOOOOO)。計算得各個文件的燒錄地址為:
[0114]bootstrap, bin:燒錄到第0x0塊以后,偏移地址為0x0;
[0115]config.bin:燒錄到第 0x10 塊以后,偏移地址為 0x21000*0x10 = 0x210000;
[0116]ubootl.bin:燒錄到第 0x20 塊以后,偏移地址為 0x21000*0x20 = 0x420000;
[0117]uboot2.bin:燒錄到第 0x40 塊以后,偏移地址為 0x21000*0x40 = 0x840000;
[0118]imagel.bin:燒錄到第 0x60 塊以后,偏移地址為 0x21000*0x60 = 0xC60000;
[0119]image2.bin:燒錄到第 0x140 塊以后,偏移地址為 0x21000*0x140 = 0x2940000;
[0120]結(jié)束地址為0x21000*0x220 = 0x4620000
[0121]該結(jié)構(gòu)體的各參數(shù)為:
[0122]A、fileNum:制作燒錄映像文件時被合并文件的個數(shù),為6個。
[0123]B、fileName[32] [32]:燒錄映像各個被合并文件的名字,分別為bootstrap, bin,config.bin,ubootl.bin,uboot2.bin,imagel.bin,image2.bin。
[0124]C.fileSize[32]:各個被合并文件大小。
[0125]D、fileOffset [32]:燒錄映像各個被合并文件偏移地址!bootstrap, bin為0x0,config.bin 為 0x2100000,ubootl.bin 為 0x420000,uboot2.bin 為 0x840000,imagel.bin為 0xC60000,image2.bin 為 0x2940000。
[0126]E.mergeSize:整個燒錄映像的大小,即鏡像結(jié)束地址0x4620000
[0127]F、partStarBlock[32]:燒錄映像各個被合并文件起始塊 block !bootstrap, bin為 0x0,config.bin 為 0x10,ubootl.bin 為 0x20,uboot2.bin 為 0x40,imagel.bin 為 0x60,image2.bin 為 0x140。
[0128]G、partEndBlock[32]:燒錄映像各個被合并文件結(jié)束塊block,即下一個起始塊地址減 I !bootstrap, bin 為 Oxf,config.bin 為 Oxlf,ubootl.bin 為 0x3f,uboot2.bin 為0x5f, imagel.bin 為 0xl3f, image2.bin 為 0x21fo
[0129]H、fileBlockSize[32]:各個被合并文件塊 block 大小。
[0130]③申請512字節(jié)的內(nèi)存partBuf用于存儲分區(qū)表信息,并把內(nèi)存partBuf的內(nèi)容全填為Oxff ;
[0131]④申請Merge_Info_>mergeSize 大小即 0x4620000 字節(jié)的內(nèi)存 mergeBuf 用于存儲合并后的文件,并把內(nèi)存mergeBuf的內(nèi)容全填為Oxff ;
[0132]⑤初始化循環(huán)變量i為O ;
[0133]⑥如果循環(huán)變量i小于合并文件個數(shù)Merge_Info_>fileNum,首先把分區(qū)起始地址Merge_Info_>partStarBlock[i]賦值到partBuf [16*i]的四字節(jié)中,其次把分區(qū)結(jié)束地址Merge_Info_>partEndBlock[i]賦值到partBuf [16*i+4]的四字節(jié)中,再其次把被合并的文件所占塊數(shù)Merge_Info_>f iIeBlockSize [i]賦值到partBuf [16*i+8]的四字節(jié)中,然后把被合并名為 Merge_Info_>fiIeName [i]文件的 Merge_Info_>fiIeSize [i]字節(jié)數(shù)據(jù)拷入mergeBuf以Merge_Info_>fileOffset[i]為偏移地址處,最后,i++。完成本次循環(huán),返回⑥;
[0134]⑦當(dāng)循環(huán)變量i不小于合并文件個數(shù)Merge_Info_>fileNum時,保存內(nèi)存數(shù)據(jù)partBuf為partTable.bin分區(qū)表文件,其文件內(nèi)容如圖6所示;
[0135]⑧保存內(nèi)存數(shù)據(jù)mergeBuf為Merge, bin合并文件。
[0136]7、分區(qū)表文件partTable.bin和合并文件Merge, bin就是最終制作的工廠分區(qū)燒錄映像文件。
[0137]從上述實施例可以看出,本發(fā)明的優(yōu)勢在于:
[0138]制作成工廠燒錄映像文件是在工程編譯時自動生成的,無需后期處理就可以使用燒錄器直接燒錄;Uboot和集成鏡像都有備份,大大減少系統(tǒng)運行時出錯概率;將內(nèi)核kernel和文件系統(tǒng)rootfs集成為一個文件,方便客戶升級程序,防止升級程序時內(nèi)核kernel和根文件系統(tǒng)rootfs不匹配問題,另外加入集成鏡像的校驗信息,增加數(shù)據(jù)可靠性;系統(tǒng)文件使用ubi文件系統(tǒng),ubi文件系統(tǒng)提供高效靈活的損耗均衡技術(shù),提高了nandflash的使用壽命。
[0139]以上對本發(fā)明的具體實施例進(jìn)行了詳細(xì)描述,但本發(fā)明并不限制于以上描述的具體實施例,其只是作為范例。對于本領(lǐng)域技術(shù)人員而言,任何等同修改和替代也都在本發(fā)明的范疇之中。因此,在不脫離本發(fā)明的精神和范圍下所作出的均等變換和修改,都應(yīng)涵蓋在本發(fā)明的范圍內(nèi)。
【權(quán)利要求】
1.一種將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其特征在于,包括下列步驟: 從分區(qū)文件讀取Iinux嵌入式設(shè)備的nandflash分區(qū)信息; 利用mkimage工具制作uboot啟動文件; 將內(nèi)核kernel和根文件系統(tǒng)rootfs集成為鏡像文件; 轉(zhuǎn)化系統(tǒng)文件,包括把uboot和集成鏡像轉(zhuǎn)化為ubi文件系統(tǒng)格式; 追加nandflash的spare區(qū)內(nèi)容,計算文件ECC校驗數(shù)據(jù); 制作在分區(qū)模式下可燒錄的映像文件,所述映像文件包括分區(qū)表文件和合并文件。
2.根據(jù)權(quán)利要求1所述將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其特征在于,利用mkimage工具在制作uboot映像文件時,在原來的可執(zhí)行映像文件的前面加上一段參數(shù)信息,使得uboot識別這個映像文件針對的CPU體系結(jié)構(gòu),操作系統(tǒng)名字,文件類型,加載內(nèi)存中位置和映像名字,如果相同,就從這個地址開始提取出這個參數(shù)信息并對其進(jìn)行分析,然后去掉參數(shù)信息,把數(shù)據(jù)復(fù)制到指定的地址中運行。
3.根據(jù)權(quán)利要求1所述將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其特征在于,制作集成鏡像文件包括下列步驟: 計算集成后的鏡像文件的大??; 申請鏡像文件大小的內(nèi)存空間,用于存儲將要生成的集成鏡像; 計算并統(tǒng)計鏡像信息; 拷貝鏡像信息到內(nèi)存空間,把鏡像信息拷入內(nèi)存空間的前512字節(jié); 拷貝內(nèi)核到內(nèi)存空間以512字節(jié)為偏移地址處; 拷貝根文件系統(tǒng)到內(nèi)存空間的相應(yīng)偏移地址處; 保存內(nèi)存空間的數(shù)據(jù)為集成的鏡像文件。
4.根據(jù)權(quán)利要求3所述將ubi格式的系統(tǒng)文件制作成工廠燒錄映像文件的方法,其特征在于,所述集成后的鏡像文件包括鏡像信息、內(nèi)核和根文件系統(tǒng),所述鏡像信息用于記錄集成鏡像的信息,包括集成后鏡像文件的大小、根文件系統(tǒng)在集成后的鏡像文件中的偏移位置、鏡像信息的CRC校驗和、內(nèi)核和根文件系統(tǒng)的CRC校驗和、根文件系統(tǒng)文件的系統(tǒng)類型和集成后鏡像文件的名稱,所述集成后鏡像文件的大小包括鏡像信息大小、內(nèi)核大小和根文件系統(tǒng)大小,所述內(nèi)核是編譯內(nèi)核生成的文件,所述根文件系統(tǒng)是內(nèi)核啟動的初始階段創(chuàng)建虛擬的文件系統(tǒng)后加載的真正文件系統(tǒng)。
【文檔編號】G06F9/445GK103593216SQ201310561242
【公開日】2014年2月19日 申請日期:2013年11月12日 優(yōu)先權(quán)日:2013年11月12日
【發(fā)明者】鄧兵 申請人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司