Kernel
GDB +QEMU 中的硬體斷點缺少 start_kernel
我正在嘗試使用 GDB 調試在 QEMU 上執行的核心。
核心已使用以下選項編譯:
CONFIG_DEBUG_INFO=y CONFIG_GDB_SCRIPTS=y
我使用以下命令在 qemu 中啟動核心:
qemu-system-x86_64 -s -S -kernel arch/x86_64/boot/bzImage
在一個單獨的終端中,我從同一路徑啟動 GDB 並按順序發出這些命令:
gdb ./vmlinux (gdb) target remote localhost:1234 (gdb) hbreak start_kernel (gdb) c
我沒有提供 rootfs,因為到目前為止我對完整的工作系統不感興趣,只對核心感興趣。我還嘗試了 hbreak/break 的組合。
由於找不到rootfs,核心剛剛啟動並出現核心恐慌……預期。我希望它在 start_kernel 處停止,然後單步執行程式碼。
觀察:如果我設置一個立即斷點,它會工作並停止,但不是在 start_kernel / startup_64 / main
qemu 是否有可能沒有呼叫所有這些函式,或者它是否以某種方式被屏蔽了?
Kernel: 4.13.4 GDB: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1 GCC: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 system: ubuntu 14.04 LTS
注意:這個完全相同的過程適用於核心 3.2.93,但不適用於 4.13.4,所以我想需要更多配置。我在網上找不到為核心 4.0 及更高版本啟用此調試過程的資源,所以現在我繼續使用 3.2,歡迎對此的任何和所有輸入。
我遇到了同樣的問題,並從linux 核心新手郵件列表中找到了解決方案。
您應該在核心命令行中使用選項禁用KASLR ,或者在建構核心映像時禁用*“處理器類型和功能”中的
nokaslr
核心選項“隨機化核心記憶體部分” 。*
除了 ’nokaslr’ 之外,如果您使用 tcg 加速器,qemu 中還有 gdbstub 錯誤。確保您有一個修復了錯誤的版本。
在下面檢查我送出的更新檔: