加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Nand flash ecc校验

发布时间:2020-12-15 07:18:14 所属栏目:百科 来源:网络整理
导读:linux ecc校验 uboot和kernel的ecc计算方法有点不一样的,但是计算结果是一样的,但是至于为什么默认的kernel跑步起来,现在我没有看,将来有机会再研究: 首先需要将kernel的校验方式改为相同,在drivers/mtd/nand/s3c2410.c中:s3c2410_nand_init_chip(),
linux ecc校验

uboot和kernel的ecc计算方法有点不一样的,但是计算结果是一样的,但是至于为什么默认的kernel跑步起来,现在我没有看,将来有机会再研究:
首先需要将kernel的校验方式改为相同,在drivers/mtd/nand/s3c2410.c中:s3c2410_nand_init_chip(),最后的位置, 改为:chip->ecc.mode = NAND_ECC_SOFT;
kernel读取函数调用过程:mtd->read = nand_read; ==> nand_do_read_ops():

1075 /* dancy note?:
1076 * func ecc.read_subpage is have some error.
1077 * check ecc fail.
1078 */
1079 /* Now read the page into the buffer */
1080 if (unlikely(ops->mode == MTD_OOB_RAW))
1081 ret = chip->ecc.read_page_raw(mtd,chip,bufpoi);
1082 // else if (!aligned && NAND_SUBPAGE_READ(chip) &&?!oob)
1083 // ret = chip->ecc.read_subpage(mtd,col,bytes,bufpoi);//nand_read_subpage?
1084 else
1085 ret = chip->ecc.read_page(mtd,Arial;font-size:16px;line-height:26px;">1086 if (ret < 0)
1087 break;

1082和1083行注释掉, 使用read_page读取flash。
check ecc不过的就是这个函数:nand_read_subpage.?

在linux2.6.29内核以后nand_read_subpage也没有什么问题了。。

nand_read_subpage引起的问题:

uncorrectable error : <3>end_request: I/O error,dev mtdblock2,sector 0
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2,"mtdblock2"
yaffs: auto selecting yaffs2
yaffs: restored from checkpoint
yaffs_read_super: isCheckpointed 1

是调用nand_read_subpage接口读取OOB时,读取时只读取六个字节,即aligned_len=6, 通过printk打印发现这六个字节后面的两三个有问题,不知是不是因为硬件的不稳定引起的,如果将aligned_len+=3,就没有问题了,不知道哪个高手,可以给我指点指点这个是问什么?

http://blog.chinaunix.net/uid-14833587-id-76514.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读