`
isiqi
  • 浏览: 16078947 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

u-boot-2010.03在tq6410上的移植详解(七)

 
阅读更多

原创文章版权所有!如需转载,请注明出处: http://hi.baidu.com/liushuiyue1/myhome 谢谢合作!!!!!

4 )修改 drivers/mtd/nand/nand_util.c

int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,

u_char *buffer)

{

int rval;

size_t left_to_write = *length;

size_t len_incl_bad;

u_char *p_buffer = buffer;

#if defined(CONFIG_SYS_NAND_YAFFS_WRITE)

if(nand->rw_oob==1)

{

size_t oobsize=nand->oobsize;

size_t datasize = nand->writesize;

int datapages = 0;

if(((*length)%(nand->oobsize+nand->writesize))!=0)

{

printf("Attempt to write error lenght data!/n");

return -EINVAL;

}

datapages = *length/(datasize+oobsize);

*length = datapages*datasize;

left_to_write = *length;

}

#endif

........

len_incl_bad = get_len_incl_bad (nand, offset, *length);

if ((offset + len_incl_bad) > nand->size) {

printf ("Attempt to write outside the flash area/n");

return -EINVAL;

}

#if !defined(CONFIG_SYS_NAND_YAFFS_WRITE)

if (len_incl_bad == *length) {

rval = nand_write (nand, offset, length, buffer);

if (rval != 0)

printf ("NAND write to offset %llx failed %d/n",

offset, rval);

return rval;

}

#endif

while (left_to_write > 0) {

size_t block_offset = offset & (nand->erasesize - 1);

size_t write_size;

WATCHDOG_RESET ();

if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {

printf ("Skip bad block 0x%08llx/n",

offset & ~(nand->erasesize - 1));

offset += nand->erasesize - block_offset;

continue;

}

#if defined(CONFIG_SYS_NAND_YAFFS_WRITE)

if (nand->skipfirstblk==1)

{

nand->skipfirstblk = 0;

printf("Skip the first good block%llx/n",offset&~(nand->erasesize-1));

offset+=nand->erasesize-block_offset;

continue;

}

#endif

....

left_to_write -= write_size;

printf("%d%% is complete",100-(left_to_write/(*length/100)));

offset += write_size;

// p_buffer += write_size;

#if defined(CONFIG_SYS_NAND_YAFFS_WRITE)

if(nand->rw_oob==1)

{

p_buffer+=write_size+(write_size/nand->writesize*nand->oobsize);

}

else

{

p_buffer+=write_size;

}

#else

p_buffer += write_size;

#endif

}

return 0;

}

5 )修改 include/linux/mtd/mtd.h

131 行添加红色字体部分

#if defined(CONFIG_SYS_NAND_YAFFS_WRITE)

u_char rw_oob;

u_char skipfirstblk;

#endif

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics