天天看點

海思平台jffs2檔案系統制作

先參考海思文檔《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