您的位置:首页 > 职场人生

嵌入应用:如何制作和使用Jffs2文件系统 (zhuan)

2008-11-04 21:58 1011 查看

嵌入应用:如何制作和使用Jffs2文件系统 (zhuan)http://www.cnitblog.com/zouzheng/archive/2007/11/16/36384.html

本文主要介绍如何在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根[/b]文件系统

在AT91sam9263EK成功配置了NFS[/b]根[/b]文件系统后,后来又想把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根[/b]文件系统:

首先要有一个其他类型的根[/b]文件系统,制作和获取方式可以参见<< AT91sam9263EK使用NFS[/b]根[/b]文件系统>>

比如可以:

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

rootfs_lnxdemo.cramfs由atmel提供当然你可以自己制作,这里直接使用atmel的省去了制作的麻烦。

tar czvf target.tar.gz tmp/

生成jffs2根[/b]文件系统镜像:

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

4. 烧写jffs2根[/b]文件系统镜像到nand flash。

烧写方法应该有多种常用的有2种(呵呵自己认为的):

a.通过nand编程器烧写镜像文件到nand flash芯片然后再焊接到pcb.

b.挂载nfs[/b]文件系统,使用nandwrite工具写镜像文件

到mtd设备。

第一种适合生产时使用,而我们测试时候比较适合使用第二种方式。

挂载nfs[/b]文件系统:

nandwrite –o /dev/mtd1 target.jffs2

或者是在nfs[/b] 根[/b]文件系统下:

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文件系统自动挂载根[/b]文件系统到mtdblock1设备上。

ls 测试一下

vi test

hello this is for test jffs2 filesystem.

保存退出。

Sync

重新启动

vi test

内容依旧。

Ok jffs2根[/b]文件系统引导成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 文件系统 休闲