Bug

卡在Starting Kernel时如何查看kernel log

adtxl
2023-08-15 / 0 评论 / 516 阅读 / 正在检测是否收录...

1. 简介

Android的启动流程中,很多soc厂商在kernel启动前一阶段一般都是uboot。Starting kernel ...一般是默认情况下uboot能打印出的最后一行log.在这行log后面就是kernel的启动log.

image.png

在开发过程中,我至少遇到两次印象深刻的问题,就是导致卡在Starting kernel...。由于没有kernel的log,导致很难继续debug。
这里记录一种方法,可以在uboot中直接查看kernel启动时log的方法。
当然,这个方法至少有两个前提:
第一,就是kernel确实启动起来了,但可能因为有问题,又没完全启动到console初始化完成,导致无法在串口输出kernel log。因为打印starting kernel ...并不一定代表uboot是正常的,打印完这行log后uboot还是有些其它准备动作的,如何问题是出在uboot中,kernel并未完成启动,那自然也没办法查看kernel log了。
第二,就是开发板必须有reset功能。也就是有reset按键,重启时ddr不断掉,数据不会丢失。因为卡在starting kernel后是没有办法再输命令的。只能按开发板中的reset回到uboot,或者有看门狗功能能自动重启。不过我也接触过一种开发板,可能是电源适配器的问题,虽然开发板上没有reset按键,但只要快速的开关电源,ddr上的数据也不会丢失。

2.实操

2.1 搞清楚kernel在ddr中的地址

也就是kernel在ddr中运行的起始地址,我做的是android项目,从log中能直接看出来,

image90b84c0671e528b1.png

如上所示,kernel在ddr中的的运行地址是0x04280000,需要记住这个物理地址。

2.2 确定log_buf相对于kernel入口的偏移

如下图,查看编译输出文件System.map。在文件中查找如下两个符号,然后再相减,ffff00000a5c9680-ffff000008080000=0x2549680

imagede3230f5d6d3c566.png

image651ce042be7a8ce3.png

2.3 在uboot中使用md命令查看内存信息

在上面已知了kernel实际的物理起始地址,以及log_buf相对于起始地址的偏移,因此很容易计算出log_bug在物理内存中的实际地址,
即把两者相减即可,0x042800000+0x2549680=0x067c9680.

然后在uboot中用md命令查看这段内存的数据,如下所示,通过不断的回车,可以一直显示完整的log内容,可以看下kernel中具体启动到哪里挂掉了,定位问题。

imagea47fd579e6dfb1c8.png

3

评论 (0)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消