分类: 嵌入式
2010-12-01 00:58:31
Yaffs文件系统的移植
STEP 1:
在vivi中进行分区:
vivi> bon part 0 192K 2240K 22720K:M
STEP 2:
修改kernel/drivers/mtd/nand/smc_s
static struct mtd_partition smc_partitions[] = {
{
name: "bon",
size: 0x04000000,
offset: 0x0,
mask_flags: MTD_WRITEABLE, /*force read-only */
}, {
name: "mtd",
size: 0x02800000,
offset: 0x01630000,
//下面这句如不屏蔽则yaffs是只读的。
// mask_flags: MTD_WRITEABLE, /* force read-only */
}
};
STEP 3:
将kernel/drivers/mtd/nand/smc_s
#undef CONFIG_MTD_SMC_S
#define CONFIG_MTD_SMC_S
STEP 4:
移植yaffs源码。
在kernel/fs目录下新建yaffs目录,将yaffs源码根目录下的所有.c .h 文件拷贝到新建的yaffs目录下。也可直接把yaffs.tar.gz在kernel/fs目录下解压,生成yaffs目录。
STEP 5:
创建yaffs_config.h文件,其内容如下:
#ifndef __YAFFS_CONFIG_H__
#define __YAFFS_CONFIG_H__
#define CONFIG_YAFFS_MTD_ENABLED
#define CONFIG_YAFFS_USE_OLD_MTD
#endif
STEP 6:
创建Makefile文件,其内容如下:
O_TARGET := yaffs.o
obj-y := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.o
obj-m := $(O_TARGET)
include $(TOPDIR)/Rules.make
STEP 7:
在fs目录的Makefile文件中加入yaffs子目录,如下:
subdir-$(CONFIG_YAFFS_FS) += yaffs
STEP 8:
在fs目录的Config.in文件中加入yaffs选项,如下:
if [ "$CONFIG_MTD_SMC" = "y" ]; then
tristate 'Yaffs filesystem on NAND' CONFIG_YAFFS_FS
fi
注意:if后面必须跟空格,否则进入选择菜单时会出错。中括号也要加空格,否则无法显示选项。
STEP 9:
在配置内核时选择上File system->Yaffs filesystem on NAND
选择上Memory Technology Devices(MTD)->NAND Flash Devece Drivers->SMC Device Support及下属所有选项。
重新编译内核。
STEP 10:
经过以上步骤,将包含yaffs支持的内核下载到实验箱,但是在执行#cat /proc/filesystems时仍没有yaffs项目,yaffs文件系统仍不能使用。
解决方法是在所有的.c文件中都包含”yaffs_config.h”文件,以包含其中的几个宏定义。
STEP 11:
在所有.c文件中加入yaffs.config.h后,编译yaffs_mtdif.c文件出现’yaffs_oobinfo’,’useecc’相关错误,解决方法是将yaffs_mtdif.c中用nand_oobinfo定义的两个结构体屏蔽掉。
STEP 12:
经过以上步骤,把/dev/mtdblock/1挂载到/tmp目录下,即可将/tmp作为yaffs分区读写,写入的信息在掉电后仍能保存。
# mount -t yaffs /dev/mtdblock/1 /tmp
注意:根文件系统的目录结构要全,否则可能挂不上yaffs目录。最原始的根文件系统就挂不上。