在uboot里添加yaffs镜像的支持

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值