<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > YAFFS2在嵌入式系統(tǒng)中的實(shí)現(xiàn)

          YAFFS2在嵌入式系統(tǒng)中的實(shí)現(xiàn)

          作者: 時(shí)間:2010-06-01 來(lái)源:網(wǎng)絡(luò) 收藏

          3.2 Linux內(nèi)核移植
          目前Linux內(nèi)核還沒(méi)有正式支持YAFFS文件,所以需要通過(guò)補(bǔ)丁修改Linux內(nèi)核,另外YAFFS文件也需要MTD設(shè)備驅(qū)動(dòng)的支持。首先下載最新版本的2.6內(nèi)核,這里以linux-2.6.29.4為例。盡管Linux 2.6并不是一個(gè)真正的實(shí)時(shí)操作,但其改進(jìn)的特性能夠滿足系統(tǒng)響應(yīng)需求。再下載YAFFS代碼包。內(nèi)有YAFFS和YAFFS 2兩個(gè)文件夾。其中YAFFS已經(jīng)不再維護(hù),進(jìn)入。文件夾內(nèi)有patch-ker.sh補(bǔ)丁文件,使用以下命令將加入到Linux內(nèi)核。

          以上命令完成了三件事情:
          (1)修改內(nèi)核fs/Kconfig。增加一行:source”fs//Kconfig”。
          (2)修改內(nèi)核fs/Kconfig。增加一行:ojb-MYM(CONFIG_YAFFS_FS)+=YAFFS2/。
          (3)在內(nèi)核fs/目錄下創(chuàng)建YAFFS2目錄;將YAFFS2源碼目錄下面的Makefile.kernel文件復(fù)制為內(nèi)核fs/YAFFS2/Makefie;將YAFFS2源碼目錄的Kconfig文件復(fù)制到內(nèi)核fs/YAFFS2目錄下;將YAFFS2源碼目錄下的*.C*.h文件復(fù)制到內(nèi)核fs/YAFFS2目錄下。
          進(jìn)入內(nèi)核目錄,修改makefile,并對(duì)內(nèi)核進(jìn)行默認(rèn)配置進(jìn)行修改,使其支持本開(kāi)發(fā)板。

          結(jié)合U-Boot信息修改NAND FLASH分區(qū),使其兩者結(jié)構(gòu)大小保持一致。注意分區(qū)的大小要以128 kB為單位。

          根據(jù)具體NAND FLASH芯片特性,修改tacls,twrph0,twrphl的值。
          修改arch/arm/tools/math-types文件,使其Linux內(nèi)核的機(jī)器號(hào)與Bootloader傳遞來(lái)的參數(shù)一致。建立好交叉編譯環(huán)境,在環(huán)境變量PATH中添加交叉編譯工具路徑?;蛘咧苯釉趍akefile文件內(nèi)添加修改也可以。使用make s3c2410_defconfig命令,將2410的默認(rèn)配置文件寫(xiě)到當(dāng)前目錄下的.config。使用make me-nuconfig命令配置內(nèi)核模塊的功能,要選中MTD和YAFFS2支持。在Boot options選項(xiàng)中增加以下語(yǔ)句。

          使用make zImage命令,生成是zlmage映像文件。再用mkimage工具制作ulmage,uImage是U-Boot專(zhuān)用的映像文件,它在zImage之前加上一個(gè)長(zhǎng)度為0x40的“頭”,說(shuō)明這個(gè)映像文件的類(lèi)型、加載位置、生成時(shí)間、大小等信息。
          3.3 制作文件系統(tǒng)
          Linux系統(tǒng)都需要構(gòu)建根文件系統(tǒng),構(gòu)建根文件系統(tǒng)的規(guī)則在文件系統(tǒng)層次標(biāo)準(zhǔn)(Filesystem Hi-erarchy Standard,F(xiàn)HS)文檔中。首先建立根文件系統(tǒng)目錄和動(dòng)態(tài)鏈接庫(kù),然后使用Busybox工具可以生成根文件系統(tǒng)所需的bin,sbin,usr目錄和linuxrc文件。Bosybox是一個(gè)遵循GPL v2協(xié)議的開(kāi)源項(xiàng)目,它在編寫(xiě)過(guò)程總對(duì)文件大小進(jìn)行優(yōu)化,并考慮了系統(tǒng)資源有限(比如內(nèi)存等)的情況,為系統(tǒng)提供了一個(gè)比較完整的工具集。
          YAFFS2源代碼包內(nèi)除了本身文件系統(tǒng)代碼外,utils 目 錄下還包含了 mkYAFFSimage/mkYAFFS2image的代碼,修改Makefile里的內(nèi)核路
          徑編譯出mkYAFFSimage/mkYAFFS2image工具。其中mkYAFFSimage用于制作512 B的小頁(yè)YAFFS文件系統(tǒng),mkYAFFS2image用于制作2 KB以上的大頁(yè)YAFFS2文件系統(tǒng)。輸入以下格式命令,制作出支持大頁(yè)的YAFFS2文件系統(tǒng)映像。
          mkYAFFS2image MYM{PRJROOT}rootfs rootfs.YAFFS
          通過(guò)mkYAFFS2image制做出來(lái)的映像文件其OOB中包含的ECC是使用YAFFS2/YAFFS ecc.c文件中的YAFFS ECCCaimJlate函數(shù)計(jì)算出來(lái)的
          ECC校驗(yàn)碼,其校驗(yàn)算法和nand ecc.c文件內(nèi)的nand_calculate_ecc函數(shù)校驗(yàn)算法不同,如果在內(nèi)核中由MTD來(lái)處理ECC,當(dāng)讀取NAND FLASH中的數(shù)據(jù)時(shí),會(huì)通過(guò)nand_calculate_ecc函數(shù)的算法再生成一個(gè)新的ECC校驗(yàn)和,校驗(yàn)的時(shí)候,將從OOB區(qū)中讀出的原ECC校驗(yàn)和新ECC校驗(yàn)和按位異或,其錯(cuò)誤的結(jié)果會(huì)造成系統(tǒng)認(rèn)為所有的頁(yè)面都是錯(cuò)誤的。解決辦法有兩種,一是在內(nèi)核編譯時(shí)把Lets YAFFS do itsown ECC選上,同時(shí)修改內(nèi)核把MTD驅(qū)動(dòng)中的ECC校驗(yàn)關(guān)閉;二是修改mkYAFFS2image.c文件,使其制作image時(shí)使用nand_caleulate_ecc函數(shù)的校驗(yàn)算法,在內(nèi)核編譯時(shí)不要把Lets YAFFS do its own ECC選上,同時(shí)打開(kāi)MTD驅(qū)動(dòng)中的ECC校驗(yàn)。
          3.4 系統(tǒng)測(cè)試
          啟動(dòng)系統(tǒng)后,Bootloader首先運(yùn)行,然后它將內(nèi)核復(fù)制到內(nèi)存中,并且在內(nèi)存某個(gè)固定的地址設(shè)置好要傳遞給內(nèi)核的參數(shù),最后運(yùn)行內(nèi)核。內(nèi)核啟動(dòng)之后,它會(huì)將文件系統(tǒng)掛載為根文件系統(tǒng),接著啟動(dòng)文件系統(tǒng)中的應(yīng)用程序。啟動(dòng)途中會(huì)顯示如下信息:

          以上信息說(shuō)明系統(tǒng)已經(jīng)找到NAND FLASH設(shè)備,并識(shí)別出分區(qū)。進(jìn)入系統(tǒng)后,輸入下面命令。

          在輸出結(jié)果中,顯示了YAFFS2的相關(guān)信息,說(shuō)明Linux內(nèi)核已經(jīng)支持YAFFS2文件系統(tǒng)。
          建立掛載點(diǎn),掛載blockdevice設(shè)備。

          查看mount上的目錄,可以看到該目錄下有剛才拷貝的文件,將其umount后,再次mount上來(lái),發(fā)現(xiàn)拷貝的文件仍然存在,這時(shí)刪除該文件然后umount,再次mount后,發(fā)現(xiàn)拷貝的文件已經(jīng)被刪除,說(shuō)明該分區(qū)能正常讀/寫(xiě)。
          在FLASH上建立根文件系統(tǒng):

          重新啟動(dòng),改變啟動(dòng)參數(shù):

          重新啟動(dòng),內(nèi)核可以從NAND FLASH啟動(dòng)根文件系統(tǒng)。

          4 結(jié)語(yǔ)
          大頁(yè)NAND FLASH的快速擦除、讀/寫(xiě)性能滿足了系統(tǒng)對(duì)實(shí)時(shí)性的要求,YAFFS2可靠的掉電保護(hù)和高效率的讀寫(xiě)以及對(duì)NAND FLASH存儲(chǔ)設(shè)備的保護(hù)等優(yōu)勢(shì)增加了整個(gè)系統(tǒng)的安全性和健壯性,兩者的結(jié)合達(dá)到了裝備對(duì)數(shù)據(jù)的大容量存儲(chǔ)和管理的需求。目前,該系統(tǒng)已裝備于某部,用于實(shí)時(shí)監(jiān)測(cè)裝備的戰(zhàn)技術(shù)狀況,以及長(zhǎng)時(shí)間實(shí)時(shí)記錄裝備工作數(shù)據(jù),用于事后分析評(píng)估裝備性能和操作手水平,在部隊(duì)作訓(xùn)中發(fā)揮了重大作用。

          本文引用地址:http://www.ex-cimer.com/article/151830.htm
          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();