首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

u-boot引导内核,出现Verifying Checksum . Bad Data CRC异常

2012-12-20 
u-boot引导内核,出现Verifying Checksum ... Bad Data CRC错误u-boot从nandflash启动,引导内核时出现如下

u-boot引导内核,出现Verifying Checksum ... Bad Data CRC错误
u-boot从nandflash启动,引导内核时出现如下错误提示:
   Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
具体情况如下:
U-Boot 2008.10 (Sep  4 2012 - 12:18:51)

DRAM:  64 MB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0 

NAND read: device 0 offset 0x60000, size 0x500000
 5242880 bytes read: OK
## Booting kernel from Legacy Image at 31000000 ...
   Image Name:   Linux-2.6.29.4
   Created:      2012-08-25   8:15:19 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1752256 Bytes =  1.7 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!

我的u-boot环境变量如下:
bootdelay=3
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
filesize=1ABD00
fileaddr=31000000
netmask=255.255.255.0
ipaddr=192.168.163.110
serverip=192.168.163.137
bootcmd=nand read.jffs2 0x31000000 0x60000 0x500000;bootm 0x31000000
stdin=serial
stdout=serial
stderr=serial

内核通过tftp下载到内存后直接bootm 可成功启动,但是写入nand后就不行了。

奇怪的是当我从norflash启动u-boot,在u-boot的norflash下将内核烧写到nandflash 中后,然后从nandflash启动内核,可以正常启动。
我在norflash的操作如下:
tftp 0x31000000 uImage
nand erase 60000 500000
nand write.jffs2 0x31000000 60000 500000

我有如下疑问:
  我的支持norflash启动和支持nandflash启动的u-boot的关于nand操作的代码是一样的,但是为什么从norflash写内核到nand中可以正常启动,但是从nand中写内核进去就不行呢?

[解决办法]
先确定下在两种状态下是否都把kernel,jffs2是否都正确的加载到内存地址
[解决办法]
先确定这两种状态下是否都正确的将kernel,jffs2加载到指定的内存地址运行
[解决办法]

引用:
先确定这两种状态下是否都正确的将kernel,jffs2加载到指定的内存地址运行

kernenl已经拷贝到了内存的0x31000000了、
[解决办法]
1.你的那个NORFLASH操作时烧写文件系统啊,跟内核有什么关系?
2.你确定从nand启动烧写写内核的时候地址擦除都对了?别在烧写文件系统的时候把内核区擦除或者覆盖了。
[解决办法]
引用:
1.你的那个NORFLASH操作时烧写文件系统啊,跟内核有什么关系?
2.你确定从nand启动烧写写内核的时候地址擦除都对了?别在烧写文件系统的时候把内核区擦除或者覆盖了。

1.tftp 0x31000000 uImage
nand erase 60000 500000
nand write.jffs2 0x31000000 60000 500000
这个是将在内存0x31000000上的uImage写入nandflash的60000开始的大小为0x500000byte的空间内。

2.地址擦除那些没问题的,我现在还是只是在引导内核,还没烧写文件系统的
[解决办法]
引用:
引用:

1.你的那个NORFLASH操作时烧写文件系统啊,跟内核有什么关系?
2.你确定从nand启动烧写写内核的时候地址擦除都对了?别在烧写文件系统的时候把内核区擦除或者覆盖了。

1.tftp 0x31000000 uImage
nand erase 60000 500000
nand write.jffs2 0x31000000 60000 500000


……


既然是烧内核那为什么用nand write.jffs2不用nand write
[解决办法]
引用:
引用:

引用:

1.你的那个NORFLASH操作时烧写文件系统啊,跟内核有什么关系?
2.你确定从nand启动烧写写内核的时候地址擦除都对了?别在烧写文件系统的时候把内核区擦除或者覆盖了。

1.tftp 0x31000000 uImage
nand erase 60000 500000
nand write.jffs2 0x310000……

之所以用nand write.jffs2是在韦东山的书上看到的,nand write.jffs2不要求写入的内容大小页对齐,我的nand一页大小为2048自己,也就是不要求我要写入的内核的大小为2048的整数倍,而nand write有这个要求。
[解决办法]
找到问题了,原来是在移植u-boot支持yaffs2文件系统的时候,误改了nand_util.c中nand write.jffs2的相关代码。
其实之前也百度谷歌了很多。出现这种情况的原因很多,还是多自己想想办法好。
结贴、

热点排行