Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366348
  • 博文数量: 36
  • 博客积分: 2071
  • 博客等级: 大尉
  • 技术积分: 797
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-20 12:08
文章分类
文章存档

2011年(2)

2010年(34)

我的朋友

分类: 嵌入式

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_s3c2410.c文件中的smc_partitions[]如下:

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_s3c2410.c文件头部的

#undef CONFIG_MTD_SMC_S3C2410_SMDK_PARTITION 改为:

#define CONFIG_MTD_SMC_S3C2410_SMDK_PARTITION

 

STEP 4

移植yaffs源码。

kernel/fs目录下新建yaffs目录,将yaffs源码根目录下的所有.c .h 文件拷贝到新建的yaffs目录下。也可直接把yaffs.tar.gzkernel/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目录。最原始的根文件系统就挂不上。

 

阅读(1514) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~