新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > UBI文件系統簡介

        UBI文件系統簡介

        作者: 時間:2012-04-20 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/149191.htm

        一、產生的背景

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

        1、采用MTD+FTL/NFTL(flash轉換層/nandflash轉換層)+傳統文件系統,如:FAT、ext2等。FTL/NFTL的使用就是針對FLASH的特有屬性,通過軟件的方式來實現日志管理、壞塊管理、損益均衡等技術。但實踐證明,由于知識產權、效率等各方面因素導致本方案有一定的局限性。

        2、采用硬件翻譯層+傳統文件系統的方案。這種方法被很多存儲卡產品采用,如:SD卡、U盤等。這種方案對于一些產品來說,成本較高。

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

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

        二、用法

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

        1、配置內核支持UBIFS

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

        配置mtd支持UBI接口

        Filesystems--->MiscellaneousfileSystems--->UBIFSfilesystemsupport

        配置內核支持UBIFS文件系統

        2、將一個MTD分區4掛載為UBIFS格式

        ●flash_eraseall/dev/mtd4//擦除mtd4

        ●ubiattach/dev/ubi_ctrl-m4//和mtd4關聯

        ●ubimkvol/dev/ubi0-Nrootfs-s100MiB//設定volume大小(不是固定值,可以用工具改變)及名稱

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

        3、制作UBIFS文件系統

        在制作UBI鏡像時,需要首先確定以下幾個參數:

        MTDpartitionsize;//對應的FLASH分區大小

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

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

        forNANDflashes-sub-pagesize;//對于nandflash來說,子頁大小

        logicaleraseblocksize。//邏輯擦除塊大小

        參數可以由幾種方式得到

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

        2)之前的內核可以通過以下方法:

        ●MTDpartitionsize:從內核的分區表或cat/proc/mtd獲得

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

        ●minimumflashinput/outputunitsize:

        1)norflash:通常是1個字節

        2)nandfalsh:一個頁面

        ●sub-pagesize:通過flash手冊獲得

        ●logicaleraseblocksize:對于有子頁的NANDFLASH來說,等于“物理擦除塊大小-1頁的大小”

        3)也可以通過ubi和mtd連接時的產生的信息獲取,如:

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

        #ubiattach/dev/ubi_ctrl-m4//通過ubiattach關聯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

        更詳細的解釋參見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:制定文件內容的位置

        -m:頁面大小

        -e:邏輯擦除塊大小

        -p:物理擦除塊大小

        -c:最大的邏輯擦除塊數量

        對我們這種情況,文件系統最多可以訪問卷上的129024812=100M空間

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

        其中,ubinize。cfg的內容為:

        [ubifs]

        mode=ubi

        image=ubifs。img

        vol_id=0

        vol_size=100MiB

        vol_type=dynamic

        vol_name=rootfs

        vol_flags=autoresize

        4、利用uboot燒寫、啟動UBIFS鏡像

        1)燒寫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

        燒寫過程和燒寫內核鏡像的過程一致,所以UBI文件系統應該不像yaffs文件系統那樣用到了nand的OOB區域。

        2)設置UBIFS文件系統作為根文件系統啟動的參數

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

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

        OMAP3DevKit8000#setenvbootcmdnandread。i80300000280000200000;bootm80300000

        根文件系統的位置在MTD4上

        系統啟動時會打印出如下和UBI相關的信息:

        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



        關鍵詞: 簡介 系統 文件 UBI

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 梨树县| 柳河县| 新营市| 高安市| 铁岭市| 托克逊县| 东平县| 崇阳县| 犍为县| 岗巴县| 社会| 阿拉善盟| 达拉特旗| 安庆市| 东源县| 永福县| 建阳市| 洛扎县| 城口县| 华容县| 湘阴县| 万宁市| 射阳县| 新和县| 阿克陶县| 衡阳市| 海门市| 华亭县| 九江市| 同德县| 通许县| 民乐县| 房山区| 鲁甸县| 云林县| 东乌珠穆沁旗| 普宁市| 凤凰县| 佛山市| 中江县| 宜都市|