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

本文介绍如何在2.6内核上移植NandFlash驱动,并实现YAFFS文件系统的配置与使用。主要内容包括在特定架构下添加NandFlash分区设置、禁用ECC错误校验、下载及集成YAFFS文件系统代码到内核等步骤。
导读:
  2.6的内核自带了NandFlash驱动,移植起来就非常方便
  在arch/arm/mach-s3c2410/devs.c中添加
  #include
  #include
  #include
  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了
  Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=2003022

本文转自
http://blog.youkuaiyun.com/dansen_xu/archive/2007/12/29/2003022.aspx
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值