主题 : superboot210下载的数据和uboot读出来的不一样,这是为何? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 113172
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2015-03-06
最后登录: 2015-04-24
楼主  发表于: 2015-03-12 16:29

 superboot210下载的数据和uboot读出来的不一样,这是为何?

我做了很长时间的实验,发现superboot210应该是将kernel下载到了offsize = 4M的位置,根本不是内核输出信息显示的从6M 开始的,不知道为啥友善的工程师们不把内核的分区信息改正确了。
目前问题是这样的。我的板子上的nand flash是512M SLC。uboot的nand flash也改成了相应的SLC的一套函数,和内核对比之后也没发现什么不一样的地方。而且用uboot将内核下载进去之后还能够正常引导,但是用superboot210下载进去的内核却无法引导。然后我又开始做实验,通过对比oob区的ecc信息可知,用superboot210下载进的原始数据的ecc和用uboot读出来的数据同时生成的ecc会有有限的几个字节不一样,说明uboot读数据的时候发生了错误了。这是为何呢?欢迎各位坛友提出宝贵意见。
级别: 新手上路
UID: 113172
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2015-03-06
最后登录: 2015-04-24
1楼  发表于: 2015-03-12 16:34
补充一点,我目前遇到的问题可以用下面几个等式表达。
uboot + uboot下载的内核+superboot210下载的根文件系统   =  一个可以正常运行的系统

uboot+uboot下载的内核+uboot下载的根文件系统 = 可以启动内核但根文件系统跑步起来

superboot210 + uboot下载的内核 = 内核都跑步起来

所以总结一下,问题应该还是uboot、 superboot、kernel用的nand flash驱动不一致造成的,但是我至今没发现什么不一样的地方。

还有我猜测也有可能是nand read命令或者nand write.yaffs命令有问题,正在排查。
级别: 新手上路
UID: 113172
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2015-03-06
最后登录: 2015-04-24
2楼  发表于: 2015-03-13 09:17
再补充并且更正一下啊:
利用uboot引导+ superboot210下载的内核,发现可以正常启动内核,说明uboot是把正确的内核数据读进内存了。但是,却仍然出现了下面的问题。
[Smart210]# nand read 0x21000000 0x400000 0x500000
NAND read: device 0 offset 0x400000, size 0x500000
NAND read from offset 400000 failed -74
0 bytes read: ERROR
继续实验发现,uboot读数据的同时,也会生成ecc,但是和superboot写内核时生成的ecc有几位不太一样。所以我觉得还是在ecc上出现了问题。
级别: 新手上路
UID: 113172
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2015-03-06
最后登录: 2015-04-24
3楼  发表于: 2015-03-13 10:51
好吧,继续跟进:
如果把kernel的ECC校验机制关闭了,也就是nand->ecc.mode = NAND_ECC_NONE;,那么
uboot + uboot下载的kernel + uboot下载的根文件系统 =  正常启动

也就更加印证了,我的uboot可以正常的读写数据,只是在生成ecc的时候出了问题,问题到底在哪呢?另外我又发现,nand write和 nand write.yaffs在写数据的时候都会生成ecc,但是存放oob的区域却变化了,这是什么原因呢?

继续实验。。。
级别: 新手上路
UID: 113172
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2015-03-06
最后登录: 2015-04-24
4楼  发表于: 2015-03-13 14:02
喜讯:2015年3月13日,下午14点,终于把512M SLC nand flash uboot驱动搞定。
ecc计算正确。关键是改动一个之前没有注意到的地方,欢迎用相同问题的坛友参与讨论。
级别: 侠客
UID: 78504
精华: 0
发帖: 109
金钱: 550 两
威望: 110 点
贡献值: 0 点
综合积分: 218 分
注册时间: 2012-09-21
最后登录: 2020-05-29
5楼  发表于: 2015-06-06 16:51
原因是mkyaffs2image有问题,,它的ecc_layout要和u-boot,kernel完全匹配,,否则就会出现问题。。