制作 JFFS2 文件系統(tǒng)是通過工具 mkfs.jffs2 將文件系統(tǒng)目錄制成映像文件。制作工具 mkfs.jffs2 需要編譯 zhb 庫和 mtd-utils,下面詳細(xì)介紹其制作過程。
1.內(nèi)核配置MTD驅(qū)動(dòng)支持和JFFS2支持
我們可以了解 YAFFS2 自帶 MTD 驅(qū)動(dòng),而 JFFS2 文件系統(tǒng)則需要在內(nèi)核中配 置 MTD 驅(qū)動(dòng)支持。
內(nèi)核也必須支持 JFFS2 文件系統(tǒng)。 在編譯內(nèi)核時(shí)選擇 Device Drivers ---> Memory Technology Device (MTD) support --->, 進(jìn)入 Memory Technology Device 配置窗口,如圖 5.14 所示。 在編譯內(nèi)核時(shí)選擇 File systems --->Miscellaneous filesystems--->,進(jìn)入 Miscellaneous filesystems 配置窗口,選擇支持 JFFS2 文件系統(tǒng),如
2.制作工具mkfs.jffs2
制作工具 mkfs.jffs2 是用于制作 JFFS2 映像文件。制作 JFFS2 映像文件需要以下兩個(gè)文件:
(1)編譯安裝 zlib 庫,用于文件壓縮和解壓。進(jìn)入 zlib 的解壓目錄下,使用 configure命令生成 Makefile。
# ./configure --prefix=/usr/local/arm/4.4.3/arm-none-linux-gnueabi/libc -shared
修改生成的 Makefile 如下:
CC=arm-linux-gcc
LDSHARED= arm-linux-gcc -shared
-Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=arm-linux-gcc –E
AR=arm-linux-ar
RANLIB=arm-linux-ranlib
執(zhí)行 make 和 make install 進(jìn)行編譯和安裝。
#make
#make install
編譯和安裝完成后在目錄/usr/local/arm/4.4.3/arm-none-linux-gnueabi/libc/lib 下會(huì)生成 動(dòng)態(tài)和靜態(tài)庫文件 libz.a、libz.so、libz.so.1.2.8 和 libz.so.1。
(2)編譯工具 mtd-utils。進(jìn)入 mtd-utils 的解壓目錄,執(zhí)行 make 進(jìn)行編譯。完成編譯后,新生成的工具
mkfs.jffs2、mkfs.jffs 等在目錄/usr/local/jffs_root/tmp/mtd-utils-1.0.0 下。
# tar jxvf mtd-utils-1.5.0.tar.bz2
# cd mtd-utils-1.5.0
# make
# make install
將該路徑添加到環(huán)境變量 PATH 中。
#PATH=$PATH: /usr/local/jffs_root/tmp/mtd-utils-1.0.0
(3)制作 JFFS2 映像文件。制作 JFFS2 根文件系統(tǒng)的過程與其他文件系統(tǒng)的過程相同,
制作 JFFS2 映像文件的命令如下:
#mkfs.jffs2 -r jffs_root -o jffs_root.jffs2 -e 0x4000 --pad=0x800000 -s 0x200 -n
各個(gè)參數(shù)的含義如下所述。
-r:指定文件系統(tǒng)。
-o:指定輸出的映像文件名。
-e:擦除塊的大小(block size),不同的 flash,其 block size 不一樣。
--pad (-p):指定輸出文件的大小,也就是 jffs_root.jffs2 的大小。重要的是, 為 了不浪費(fèi) flash 的空間,該值應(yīng)該符合 flash driver 劃分塊的大小。
-n:在每個(gè)擦除塊中不添加 clreanmarker(消除標(biāo)志)
本文摘自《linux系統(tǒng)移植(第2版)》