调试内核,bootkernel后没有输出信息

在uboot加载内核后,只打印了Uncompressing Linux... done, booting the kernel.后面控制台没有任何输出,此时应如何调试?

内核在串口没有准备好之前会把打印信息存储在ram中,这个地址为全局变量__log_buf,基于这一点,操作如下:

1、打开System.map,找到__log_buf的地址,这个就是存放日志的起始地址0xc10c745c;

2、safe_read_lock的地址就是存放日志的结束地址0xc110745c(只是个大概地址);

3、注意不要断电,连接jlink,使用gdb工具把地址区间的数据存储到dmesg.bin中;

4、在PC linux上,使用命令:strings dmesg.bin可以打印出期望的信息了;

5、可以根据日志调试了;

 1 c10c5070 b textbuf.41826
 2 c10c5450 B early_console
 3 c10c5454 B oops_in_progress
 4 c10c5458 b always_kmsg_dump
 5 c10c545c b ext_text.42027
 6 c10c745c b __log_buf
 7 c110745c b safe_read_lock
 8 c1107460 b irq_kobj_base
 9 c1107464 b allocated_irqs
10 c1107868 b __key.21864
11 c1107868 b __key.21865
12 c1107868 b mask_lock.24111

 

posted @ 2022-12-23 10:12  goodboyyd  阅读(156)  评论(0编辑  收藏  举报