一、前言
主要講述針對 Flash 設備而發展的兩種文件系統JFFS2和cramfs。依然以實操為主,理論為輔,所有的數據都通過本人驗證。
JFFS2和cramfs都是基於MTD驅動程序。JFFS2文件系統是第二代日志閃存文件系統,主要應用在NOR flash,並提供耗損均衡技術。缺點是當文件系統變滿時,因為垃圾收集的增多導致運行速度會受影響。JFFS2文件系統掛載時會掃描整個flash中的內容。
Cramfs文件系統是一個簡單小巧的文件系統,可以對文件進行壓縮,很適合放到小容量的ROM中,Cramfs屬於一種只讀壓縮文件系統。Cramfs速度快效率高,由於只讀特性可以保護文件系統免受破壞。
在下一章介紹網絡文件系統NFS,NFS是在嵌入式開發過程必備的技術手段。
二、實操JFFS2文件系統
在工作站(unbutn)構建JFFS2鏡像,需要mkfs.jffs2工具,該工具需要在工作站上安裝。在工作站安裝mkfs.jffs2工具,生成的jffs2鏡像在mtd子系統中使用。
1、工作站安裝mkfs.jffs2工具
2、構建JFFS2鏡像
rootfs_mini6410文件夾是目標板默認的根文件系統,JFFS2鏡像是從一個目錄構建而來,目錄中包含我們想放到這個文件系統鏡像中的所有文件。當這個目錄放置了合適的運行文件后,就可以作為mkfs.jffs2目錄的模板了。mkfs.jffs2命令會從一個目錄樹生成一個格式化好的JFFS2文件系統鏡像。-d表示文件系統模板位置,-o表示指定輸出文件的文件名,最終的JFFS2鏡像會被寫入jffs2.bin文件中。
3、配置目標板內核以支持JFFS2文件系統
目標板內核需要配置開啟MTD的命令行分區表解析,具體位置“Device Drivers”->” Memory Technology Device (MTD) support”->” Command line partition table parsing”,將該功能編譯進內核。
配置JFFS2文件系統驅動為模塊,可以動態加載到目標板內核中測試。配置位置“File systems”->”Miscellaneous filesystems”,將“Journalling Flash File System v2(JFFS2) support”配置為動態模塊,其他配置為編譯進內核。
4、編譯內核(工作站上編譯)
5、更換內核和加載JFFS2文件系統驅動(在目標板上操作)
將新編譯出來的zImage拷貝到SD卡啟動盤中進行內核升級。如何對mini6410進行內核燒寫請自行解決。更換完內核后,加載JFFS2文件系統,如下圖所示。
JFFS2鏡像jffs2.bin在本節沒有進行掛載,會在后續MTD子系統系列章節中介紹,掛載的命令為“mount -t jffs2 /dev/sdb1 /mnt/app_ext/”。
三、實操cramfs文件系統
在工作站(unbutn)構建cramfs鏡像,需要cramfs工具,該工具需要在工作站上安裝。
1、工作站安裝cramfs工具
先安裝需要的ruby和zlib1g-dev庫,再下載Cramfs源碼解壓進行編譯安裝。Cramfs源碼可以在sourceforge上下載
進行編譯,編譯通過后會在當前目錄下生成cramfsck和mkcramfs兩個可執行文件。
將生成的可執行二進制文件拷貝到sbin目錄下,可以在任何目錄下調用。
2、制作cramfs文件系統
這里依然使用目標板默認的根文件系統目錄作為模板,這個模板有大小限制,指定cramfs.image文件為目標文件。將生成的目標文件cramfs.image拷貝到上一節制作的ext3類型的分區中,即sda3分區。
3、配置目標板內核支持cramfs文件系統
將cramfs文件系統驅動編譯為模塊,可以動態加載。
4、編譯內核
5、加載cramfs文件系統驅動並掛載
使用第三章“「嵌入式文件系統(三)」ext3和ext4”教授的ftp方法,將cramfs.ko文件從工作站傳輸到目標板上。

將TF卡媒介插入目標板上,首先掛載sda3分區到/mnt/ext3_test掛載點下,因為cramfs文件系統在這個分區存放。最后使用mount掛載ext3_test文件夾下的cramfs文件系統到/mnt/cramfs掛載點下,進入/mnt/cramfs文件夾發現根文件系統都解壓了出來。
“loop是mount用來加載loop設備的選項,不是文件系統類型。loop:用來把一個文件當成硬盤分區掛接上系統”。
自此JFFS2和cramfs類型文件系統實操結束。JFFS2和cramfs類型文件系統生成的目標文件可以通過下載器燒寫到flash中,嵌入式系統啟動時掛載上。
參考鏈接:https://author.baidu.com/home?from=bjh_article&app_id=1717766052434706