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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > UBI文件系統(tǒng)簡(jiǎn)介

          UBI文件系統(tǒng)簡(jiǎn)介

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

          在linux-2。6。27以前,談到Flash,大家很多時(shí)候多會(huì)想到cramfs、jffs2、yaffs2等。它們也都是基于+mtd+flash設(shè)備的架構(gòu)。linux-2。6。27后,內(nèi)核加入了一種新型的FLASH文件系統(tǒng)(UnsortedBlockImages)。這里簡(jiǎn)單介紹下文件系統(tǒng)加入的原因,及使用方法。我也是剛接觸到這個(gè)文件系統(tǒng),可能有理解不對(duì)的地方,也請(qǐng)指正。

          本文引用地址:http://www.ex-cimer.com/article/149191.htm

          一、產(chǎn)生的背景

          FLASH具有的“先擦除再寫(xiě)入”、壞塊、“有限的讀寫(xiě)次數(shù)”等特性,目前管理FLASH的方法主要有:

          1、采用MTD+FTL/NFTL(flash轉(zhuǎn)換層/nandflash轉(zhuǎn)換層)+傳統(tǒng)文件系統(tǒng),如:FAT、ext2等。FTL/NFTL的使用就是針對(duì)FLASH的特有屬性,通過(guò)軟件的方式來(lái)實(shí)現(xiàn)日志管理、壞塊管理、損益均衡等技術(shù)。但實(shí)踐證明,由于知識(shí)產(chǎn)權(quán)、效率等各方面因素導(dǎo)致本方案有一定的局限性。

          2、采用硬件翻譯層+傳統(tǒng)文件系統(tǒng)的方案。這種方法被很多存儲(chǔ)卡產(chǎn)品采用,如:SD卡、U盤(pán)等。這種方案對(duì)于一些產(chǎn)品來(lái)說(shuō),成本較高。

          3、采用MTD+FLASH專用文件系統(tǒng),如JFFS1/2,YAFFS1/2等。它們大大提高了FLASH的管理能力,并被廣泛應(yīng)用。

          JFFS2、YAFFS2等專用文件系統(tǒng)也存在著一些技術(shù)瓶頸,如:內(nèi)存消耗大,對(duì)FLASH容量、文件系統(tǒng)大小、內(nèi)容、訪問(wèn)模式等的線性依賴,損益均衡能力差或過(guò)渡損益等。在此背景下內(nèi)核加入了文件系統(tǒng)的支持。

          二、用法

          環(huán)境:omap3530處理器、(128MByte16位NANDFlash)、linnux-2。6。28內(nèi)核

          1、配置內(nèi)核支持UBIFS

          DeviceDrivers--->MemoryTechnologydevice(MTD)support--->UBI-Unsortedblockimages--->EnableUBI

          配置mtd支持UBI接口

          Filesystems--->MiscellaneousfileSystems--->UBIFSfilesystemsupport

          配置內(nèi)核支持UBIFS文件系統(tǒng)

          2、將一個(gè)MTD分區(qū)4掛載為UBIFS格式

          ●flash_eraseall/dev/mtd4//擦除mtd4

          ●ubiattach/dev/ubi_ctrl-m4//和mtd4關(guān)聯(lián)

          ●ubimkvol/dev/ubi0-Nrootfs-s100MiB//設(shè)定volume大?。ú皇枪潭ㄖ?,可以用工具改變)及名稱

          ●mount-tubifsubi0_0/mnt/ubi或mount-tubifsubi0:rootfs/mnt/ubi

          3、制作UBIFS文件系統(tǒng)

          在制作UBI鏡像時(shí),需要首先確定以下幾個(gè)參數(shù):

          MTDpartitionsize;//對(duì)應(yīng)的FLASH分區(qū)大小

          flashphysicaleraseblocksize;//FLASH物理擦除塊大小

          minimumflashinput/outputunitsize;//最小的FLASH輸入輸出單元大小

          forNANDflashes-sub-pagesize;//對(duì)于nandflash來(lái)說(shuō),子頁(yè)大小

          logicaleraseblocksize。//邏輯擦除塊大小

          參數(shù)可以由幾種方式得到

          1)如果使用的是2。6。30以后的內(nèi)核,這些信息可以通過(guò)工具從內(nèi)核獲得,如:mtdinfo–u。

          2)之前的內(nèi)核可以通過(guò)以下方法:

          ●MTDpartitionsize:從內(nèi)核的分區(qū)表或cat/proc/mtd獲得

          ●flashphysicaleraseblocksize:從flash芯片手冊(cè)中可以得到FLASH物理擦除塊大小,或cat/proc/mtd

          ●minimumflashinput/outputunitsize:

          1)norflash:通常是1個(gè)字節(jié)

          2)nandfalsh:一個(gè)頁(yè)面

          ●sub-pagesize:通過(guò)flash手冊(cè)獲得

          ●logicaleraseblocksize:對(duì)于有子頁(yè)的NANDFLASH來(lái)說(shuō),等于“物理擦除塊大小-1頁(yè)的大小”

          3)也可以通過(guò)ubi和mtd連接時(shí)的產(chǎn)生的信息獲取,如:

          #modprobeubimtd=4//ubi作為模塊加載

          #ubiattach/dev/ubi_ctrl-m4//通過(guò)ubiattach關(guān)聯(lián)MTD

          UBI:attachingmtd4toubi0

          UBI:physicaleraseblocksize:131072bytes(128KiB)

          UBI:logicaleraseblocksize:129024bytes

          UBI:smallestflashI/Ounit:2048

          UBI:sub-pagesize:512

          UBI:VIDheaderoffset:512(aligned512)

          UBI:dataoffset:2048

          UBI:attachedmtd4toubi0

          更詳細(xì)的解釋參見(jiàn)http://www。linux-mtd。infradead。org/doc/ubi。html#L_overhead

          #mkfs。ubifs-rrootfs-m2048-e129024-c812-oubifs。img

          #ubinize-oubi。img-m2048-p128KiB-s512/home/lht/omap3530/tools/ubinize。cfg

          -r:制定文件內(nèi)容的位置

          -m:頁(yè)面大小

          -e:邏輯擦除塊大小

          -p:物理擦除塊大小

          -c:最大的邏輯擦除塊數(shù)量

          對(duì)我們這種情況,文件系統(tǒng)最多可以訪問(wèn)卷上的129024812=100M空間

          -s:最小的硬件輸入輸出頁(yè)面大小,如:k9f1208為256(上下半頁(yè)訪問(wèn))

          其中,ubinize。cfg的內(nèi)容為:

          [ubifs]

          mode=ubi

          image=ubifs。img

          vol_id=0

          vol_size=100MiB

          vol_type=dynamic

          vol_name=rootfs

          vol_flags=autoresize

          4、利用uboot燒寫(xiě)、啟動(dòng)UBIFS鏡像

          1)燒寫(xiě)UBIFS鏡像

          OMAP3DevKit8000#mmcinit

          OMAP3DevKit8000#fatloadmmc0:181000000ubi。img

          readingubi。img

          12845056bytesread

          OMAP3DevKit8000#nandunlock

          device0wholechip

          nand_unlock:start:00000000,length:235456!

          NANDflashsuccessfullyunlocked

          OMAP3DevKit8000#nandeccsw

          OMAP3DevKit8000#nanderase6800007980000

          NANDerase:device0offset0x680000,size0x7980000

          Erasingat0x7fe0000--100%complete。

          OK

          OMAP3DevKit8000#nandwrite。i81000000680000$(filesize)

          NANDwrite:device0offset0x680000,size0xc40000

          Writingdataat0x12bf800--100%complete。

          12845056byteswritten:OK

          燒寫(xiě)過(guò)程和燒寫(xiě)內(nèi)核鏡像的過(guò)程一致,所以UBI文件系統(tǒng)應(yīng)該不像yaffs文件系統(tǒng)那樣用到了nand的OOB區(qū)域。

          2)設(shè)置UBIFS文件系統(tǒng)作為根文件系統(tǒng)啟動(dòng)的參數(shù)

          OMAP3DevKit8000#setenvbootargsconsole=ttyS2,115200n8ubi。mtd=4root=ubi0:rootfs

          rootfstype=ubifsvideo=omapfb:mode:4。3inch_LCD

          OMAP3DevKit8000#setenvbootcmdnandread。i80300000280000200000;bootm80300000

          根文件系統(tǒng)的位置在MTD4上

          系統(tǒng)啟動(dòng)時(shí)會(huì)打印出如下和UBI相關(guān)的信息:

          Creating5MTDpartitionsnumbergoodPEBs:970

          UBI:numberofbadPEBs:2

          UBI:max。allowedvolumes:128

          UBI:wear-levelingthreshold:4096

          UBI:numberofinternalvolumes:1

          UBI:numberofuservolumes:1

          UBI:availablePEBs:0

          UBI:totalnumberofreservedPEBs:970

          UBI:numberofPEBsreservedforbadPEBhandling:9

          UBI:max/meanerasecounter:2/0



          關(guān)鍵詞: 簡(jiǎn)介 系統(tǒng) 文件 UBI

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();