yiffer的个人空间 https://blog.eetop.cn/edesign [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

NandFlash驱动和Yaffs文件系统的移植

已有 3178 次阅读| 2009-4-5 21:13 |个人分类:Linux移植

 

2.6的内核自带了NandFlash驱动,移植起来就非常方便
在arch/arm/mach-s3c2410/devs.c中添加
#include <linux/mtd/partitions.h>
#include <asm/arch/nand.h>
#include <linux/mtd/nand.h>

static struct mtd_partition nand_partitions[] = {
 [0] = {
  .name = "nanduser",
  .size = SZ_64M,
  .offset = 0,
 },  //把64M全都作为一个分区,我的内核都是烧在NorFlash中的
};

struct s3c2410_nand_set nand_set = {
 .nr_partitions = 1,
 .partitions = nand_partitions,
};

struct s3c2410_platform_nand platform_nand = {
 .tacls = 0,
 .twrph0 = 30,
 .twrph1 = 0,
 .sets = &nand_set,
 .nr_sets = 1,
};

修改一下下面这个结构体
struct platform_device s3c_device_nand = {
 .name    = "s3c2410-nand",
 .id    = -1,
 .num_resources   = ARRAY_SIZE(s3c_nand_resource),
 .resource   = s3c_nand_resource,
 .dev = {
  .platform_data = &platform_nand,
 } //添加这三行
};

修改arch/arm/mach-s3c2410/mach-smdk2410.c

static struct platform_device *smdk2410_devices[] __initdata={
&s3c_device_usb,
...
&s3c_device_nand, // 添加这个设备结构,给驱动程序使用
};

修改drivers/mtd/nand/s3c2410.c
s3c2410_nand_init_chip() 函数中
//chip->eccmode = NAND_ECC_SOFT;
chip->eccmode = NAND_ECC_NONE; //disable ECC,驱动自带的ECC总是出错


配置内核
Device Drivers --->
   Memory Technology Devices(MTD) --->
      NAND Flash Device Drivers --->
  <*> NAND Device Support
  <*> NAND Flash support for S3C2410/S3C2440 Soc
其他选项在移植NorFlash驱动时已选择。

编译运行后在/dev/mtdblock出现了4这个设备。0--3设备是NorFlash上的分区。

mount成jffs2分区会有很多错误信息,但是也能用,看来jffs2确实不适合NandFlash
还是决定移植一个yaffs文件系统。

(1)下载YAFFS文件系统代码,下载网址:
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
点击页面左下角的Download tarball即可下载全部相关代码。

(2)解压后把yaffs2这个目录copy到内核源代码树的fs目录下,用Makefile.kernel替代Makefile.

(3)修改 fs/Makefile 和 Kconfig文件。

# vi Makefile  (将下面一行添加到Makefile中)
   obj-$(CONFIG_YAFFS_FS) += yaffs2/
 
# vi Kconfig (将下面一行添加到Kconfig中)
   source "fs/yaffs2/Kconfig

(4)配置内核
<*> YAFFS2 file system support
--- 512 byte / page devices
<*> Lets Yaffs do its own ECC
--- 2048 byte (or larger) / page devices
<*> Autoselect yaffs2 format
<*> Disable lazy loading
<*> Turn off wide tnodes
<*> Turn off debug chunk erase check

(5)编译运行

mount -t yaffs /dev/mtdblock/4 /mnt
不过在往分区copy文件的时候常出现警告信息
Reading data from NAND FLASH without ECC is not recommended
Writing data without ECC to NAND-FLASH is not recommended
Writing data without ECC to NAND-FLASH is not recommended

我们禁止了nand的ecc,而用yaffs自带的ecc,所以nand层的代码会认为没有用ecc,而如果用nand层的ecc,不管是硬件还是软件ecc,都会有ecc错误出现。
所以简单的解决方法就是去掉以上的警告信息。

在drivers/mtd/nand/nand_base.c中找recommended这个单词
找到三句打印语句,注释掉就ok了


本文转自
http://blog.csdn.net/dansen_xu/archive/2007/12/29/2003022.aspx


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 19

    获赞
  • 69

    评论
  • 3705

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 17:44 , Processed in 0.014172 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部