如何解决 内核启动 卡在 Starting kernel ...

本文介绍了一种当遇到内核启动失败且无错误信息时的故障排查方法。通过开启early_printk并读取__log_buf缓冲区的内容来定位启动失败的具体原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候,在配置内核的时候,一不小心就造成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被标记出来,我们可以找到具体的位置。具体如下:

  1. 首先去内核编译目录找到System.map文件。
  2. 接下来遭到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

通过此方法就可以看到问题出现在哪个位置。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigPillow

给我打赏,让我买一个馒头吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值