在我的嵌入式Linux內核代碼中的一個異常處理程序中添加對「print_stack_trace」的調用後,我看到一個看起來像鏈接問題的錯誤。嘗試添加print_stack_trace時鏈接錯誤
詳情如下:
我的目標&背景:我想在我的A9主板我的內核的開機調試的「不精確的外部終止」的內存故障。 我得到了不精確的中止錯誤如下:
[ 1.248680] Unhandled fault: imprecise external abort (0x406) at 0xc397ffec
我的目標是儘量和收集的棧和寄存器的更多細節時,該中止正在發生。一旦中止發生,我注意到它正在被引導到名爲asmlinkage void __exception do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
的處理程序。
我呼籲dump_stack()
這個功能,這給了我下面的堆棧內登記數據:
[ 1.245755] CPU: 0 PID: 240 Comm: hotplug Not tainted 3.14.26-ts-armv7l #3
[ 1.245845] [<c0011fe0>] (unwind_backtrace) from [<c0010934>] (show_stack+0x10/0x14)
[ 1.245869] [<c0010934>] (show_stack) from [<c00083c0>] (do_DataAbort+0x40/0x9c)
[ 1.245906] [<c00083c0>] (do_DataAbort) from [<c0277f74>] (__dabt_usr+0x34/0x40)
[ 1.245919] Exception stack(0xc397ffb0 to 0xc397fff8)
[ 1.245935] ffa0: 00000000 00000000 00000000 00000000
[ 1.245952] ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[ 1.245969] ffe0: 00000000 be95fe80 00000000 b6f98eec 00000010 ffffffff
[ 1.245985] Unhandled fault: imprecise external abort (0x406) at 0xc397ffec
我可以從解決FFEC對應b6f98eec
上面的數據說明。我不知道這會導致中止的價值。我對我的Linux映像(vmlinux文件)運行了nm
和objdump
,並且無法將其跟蹤到任何符號地址。 現在,我試圖從同一個處理程序中調用save_stack_trace()
和print_stack_trace()
,以獲取有關此中止的更多詳細信息。
變化我已經完成:我加入
save_stack_trace()
和print_stack_trace()
如下: 在該文件的頂部,我有以下: 頭文件夾雜=>#include<linux/stacktrace.h> #include<asm/stacktrace.h> #ifdef CONFIG_STACKTRACE static unsigned long stack_entries[32]; static struct stack_trace my_trace = { .nr_entries = 0, .entries = &stack_entries[0], .max_entries = 32, .skip = 0 }; #endif
我觀察和問題: 當我編譯該代碼,我正在看起來像一個接頭誤差的誤差:
arch/arm/mm/built-in.o: In function 'do_DataAbort': :(.exception.text+0x58): undefined reference to 'print_stack_trace' make[1]: *** [vmlinux] Error 1
功能do_DataAbort
裏面,我已經添加了下面的代碼:
#ifdef CONFIG_STACKTRACE
save_stack_trace(&my_trace);
printk(KERN_ALERT "calling print_stack \n");
print_stack_trace(&my_trace, 32);
#endif
在頭文件include/Linux/stacktrace.h
的頂部,我試圖定義CONFIG_STACKTRACE
。
#define CONFIG_STACKTRACE
請求您的幫助來解決這個問題。請讓我知道是否需要任何信息。