基于ARM的嵌入式文件系统YAFFS的移植
lock3.
static struct mtd_partition partition_info[]={
[0] = {
.name = u-boot,
.size = 0x00020000,
.offset = 0x00000000,
},
[1] = {
.name = param,
.size = 0x00010000,
.offset = 0x00020000,
},
[2] = {
.name = kernel,
.size = 0x00100000,
.offset = 0x00030000,
},
[3] = {
.name = root,
.size = 0x01900000,
.offset = 0x00130000,
},
[4] = {
.name = user,
.size = 0x025d0000,
.offset = 0x01a30000,
}
};注意,这里的分区信息应与U-BOOT中保持一致.
2.YAFFS 的校验算法和MTD NAND FLASH驱动的校验算法不同,如果在内核中由MTD来处理ECC,会造成MTD 认为所有的page都校验错误.所以要把要把NAND驱动中的ECC校验关闭.采用YAFFS2自带的校验算法,基于这个考虑,在drivers/mtd/nand/s3c2410.c中,将 chip->eccmode=NAND_ECC_SOFT修改为chip->eccmode=NAND_ECC_SOFT.
3.从开源网站下载YAFFS2文件系统的源码,在宿主机下用tar xzvf yaffs2.tar.gz命令解压,在移植的内核目录下建立yaffs文件夹,并将需要的文件拷贝到yaffs文件夹下.简单介绍下yaffs文件系统代码的函数功能.
# mkdir $LINUXDIR/fs/yaffs
# cp Makefile.kernel $LINUXDIR/fs/yaffs/Makefile
# cp Kconfig $LINUXDIR/fs/yaffs
# cp *.c *.h $LINUXDIR/fs/yaffs
4.修改fs/Kconfig,vi Kconfig ,添加 source fs/ /Kconfig
5.修改Makefile文件:
# cd $LINUXDIR/fs
# vi Makefile obj-$(CONFIG_YAFFS_FS) += yaffs/
6 配置和编译内核
1.选中对MTD(memory technology device内存技术设备)的支持.
Memory Technology Device (MTD)
support --->
[~] MTD concatenating support
• MTD partitioning support
[~] RedBoot partition table parsing
[~] Command line partition table parsing
User Modules And Translation Layers
• Direct char device access to MTD devices
• Caching block device access to MTD devices
MTD 主要是用于访问memory设备(ROM、flash)的Linux的子系统.MTD可以使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口.
2.选中NAND Device Support
• NAND Device Support --->
[~] Verify NAND page writes
• NAND Flash support for S3C2410/S3C2440 SoC
• S3C2410 NAND driver debug
[~] S3C2410 NAND Hardware ECC
这样就完成了内核对NAND FLASH的支持.
3.由于添加了YAFFS2文件系统,所以在内核的配置菜单 [File systems] 中的 [miscellaneous filesystems] 中增加了 [Yaffs2 file systems support] 选项.这个选项就是 YAFFS2的配置内容.
File systems ---> Miscellaneous filesystems --->
• YAFFS2 file system support
--- 512 byte / page devices
• Lets Yaffs do its own ECC
• Use the same ecc byte order as Steven Hill's nand_ecc.c
--- 2048 byte (or larger) / page devices
• Autoselect yaffs2 format
• Disable lazy loading
• Turn off wide tnodes
• Turn off debug chunk erase check
• Cache short names in RAM
选择这个选项的全部内容,保存配置,然后退到终端,输入make zImage,重新编译内核,这样就就完成了对YAFFS文件系统的定制.
7 测试挂载的YAFFS文件系统
1.用imagewrite命令将YAFFS文件系统的映像文件烧写到mtdblock3分区.
2.在ramdisk根文件系统中创建挂载目录,使用命令mkdir /mnt/yaffs.
3. 执行mount –t yaffs /dev/mtdblock/3 /mnt/yaffs来挂载YAFFS文件系统.
4. 由于内核配置了proc文件系统,用cat /proc/mounts 可以查看已经成功挂载了YAFFS文件系统,用ls /mnt/yaffs可以查看YAFFS文件系统的内容.
8 结束语
本文为开发者提供了在ARM9平台上移植YAFFS文件系统的方法和过程的参考,创新之处是在当前嵌入式应用中比较新的2.6内核上测试完成的.测试过程中 YAFFS稳定性能比JFFS2文件系统要稳定的多,而且mount分区的时间也比JFFS2文件系统少的多。需要注意一点是,即使NAND FLASH 是512+16B的,不需要使用YAFFS2,也必须将对2kpage的NAND FLASH的支持这一项选上,否则编译无法通过.由于ARM- S3C2410不支持大容量的NAND FLASH,所以flash是512+16B / page的,即使你选择的是YAFFS2文件系统,内核也会自动选择挂载为YAFFS1文件系统,由于实验系统的局限性,本文只在ARM-S3C2410平台上实现了YAFFS1文件系统的移植
YAFFS 移植 系统 文件 ARM 嵌入式 基于 相关文章:
- 如何在C51系统上实现YAFFS文件系统(05-01)
- YAFFS文件系统在嵌入式Linux系统中的构建与改进(08-18)
- S5PV210(TQ210)学习笔记——8位HWECC与YAFFS2的OOB布局(11-28)
- Busybox编译及其yaffs2文件系制作(11-22)
- yaffs2中,mount mtd block设备后,insmod就死掉了(11-20)
- cramfs+yaffs嵌入式平台的实现(08-16)