在uboot里添加yaffs镜像的支持

时间:2009-07-13

  作者:孙晓明,华清远见嵌入式学院讲师。

  uboot源码默认是不支持yaffs文件系统的,所以我们需要自己修改源码进行支持。

  首先我们进入U-Boot源码目录添加对yaffs镜像烧写的支持.

  在commON/CMD_nand.c里仿照jffs2来写一些yaffs的内容:

  在:

  U_BOOT_CMD(NAND, 5, 1, do_nand,

  "nand - NAND sub-system\n",

  "info - show available NAND devices\n"

  "nand device [dev] - show or set current device\n"

  "nand read[.jffs2] - addr off|partition size\n"

  "nand write[.jffs2] - addr off|partition size - read/write `size' bytes starting\n"

  " at offset `off' to/from memory address `addr'\n"

  之后添加nand read.yaffs 的使用说明:

  "nand read.yaffs - addr off|partition size\n"

  "nand write.yaffs - addr off|partition size - read/write `size' bytes starting\n"

  然后在nand命令的处理函数里do_nand中增加对write.yaffs的支持,do_nand在common/cmd_nand.c中实现:

  在:

  if (s != NULL &&

  (!strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i"))) {

  …….

  的判断后面加:

  else if (s != NULL &&

  (!strcmp(s, ".yaffs") || !strcmp(s, ".e") || !strcmp(s, ".i"))) {

  if (read) {

  /* read */

  nand_read_options_t opts;

  memset(&opts, 0, sizeof(opts));

  opts.buffer = (u_char*) addr;

  opts.length = size;

  opts.offset = off;

  opts.readoob = 1;

  opts.quiet = quiet;

  ret = nand_read_opts(nand, &opts);

  } else {

  /* write */

  nand_write_options_t opts;

  memset(&opts, 0, sizeof(opts));

  opts.buffer = (u_char*) addr;

  opts.length = size;

  opts.offset = off;

  /* opts.forcejffs2 = 1; */

  //opts.pad = 1;

  opts.noecc = 1;

  opts.writeoob = 1;

  opts.blockalign = 1;

  opts.quiet = quiet;

  ret = nand_write_opts(nand, &opts);

  }

  }

  由于前面设置了opts.noecc = 1,不使用ecc校验码,烧写过程中会提示这个信息:

  Writing data without ECC to NAND-FLASH is not recommended

  Writing data without ECC to NAND-FLASH is not recommended

  Writing data without ECC to NAND-FLASH is not recommended

  Writing data without ECC to NAND-FLASH is not recommended

  Writing data without ECC to NAND-FLASH is not recommended

  可以修改driver/mtd/nand/nand_base.c文件的nand_write_page函数,将它去掉,修改如下:

  case NAND_ECC_NONE:

  //printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not ecommended\n");

  this->write_buf(mtd, this->data_poi, mtd->oobblock);

  break;

  修改完这些,U-BOOT就可以支持yaffs文件镜像的烧写了。

  “本文由华清远见https://www.embedu.org/index.htm提供”

 



  
上一篇:浅析函数传参及返回值
下一篇:阻塞与非阻塞赋值

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料