【问题】
uboot 从nand flash里面读取kernel/uImage,一直都正常,但是拷贝到内存之后,最后的校验错误,出现Bad Data CRC,刚开始以为是kernel烧写的有问题。
但是用 nand dump 0x80000去查看nand 上的kernel,确认数据都是对的。
最后,通过用AXD debugger去加载uImage到内存里面:
load memoey from file 去加载到0x31000000 或者 lb uImage 0x31000000
然后再和uboot从nand中读取的kernel:
nand read 0x30007fc0 0x80000 0x200000
之后,用uboot的cmp命令去比较两者是否相等,结果都不一样:
cmp 30007fc0 31000000 180800
word at 0x30007fc0 (0x56190527) != word at 0x31000000 (0xe1a0f00e)
Total of 0 words were the same
终于搞清楚了,原来是我的uboot的版本不对,导致开始时候配置外部sdram的时候,配置错误,所以虽然uboot从nand中读取的kernel是对的,但是拷贝到内存中,数据就变了。
【解决办法】
重新编译了一个新版本的uboot,配置成32M 的和我当前使用板子匹配的uboot,这样SDRAM的配置就对了,uboot从nand中读取的kernel拷贝到内存中,数据也正常了,就可以正常工作了。