如何读取源行号的崩溃实用程序输出?

时间:2016-06-14 17:23:49

标签: linux-kernel kernel-module

我正在使用Ubuntu 16.0.4上的嵌入式应用程序。我为我的电路板写了一个风扇监控驱动程序。驱动程序使内核出现故障,系统必须重新启动。 我启用了kdump并使用崩溃实用程序来分析堆栈跟踪。 对我来说,跟踪看起来像:

crash> bt
PID: 2935   TASK: c01a8000  CPU: 3   COMMAND: "mk7i"
#0 [e309ddbc] crash_kexec at c10fa4ce
#1 [e309de1c] path_openat at c11e812b
#2 [e309de94] do_page_fault at c105de55
#3 [e309dea4] error_code (via page_fault) at c17a9185
EAX: 00000400  EBX: 037ea1e0  ECX: f0a746c4  EDX: 00000000  EBP: e309df00 
DS:  007b      ESI: 00000000  ES:  007b      EDI: e3f47000  GS:  00e0
CS:  0060      EIP: f0a718f4  ERR: ffffffff  EFLAGS: 00210212 
#4 [e309ded8] fmon_read_value at f0a718f4 [fmon]
#5 [e309dee8] security_file_permission at c12f73ae
#6 [e309df04] proc_reg_read at c1239c2b
#7 [e309df24] __vfs_read at c11da81d
#8 [e309df38] vfs_read at c11dae8a
#9 [e309df5c] sys_read at c11db92c
#10 [e309df84] do_fast_syscall_32 at c1003936
#11 [e309dfb0] sysenter_past_esp at c17a8093
EAX: ffffffda  EBX: 00000012  ECX: 037ea1e0  EDX: 00000400 
DS:  007b      ESI: 037f6360  ES:  007b      EDI: ffffff98
SS:  007b      ESP: a802a834  EBP: a802a888  GS:  0033
CS:  0073      EIP: b76f8c31  ERR: 00000003  EFLAGS: 00200292

功能" fmon_read_value" ,导致故障的是我的驱动程序模块。 我想知道如何将该功能/模块中的地址映射到源行号?在这种情况下,地址为 f0a718f4

2 个答案:

答案 0 :(得分:0)

您可以使用gdb来查找使用gdb框架的行。例如。

这可能是一个很好的文档如何做到这一点: https://wiki.ubuntu.com/Kernel/KernelDebuggingTricks#Using_GDB_to_find_the_location_where_your_kernel_panicked_or_oopsed

答案 1 :(得分:0)

反汇编的“-l”选项可以解决问题。例如:    碰撞> dis -lr f0a718f4