Kernel

GDB +QEMU 中的硬體斷點缺少 start_kernel

  • March 25, 2021

我正在嘗試使用 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 錯誤。確保您有一個修復了錯誤的版本。

在下面檢查我送出的更新檔:

  1. 單步錯誤:https ://patchwork.kernel.org/project/qemu-devel/patch/20200221002559.6768-1-changbin.du@gmail.com/
  2. 斷點錯誤:https ://patchwork.kernel.org/project/qemu-devel/patch/20200124021728.32518-1-changbin.du@gmail.com/

引用自:https://unix.stackexchange.com/questions/396013