Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90982
  • 博文数量: 22
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-03 11:02
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(21)

我的朋友

分类: LINUX

2010-03-30 19:58:40

转载:

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

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文件镜像的烧写了。









(四)

+[eJ;k oa"O,Tfe0

u-boot- 1.1.6已经可以通过"nand write...""nand write.jffs2..."等命令来烧写cramfsjffs2文件系统映象文件,下面增加"nand write.yaffs..."命令实现文件系统映象的烧写。木铎校园 BBS 社区7[)Q'dgb"S`0B

1、在commom/cmd_nand.c中增加"nand write.yaffs..."的使用说明,代码添加如下:

2b8Hec%Hol0

U_BOOT_CMD(nand, 5, 1, do_nand,木铎校园 BBS 社区1O+A3k1B3_2n$_
    "nand    - NAND sub-system\n",木铎校园 BBS 社区Ee}"z S3Ra
    "info                  - show available NAND devices\n"木铎校园 BBS 社区+e'rO^o"{C@-~%^
    "nand device [dev]     - show or set current device\n"木铎校园 BBS 社区4x3?$K~W9r
    "nand read[.jffs2]     - addr off|partition size\n"木铎校园 BBS 社区

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