### Yaffs 文件系统制作详解
#### 一、Yaffs 文件系统简介
Yaffs(Yet Another Flash File System)是一种专为 NAND 闪存设计的嵌入式文件系统,适用于存储空间有限的设备。目前有两个主要版本:YAFFS 和 YAFFS2。YAFFS2 相比于 YAFFS1 的主要改进之一在于它更好地支持大容量的 NAND Flash 芯片。YAFFS 文件系统会根据 NAND Flash 页面的大小自动配置是否使用 YAFFS1 或 YAFFS2。
#### 二、Yaffs 与 JFFS 文件系统对比
除了 Yaffs 文件系统外,还有 JFFS 和 JFFS2 这两种文件系统也常用于嵌入式设备,特别是对于 NOR Flash 支持较好。JFFS 和 JFFS2 都是基于日志的日志型文件系统。与 NAND 相比,NOR Flash 更可靠且更易于访问,但成本较高且容量较小。因此,在选择文件系统时需根据硬件特性来决定。
#### 三、NAND Flash 上的 Yaffs 文件系统实现
在 NAND Flash 上实现 Yaffs 文件系统主要包括两个部分:一是 NAND Flash 的 MTD(Memory Technology Device)驱动;二是 Yaffs 文件系统的支持。下面详细介绍如何在 S3C2410 平台上实现内核对 Yaffs 文件系统的支持。
##### 1. 内核支持 Yaffs 文件系统
- **获取 Yaffs2 源代码**:首先需要通过 CVS 获取 Yaffs2 的源代码,具体步骤如下:
- 设置 CVSROOT 环境变量。
- 使用 `cvs login` 登录 CVS 服务器。
- 使用 `cvs checkout yaffs2` 下载 Yaffs2 源代码。
- **打补丁以支持 Yaffs2**:下载源码后,需要执行补丁脚本 `patch-ker.sh` 以确保 Linux 内核支持 Yaffs2。该脚本会在 `kernel/fs` 目录下创建一个 `yaffs2` 文件夹,并将所有必需的文件复制到该目录中。
- **查看 Kconfig 文件的变化**:通过检查 `fs/yaffs2/Kconfig` 文件可以看到,该文件添加了 Yaffs2 文件系统的配置项。同时,`fs/Makefile` 文件也进行了相应的修改,以支持 Yaffs2 文件系统的编译。
- **内核配置**:完成上述步骤后,可以通过 `make menuconfig` 查看内核配置选项中的 Yaffs2 支持情况。特别需要注意的是 ECC(Error Correction Code)校验的设置。Yaffs 文件系统本身包含 ECC 校验机制,而在 MTD 层也有 ECC 校验功能。通常会选择其中之一,例如,若选择 “Let's Yaffs do its own ECC”,则需要关闭 MTD 层的 ECC 校验功能。
- **重新编译内核**:在选择好 ECC 校验方式后,重新编译内核并下载到目标设备上。此时内核应已支持 Yaffs 文件系统。
##### 2. 验证内核支持
通过命令 `cat /proc/filesystems` 可以验证内核是否支持 Yaffs 文件系统。如果支持,则会列出 Yaffs 文件系统的名称。例如,上述内容中的输出表明内核支持 ext3 和 ext2 文件系统,同时也支持 Yaffs 文件系统。
#### 四、总结
本文介绍了如何在基于 S3C2410 的平台上制作 Yaffs 文件系统的过程,包括获取源代码、打补丁、配置内核支持等关键步骤。通过这些步骤可以确保嵌入式设备能够有效地利用 NAND Flash 存储空间,并提供稳定可靠的文件系统服务。此外,还简要讨论了与 Yaffs 类似的其他文件系统(如 JFFS 和 JFFS2),以及 NAND Flash 与 NOR Flash 在存储特性上的差异,为选择合适的文件系统提供了参考依据。