Wrong Image Format for bootm command ERROR: can't get kernel image!
u-boot kernel    2017-03-02 10:12:13    121    0    0
tianwaifeixian   u-boot kernel

造成这个错误的原因有多少我不知道

google了一下

说内核设置小了 所以u-boot读取内核不完整导致失败了

还有说是nand bad (nand坏快引起的)

还有的是启动引导参数设置不正确导致的

还有的是 机器ID不一致导致的(u-boot机器ID和linux 内核默认的机器ID不一直)

尼马我都试了还是不行 

然后回头又看了看启动的信息

基本上是坏快的原因了 因为坏快产生在了内核引导的地址 而内核貌似不检查这些 

所以。。。。。悲剧了~

这是我移植之后内核设置6M的一大原因吧!具体是不是这个原因得回去试试~

参考:

http://processors.wiki.ti.com/index.php/Writing_Kernel_Image_to_NAND_Flash

http://www.denx.de/wiki/DULG/UBootCmdGroupNand

http://www.voidcn.com/blog/fu851523125/article/p-6182227.html

http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=753&highlight=%BB%B5%BF%E9

bdinfo信息

SMDK2440 # bdinfo
arch_number = 0x000000C1
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x04000000
eth0name    = dm9000
ethaddr     = 00:50:56:C0:00:08
current eth = dm9000
ip_addr     = 192.168.0.110
baudrate    = 115200 bps
TLB addr    = 0x33FF0000
relocaddr   = 0x33F29000
reloc off   = 0x00529000
irq_sp      = 0x33B28EF0
sp start    = 0x33B28EE0

重新设置机器ID:​

SMDK2440 # set mancid 16a
SMDK2440 # save 
SMDK2440 # reset​
。。。。。。。。。
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x60000, size 0x200000
size adjusted to 0x180000 (4 bad blocks)
Skipping bad block 0x00100000
Skipping bad block 0x00120000
Skipping bad block 0x00200000
Skipping bad block 0x00220000
 1572864 bytes read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!​

查看当前MTD:

SMDK2440 # mtd
device nand0 <nand>, # parts = 4
 #: name size offset mask_flags
 0: bootloader 0x00040000 0x00000000 0
 1: params 0x00020000 0x00040000 0
 2: kernel 0x00600000 0x00060000 0
 3: root 0x0f9a0000 0x00660000 0
active partition: nand0,0 - (bootloader) 0x00040000 @ 0x00000000
defaults:
mtdids : nand0=nand
mtdparts: mtdparts=nand:256k(bootloader),128k(params),6m(kernel),-(root)​

设置启动映像格式:(两个都试了还是不行)

SMDK2440 # setenv bootfile uImage
SMDK2440 # save
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x40000 -- 100% complete.
Writing to NAND... OK
SMDK2440 # setenv image 'uImage' 
SMDK2440 # saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x40000 -- 100% complete.
Writing to NAND... OK​

nand bad 一大堆的坏块 我就奇了怪了 以前怎么没事呢?

擦除内核分区:(这个和之前版本不一样了)

SMDK2440 # nand erase.part kernel
NAND erase.part: device 0 offset 0x60000, size 0x600000
Skipping bad block at 0x00100000 
Skipping bad block at 0x00120000 
Skipping bad block at 0x00200000 
Skipping bad block at 0x00220000 
Skipping bad block at 0x00300000 
Skipping bad block at 0x00320000 
Skipping bad block at 0x00400000 
Skipping bad block at 0x00420000 
Skipping bad block at 0x00500000 
Skipping bad block at 0x00520000 
Skipping bad block at 0x00600000 
Skipping bad block at 0x00620000 
Erasing at 0x640000 -- 100% complete.
OK​

惨除NDND坏快:

SMDK2440 # nand scrub.chip
NAND scrub.chip: device 0 whole chip
Warning: scrub option will erase all factory set bad blocks!
 There is no reliable way to recover them.
 Use this command only for testing purposes if you
 are sure of what you are doing!
Really scrub this NAND flash? <y/N>
y
Erasing at 0xffe0000 -- 100% complete.
OK
Really scrub this NAND flash? <y/N>​
SMDK2440 # nand erase.chip 
这里很多很多.... 
Skipping bad block at 0x0fa20000 
Skipping bad block at 0x0fb00000 
Skipping bad block at 0x0fb20000 
Skipping bad block at 0x0fc00000 
Skipping bad block at 0x0fc20000 
Skipping bad block at 0x0fd00000 
Skipping bad block at 0x0fd20000 
Skipping bad block at 0x0fe00000 
Skipping bad block at 0x0fe20000 
Skipping bad block at 0x0ff00000 
Skipping bad block at 0x0ff20000 
Erasing at 0xffe0000 -- 100% complete. 
OK​

======================================

测试 内核已经没有问题了

产生这个问题的具体原因很有可能就是坏块 出现在了内核的分区部分了!比较无语


上一篇: make htmldocs 制作内核文档

下一篇: openSUSE_42.1配置tftp服务器

121 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航