mtd文件系統

本文主要介紹如何在AT91SAM9261EK板子上製作和使用jffs2文件系統,使用的是linux-2.6.21內核。

首先配置MTD

$ make menuconfig
            進入 Memory Technology Devices (MTD) --->
            <*> Memory Technology Device (MTD) support
            [*] Debugging
            [*] MTD partitioning support
            [*]  Command line partition table parsing
            [*] Direct char device access to MTD devices
            [*] Caching block device access to MTD devices
            RAM/ROM/Flash chip drivers ----->
            <*> Detect non-CFI AMD/JEDEC-compatible flash chips
            <*> Support for AMD/Fujitsu flash chips
            Mapping drivers for chip access --->
            [*] Support non-linear mappings of flash chips
            Self-contained MTD device drivers --->
            [*] Support for AT45... DataFlash
            NAND Flash Device Drivers ---->
            [*] NAND Device Support
            [*] Support for NAND Flash /SmartMedia on AT91
            File systems ---->
            <*> Second extended fs support
            [*] Inotify file change notification support
            [*] Inotify support for user space
            <*> Filesystem in Userspace support
            Miscellaneous filesystems
            <*> Journalling Flash File System v2 (JFFS2) support
            [*] JFFS2 write-buffering support
            <*> Compressed ROM file system support (cramfs)

以上配置中沒有列出的,都沒選;其配置僅做參考,可根據自己的需要自行配置。

$ make all

其次製作mtd-util工具

從網上下載zlib-1.2.3.tar.gz 解壓縮 $ cd zlib-1.2.3

$ ./configure –prefix=/usr/local/arm/3.4.1/arm-linux --shared

修改Makefile如下:

CC=arm-linux-gcc

LDSHARED=arm-linux-ld -shared

$ make all

$ make install

注意:這裏是安裝在/usr/local/arm/3.4.1/arm-linux目錄下

由於交叉編譯mtd工具時需要zlib.h文件,所以在編譯之前先安裝zlib庫文件。

從網上下載 mtd-snapshot-20050519.tar.bz2 解壓縮 $ cd mtd/util

修改該目錄下的Makefile:

CROSS=arm-linux-

$ make all

然後將該目錄下生成的 flash_erase,flash_eraseall, mkfs.jffs2工具放在ramdisk 文件系統中(我這裏放在/bin目錄下),另外在 ramdisk文件系統的dev目錄下要保證有mtd0~mtd9,mtdblock0~mtdblock9這些設備,如果沒有可參考 ramdisk文件系統的製作,也可從pc機相同目錄下拷貝,要加上文件屬性。

另外,需要將/arm-linux/lib目錄下的libz.so, libz.so.1, libz.so.1.2.3文件拷貝到ramdisk文件系統的/lib目錄下,否則mkfs.jffs2工具不能使用。

最後將新生成的uImage和ramdisk文件下載到板子上,起動系統,使用命令 cat /proc/mtd 可以看到

dev: size erasesize name

mtd0: 00040000 00020000 "Partition 1"

mtd1: 0ffc0000 00020000 "Partition 2"

mtd2: 00420000 00000210 "spi0.0-AT45DB321x"

這裏mtd0,mtd1是nandflash上的分區; mtd2是dataflsh上的分區,該分區上放有u-boot,uImage.img,ramdisk.img,所以我們這裏可以使用空的nandflash上的兩個分區。使用之前要先用工具flash_erase或者flash_eraseall擦除nandflash,具體使用的步驟如下:

# flash_erase /dev/mtd1

製作jffs2映像

# cd /var/tmp

# mkdir jffs2 (jffs2下的目錄可以任意建)

# mkfs.jffs2 –d jffs2/ -o jffs2.img

# cp /var/tmp/jffs2/jffs2.img /dev/mtdblock1

最後# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可,使用結束可使用$ umount /mnt/mtd 卸載.

如果只是當作普通的jffs2 來使用dataflash或者nandflash,可不必製作 jffs2映像,只需要最後一步,# mount -t jffs2 /dev/mtdblock1 /mnt/mtd即可。



AT91sam9263EK使用JFFS2根文件系統  

在AT91sam9263EK成功配置了NFS根文件系統後,後來又想把JFFS2也移植到AT91sam9263EK上吧,說幹就幹。

1. 呵呵,其實很簡單我使用的linux-2.6.20內核裏已經有jffs2 文件系統支持,選上jffs2即可

File systems --->

Miscellaneous filesystems --->

<*> Journalling Flash File System v2 (JFFS2) support 

(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy) 

[*] JFFS2 write-buffering support 

[*] JFFS2 summary support (EXPERIMENTAL) 

[*] JFFS2 XATTR support (EXPERIMENTAL) 

[*] JFFS2 POSIX Access Control Lists 

[*] JFFS2 Security Labels 

[*] Advanced compression options for JFFS2 

[*] JFFS2 ZLIB compression support 

[*] JFFS2 RTIME compression support 

[ ] JFFS2 RUBIN compression support 

JFFS2 default compression mode (priority) 

選上MTD支持

Device Drivers --->

Memory Technology Devices (MTD) --->

<*> Memory Technology Device (MTD) support 

[ ] Debugging 

<*> MTD concatenating support 

[*] MTD partitioning support 

< > RedBoot partition table parsing 

[*] Command line partition table parsing 

<*> ARM Firmware Suite partition parsing 

--- User Modules And Translation Layers 

<*> Direct char device access to MTD devices 

<*> Caching block device access to MTD devices 

<*> FTL (Flash Translation Layer) support 

<*> NFTL (NAND Flash Translation Layer) support 

[ ] Write support for NFTL 


2. 從ttp://www.linux-mtd.infradead.org/上下載

mtd-utils-1.0.0.tar.gz 到宿主機。

解壓 

tar xvzf mtd-utils-1.0.0.tar.gz

進入mtd-utils-1.0.0目錄修改Makefile進行編譯。

編譯出mkfs.jffs2,nandwrite等工具


3. 創建jffs2根文件系統:

首先要有一個其他類型的根文件系統,製作和獲取方式可以參見<< AT91sam9263EK使用NFS根文件系統>>

比如可以:

mount -t cramfs rootfs_lnxdemo.cramfs tmp/ -o loop

rootfs_lnxdemo.cramfs由atmel提供當然你可以自己製作,這裏直接使用atmel的省去了製作的麻煩。

tar czvf target.tar.gz tmp/

生成jffs2根文件系統鏡像:

mkfs.jffs2 –l –s 0x400 –e 0x20000 –d tmp/ -o target.jffs2

4. 燒寫jffs2根文件系統鏡像到nand flash。

燒寫方法應該有多種常用的有2種(呵呵自己認爲的):

a.通過nand編程器燒寫鏡像文件到nand flash芯片然後再焊接到pcb.

b.掛載nfs文件系統,使用nandwrite工具寫鏡像文件

到mtd設備。

第一種適合生產時使用,而我們測試時候比較適合使用第二種方式。

掛載nfs文件系統:

nandwrite –o /dev/mtd1 target.jffs2

或者是在nfs 根文件系統下:

mount –t jffs2 /dev/mtdblock1 /mnt

cd /mnt

tar xvzf ../target.tar.gz

umount /mnt

5. 配置內核啓動參數如下:

setenv bootargs mem=64M console=ttyS0 115200 root=/dev/mtdblock1 rootfstype=jffs2 rw

6. 重新啓動,呵呵內核使用jffs2文件系統自動掛載根文件系統到mtdblock1設備上。

ls 測試一下

vi test

hello this is for test jffs2 filesystem.

保存退出。

Sync

重新啓動

vi test

內容依舊。

Ok jffs2根文件系統引導成功。

發佈了22 篇原創文章 · 獲贊 14 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章