很多时候,在配置内核的时候,一不小心就造成kernel无法启动,比如出现:
。。。省略。。。
Kernel image @ 0x82000000 [ 0x000000 - 0x464080 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Using Device Tree in place at 88000000, end 880094d5
Starting kernel ...
假如想解决问题,就必须知道问题出现在了哪里,因此一般通过内核启动的时候打印的信息来定位问题产生的原因。
但是如上所示,没有得到提示信息,直接悬挂在启动内核的位置上。
为解决这个提问:
这里首先想到的是打开使能early_printk,再次启动然后看是否可以得到有效的提示信息,假如仍然不可以的话,那就你直接读取缓存 ,缓存的地址为 __log_buf其地址在system.map被标记出来,我们可以找到具体的位置。具体如下:
- 首先去内核编译目录找到System.map文件。
- 接下来遭到System.map中__log_buf对应地址,执行:
cat ./System.map | grep -n __log_buf
如何可能得到如下结果:
64584:c0770be8 b __log_buf
此时记住c0770be8 这个数字。
3. 启动内核,内核此时卡在Starting kernel …位置。
4. 重新启动系统(注意:不要断电启动),进入UBoot命令行界面
5. 在命令行输入(数字是刚才得到的数字):
md 0xc0770be8
6、不停的敲击回车键,直到为全为0
通过此方法就可以看到问题出现在哪个位置。