或以为孤权重,妄相忖度
分类: LINUX
2009-06-20 14:02:04
Linux2.6.26.8 移植之二:YAFFS2文件系统移植
一、YAFFS文件系统简介
YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计的嵌入式文件系统。与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。
YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。它们的不同之处在于:
(1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。
(2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。
(3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。
YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD( Memory Technology Devices,内存技术设备)是对Flash操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。
二、YAFFS文件系统的移植
1、让内核支持yaffs:
下载yaffs2.tar.gz, 解压,里面有个patch-ker.sh,用来给内核打补丁使内核支持yaffs
$./patch-ker.sh c kerneldir
这样makemennuconfig的时File systems ---> Miscellaneous filesystems ---> 里面就有yaffs2了。
2、配置内核时选中YAFFS支持:
File systems --->
Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
[ ] Use older-style on-NAND data format with pageStatus byte
[*] Lets Yaffs do its own ECC
[ ] Use the same ecc byte order as Steven Hill's nand_ecc
-*- 2048 byte (or larger) / page devices
3、在/arch/arm/plat-s3c24xx/common-smdk.C找到smdk_default_nand_part结构,修改nand分区,如下://如果你已经成功移植内核,且分区已经完成,则,这一步可以省略
static struct mtd_partition smdk_default_nand_part[] = {
{
name: "vivi",
offset: 0,
size: 0x00020000
}, {
name: "param",
offset: 0x00020000,
size: 0x00010000
}, {
name: "kernel",
offset: 0x00040000,
size: 0x001C0000
}, {
name: "root",
offset: 0x00200000,
size: 0x03e00000
}
};
注:请结合vivi里面的分区来进行设置。
4、配置内核时选中MTD支持:
Memory Technology Devices (MTD) --->
<*> Memory Technology Device (MTD) support
[*] MTD partitioning support
……
--- User Modules And Translation Layers
<*> Direct char device access to MTD devices
<*> Caching block device access to MTD devices
……
NAND Flash Device Drivers --->
<*> NAND Device Support
<*> NAND Flash support for S3C2410 SoC
[*] S3C2410 NAND driver debug
5、编译内核并将内核下载到开发板的flash中。
此时,你可能会遇到诸如:WARNING: Unable to open an initial console等的错误,这是因为此时,根分区里面还没有任何文件系统或者虽然已经有文件系统,但无法被内核识别,多半是文件系统的原因,请重新移植根文件系统。
2、挂载文件系统,后续。