我正在使用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
答案 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