先參考海思文檔《Hi3519V101 Linux開發環境使用者指南.pdf》文檔中介紹了各種檔案系統的制作指令。
在我們的闆子中使用的是SPI NOR FLASH, 該flash 塊大小為64K。
4.3.2 jffs2
jffs2 是 RedHat 的 David Woodhouse 在 jffs 基礎上改進的檔案系統,是用于微型嵌入式裝置的原始閃存晶片的實際檔案系統。jffs2 檔案系統是日志結構化的可讀寫的檔案系統。
jffs2 的優缺點如下:
# 優點
使用了壓縮的檔案格式。最重要的特性是可讀寫操作。
# 缺點
jffs2 檔案系統挂載時需要掃描整個 jffs2 檔案系統,是以當 jffs2 檔案系統分區增大時,挂載時間也會相應的變長。使用 jffs2 格式可能帶來少量的 Flash 空間的浪費。這主要是由于日志檔案的過度開銷和用于回收系統的無用存儲單元,浪費的空間大小大緻是若幹個資料段。jffs2 的另一缺點是當檔案系統已滿或接近滿時,jffs2 運作速度會迅速降低。這是因為垃圾收集的問題。
加載 jffs2 檔案系統時的步驟如下:
步驟 1. 掃描整個晶片,對日志節點進行校驗,并且将日志節點全部裝入記憶體緩存。
步驟 2. 對所有日志節點進行整理,抽取有效的節點并整理出檔案目錄資訊。
步驟 3. 找出檔案系統中無效節點并且将它們删除。
步驟 4. 最後整理記憶體中的資訊,将加載到緩存中的無效節點釋放
由此可以看出雖然這樣能有效地提高系統的可靠性,但是在一定程度上降低了系統的速度。尤其對于較大的閃存晶片,加載過程會更慢。為了使核心支援 jffs2 檔案系統,必須在編譯核心時把 jffs2 的選項加入(我們釋出的核心預設已經加入了支援)。在 make menuconfig 後,進入“File>systems”,選擇“miscellaneous filesystems”,最後選中其中的“Journalling Flash File System v2 (JFFS2) support”選項(SDK 裡面提供的核心預設已經選擇了該檔案系統的支援)。
jffs2 的制作方法為:
hisilicon$mkfs.jffs2 –d ./rootbox -l –e 0x20000 -o jffs2-root.img
其中,mkfs.jffs2 工具可以從網際網路中下載下傳,也可以在 SDK 包中找到。rootbox 為之前已經制作好的根檔案系統。參數說明如表 4-2 所示。
表4-2 JFFS2 參數表
參數 說明
d 指定根檔案系統
l little-endian 小端模式
e Flash 的塊大小
o 輸出映像檔案
進入核心osdrv目錄:
/home/xiaoxxxx.lu/hisi/hi3519/pan_v1.0.10/Hi3519V101_SDK_V1.0.1.0/osdrv
按照文檔上面的指令,制作出來的檔案系統
./tools/pc/jffs2_tool/mkfs.jffs2 -d /home/xiaoxxxx.lu/back_up/rootfs_mk/ -l -e 0x20000 -o ./pub/rootfs_hi3519_64k.jffs2 --pad=0xA00000
由于按照他預設的 0x20000 制作出來的rootfs 出現了如下問題:
ode at 0x0000f568 with length 0x00000b20 would run over theend of the erase block
Perhaps the file system was created with the wrong erasesize?
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at0x0000f56c: 0x0b20 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at0x0000f570: 0x74a8 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at0x0000f574: 0x001d instead
檢查之後發現是制作的根檔案系統時塊大小設定錯了,我們隻需要修改mkfs.jffs2後-e的參數即可,例如本例,現在spi flash的塊大小隻有64k,而我制作檔案系統之時設定成128k即0x20000,修改如下:
./tools/pc/jffs2_tool/mkfs.jffs2 -d /home/xiaoxxxx.lu/back_up/rootfs_ar0134/ -l -e 0x10000 -o ./pub/ar0134_fs/rootfs_hi3519_64k.jffs2
-e 參數,擴充說明:
64K 對應 0x10000
128K 對應 0x20000
256K 對應 0x40000
生成的檔案系統目錄在 ./pub/ 下226_fs 差別就是home/ 下面的檔案與ar0134 不一緻,其他都一樣的。
./tools/pc/jffs2_tool/mkfs.jffs2 -d /home/xiaoxxxx.lu/back_up/rootfs_imx226/ -l -e 0x10000 -o ./pub/imx226_fs/rootfs_hi3519_64k.jffs2