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

你可能感兴趣的:(职场,镜像,休闲,uboot,yaffs)