簡體   English   中英

調試正在加載的內核模塊

[英]Debug a kernel module being loaded

我想知道是否可以調試正在加載的內核模塊。

注意我目前正在 Linux 2.0.18 上嘗試這個。 我遵循了這個很棒的教程 由於內核配置選項CONFIG_PROC_KCORECONFIG_DEBUG_INFO在此內核版本中似乎不可用,因此我在 Makefile -g -gdwarf添加到CFLAGS ,重新編譯內核和模塊並重新啟動。

然后我可以運行gdb vmlinux /proc/kcore然后p jiffies這給了我$1 = 1470917

這就是我開始迷失的地方,也是因為該內核版本上似乎沒有/sys/module/gdb1/sections ,因為它似乎需要調試加載的模塊。

所以我只是嘗試加載模塊“ne”的符號:

(gdb) symbol-file modules/ne.o

用“y”確認后加載符號。 然后我設置了一個斷點:

(gdb) break ne.c:148
Breakpoint 1 at 0xa: file ne.c, line 148.

現在我想做modprobe ne並到達斷點,但我認為我完全走錯了路。

有可能嗎? 即使它不在這么舊的內核上,我也很高興知道如何調試當前內核上加載的模塊。

您正在鏈接的文檔說明您在調試時不能使用斷點。 否則你可能會意外死鎖內核(例如,如果在斷點上阻塞的線程有一個自旋鎖,調試器需要用來檢查線程呢?),也沒有穩定狀態,因為內核需要繼續運行。

我只能推測為什么描述這種方法。 我的猜測是幾年前,當很少有人擁有支持虛擬化的硬件或多台機器進行遠程調試時,沒有太多選擇。

解決的方法是使用 qemu 之類的東西並從主機附加到 vm。 http://wiki.osdev.org/Kernel_Debugging

此外,對於事后調試,您可以使用https://people.redhat.com/anderson/crash_whitepaper/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM