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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > YAFFS2在嵌入式系統(tǒng)中的實現(xiàn)

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

          作者: 時間:2010-06-01 來源:網(wǎng)絡 收藏


          表1說明了文件數(shù)據(jù)在NANDFLASH的備用空間內(nèi)的存儲布局。


          blockState:描述該塊的狀態(tài)。如果不是OxFF,就說明是壞塊。相對應的是,所有正常的塊,里面所有數(shù)據(jù)都是OxFF的。
          chunkld:描述該頁在一個文件內(nèi)的索引,所以文件大小被限制在232×2 KB。chunkld為O,說明此頁面保存的是文件頭。不為O,說明是數(shù)據(jù)頁面。文件內(nèi)偏移量為0,即放在第一個頁面的文件,其chunkId為1,后面的以此類推。
          ObjectID:描述對象ID號,用來惟一標示一個文件。所以文件支持的文件總數(shù)限制在232個。
          nBytes:記錄該頁面內(nèi)的有效字節(jié)數(shù)。
          blockSequence:記錄著各塊被分配出去的先后順序,每分配出去一塊,就加1。在文件建立的時候,塊的掃描順序就是由它決定的,而不是FLASH的物理介質順序。在垃圾收集的時候也會以此作為參考之一,判斷該塊是否適合回收。
          tagsEcc:Ecc,YAFFS Tags區(qū)域的ECC校驗數(shù)據(jù)。
          ECC:數(shù)據(jù)區(qū)的ECC校驗數(shù)據(jù)。讀/寫數(shù)據(jù)區(qū)的數(shù)據(jù)時,每256 B生成3 B ECC校驗和,一頁面2 KB數(shù)據(jù)就會生成24 B的校驗數(shù)據(jù)。

          3 系統(tǒng)移植
          此次開發(fā)采用宿主機+目標系統(tǒng)的開發(fā)模式。宿主機為PC+Fedora9,F(xiàn)edora9安裝在PC的虛擬機內(nèi)。目標系統(tǒng)軟硬件組成為目標板(CPU為S3C2440A)+U-Boot+Linux,Linux版本為2.6.29.4。交叉編譯工具為arm-linux-gcc-4.3.2。
          選用Linux系統(tǒng)是因為它有著技術上先進,健壯、安全;是多任務系統(tǒng),支持ARM體系結構;源碼開放,驅動程序及其他資源非常豐富,良好的可移植性等優(yōu)點。系統(tǒng)的移植從軟件角度可以分為以下四個步驟。如圖3所示。


          (1)引導加載程序的移植,包括固化在固件(Fireware)中的boot代碼和Bootloader兩大部分。大多數(shù)嵌入式系統(tǒng)中并沒有固件,Bootlo-ader是上電后執(zhí)行的第一個程序。它主要用來初始化處理器及外設,然后調(diào)用Linux內(nèi)核。
          (2)嵌入式Linux內(nèi)核移植。特定于嵌入式處理系統(tǒng)的定制內(nèi)核以及內(nèi)核的啟動參數(shù)。內(nèi)核的啟動參數(shù)可以是內(nèi)核默認的,或是由Bootlo-ader傳遞給它的。
          (3)文件系統(tǒng)制作。包括根文件系統(tǒng)和建立于FLASH內(nèi)存設備之上的文件系統(tǒng)。里面包含了Linux系統(tǒng)配置文件和運行應用軟件所需要的庫等。
          (4)用戶應用程序編寫。特定于用戶的應用程序,它所的功能通常就是設計該嵌入式系統(tǒng)所要達到的目標,它們也存儲在文件系統(tǒng)內(nèi)。
          3.1 Bootloader移植
          對于支持ARM架構的Bootloader有U-Boot,Vivi等。U-Boot(Universal Boot Loader)即通用Bootloader,是遵循GPL條款的開放源代碼項目。它可以引導Linux,VxWorks,LynxOS等多種操作系統(tǒng)。支持PowerPC,x86,ARM等多種架構的CPU,具有豐富的設備驅動源碼,如串口、以太網(wǎng)、SDRAM,F(xiàn)LASH等。系統(tǒng)采用U-Boot的版本為1.1.6,它已支持SMDK2410開發(fā)板,在其基礎上進行修改。U-Boot 1.1.6中對NAND FLASH的支持有新舊兩套代碼,新代碼在drivers/nand目錄下,舊代碼在driver/nand_legacy目錄下。本次移植選用新代碼,它移植自Lin-ux2.6.12,更加智能。移植過程分以下幾步。
          (1)根據(jù)具體輸入時鐘,修改時鐘定義參數(shù)。SMDK2410開發(fā)板的默認時鐘為12 MHz。
          (2)依照實際開發(fā)板的內(nèi)存地址分配情況修改lowlevel init.S文件。
          (3)針對S3C2410,S3C2440 NAND FLASH控制器的不同,修改接口參數(shù)。
          (4)仿照內(nèi)核支持NAND FLASH的文件來編寫片選函數(shù)。命令和控制函數(shù),查詢狀態(tài)函數(shù)。
          (5)根據(jù)具體NAND FLASH芯片設置時序參數(shù)。
          (6)增加從NAND FLASH燒寫,讀取YAFFS2文件系統(tǒng)映像功能。
          (7)修改Makefile文件,將新建文件編入U-Boot中。
          在編寫燒寫YAFFS2文件系統(tǒng)映像的命令時,要注意YAFFS2文件系統(tǒng)映像里除了2 KB的數(shù)據(jù)外,后面還包括了64 B的OOB數(shù)據(jù),所以映像文件大小是以2 112 B為單位。OOB中已經(jīng)包含了ECC,在燒寫時不需要再計算ECC校驗碼。燒寫時,首先檢查是否為壞塊,是就跳過,然后寫入2 KB的數(shù)據(jù),最后寫入64 B的OOB數(shù)據(jù)。還要增加對skipfirstblk參數(shù)的支持。使燒寫YAFFS2文件系統(tǒng)映像時,跳過分區(qū)上第一個塊,這是由YAFFS2文件系統(tǒng)特性決定的。
          由于不使用ECC校驗碼,燒寫過程中會不斷提示以下信息:
          Writing data without ECC to NAND-FLASH is not reeom-mended
          可以修改driver/mtd/nand/nand base.C文件的nand_write_page函數(shù),將輸出這條信息的命令去掉。
          最后執(zhí)行make XX_config和make all命令,生成的U-Boot.bin文件即可以運行與目標板上了。將它燒入NOR FLASH后啟動,在串口工具中能夠看到提示信息。輸入nand info命令即可查看到NAND FLASH的信息,說明U-Boot識別出了NAND FLASH。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();