1、内核解压失败
- 出现这种情况,一般主要体现在以下几个方面:
- uboot 环境变量 bootcmd 参数配置不正确。举例:
1.1uboot引导kernel启动的参数应设置为:bootcmd=sf probe 0;sf read 0x42000000 0x60000 0x340000;bootm 0x42000000
1.2实际已设置为:bootcmd=sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000
- 在 Flash 分区为内核分配的空间不足。举例:
内核大小为:3320K,而Flash的kernel分区只分配了:3328K,当解压缩内核文件时可能空间不足而导致解压失败。
- 内核文件不小心烧写在 Flash 其他分区了,或内核文件根本就没有成功烧写到内核分区。
2、system halted 内核死机
- 出现这种情况,无非就是内核文件存在而它的数据已被破坏了。主要体现在以下几个方面:
- 人为拷贝或重命名内核文件时不小心破坏了内核数据;
- 通过烧录工具烧写内核到 Flash 时,烧写范围超出了指定的分区大小。举例:
内核正常烧写分区为:0x42000000 0x60000 0x340000,而实际却烧写了:0x42000000 0x100000 0x400000
- uboot源码里的 “uboot + 环境变量” 默认分区大小为 1MB,而我们在 Flash 里给 uboot 分配的空间为 384KB,紧接着就为 kernel 分配 4MB 的空间,当 uboot 运行起来后还是按照 1MB 的空间使用,这时就会把内核的数据破坏了导致内核死机。举例:
bootargs=mtdparts=hi_sfc:384K(boot),4M(kernel)