[英]Debug a kernel module being loaded
我想知道是否可以調試正在加載的內核模塊。
注意我目前正在 Linux 2.0.18 上嘗試這個。 我遵循了這個很棒的教程。 由於內核配置選項CONFIG_PROC_KCORE
和CONFIG_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.