既然skipfirstblk是在nand_write_options_t结构中新加的项,那么就要重新定义nand_write_options_t结构,并在下面调用的nand_write_opts函数中对它进行处理。
首先在include/nand.h中如下修改,增加skipfirstblk成员:
struct nand_write_options {
u_char *buffer;/* memory block containing image to write */
ulong length;/* number of bytes to write */
ulong offset;/* start address in NAND */
int quiet;/* don't display progress messages */
int autoplace;/* if true use auto oob layout */
int forcejffs2;/* force jffs2 oob layout */
int forceyaffs;/* force yaffs oob layout */
int noecc;/* write without ecc */
int writeoob;/* image contains oob data */
int pad;/* pad to page size */
int blockalign;/* 1|2|4 set multiple of eraseblocks to align to */
int skipfirstblk; /* 新加,烧写时跳过第一个可用的逻辑块 */
};
typedef struct nand_write_options nand_write_options_t;
然后,修改nand_write_opts函数增加对skipfirstblk成员的支持。它在drivers/nand/nand_util.c文件中,下面的第301、第430~435行是新加的:
285 int nand_write_opts(nand_info_t *meminfo, const nand_write_options_t *opts)
286 {
……
300 int result;
301 int skipfirstblk = opts->skipfirstblk;
……
430 /* skip the first good block when wirte yaffs image, by */
431 if (skipfirstblk) {
432 mtdoffset += erasesize_blockalign;
433 skipfirstblk = 0;
434 continue;
435 }
……
进行了上面的移植后,U-Boot已经可以烧yaffs文件系统映像了。由于前面设置“opts.noecc = 1”不使用ECC较验码,在烧写过程中会出现很多的提示信息:
Writing data without ECC to NAND-FLASH is not recommended
可以修改drivers/nand/nand_base.c文件的nand_write_page函数将它去掉:
917 case NAND_ECC_NONE:
918 printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-33.html
本来看着修复的是6s的功能傲娇的不想升级哦哦哦哦哦这个表情把我看酥了升升升升