# 配置核心除錯器

配置核心除錯器可讓您在執行階段或崩潰後檢查和控制 Linux 核心。核心 GNU 除錯器 KGDB、動態追蹤框架等工具支援逐步除錯，以找出並解決核心程式碼中的低階問題。

## 使用 KGDB 對核心和模組進行除錯

KGDB 為裝置上的核心提供即時除錯支援。

您可以配置 KGDB，對核心和模組問題進行除錯。KGDB 是原始碼層級除錯器，與 GDB 搭配使用以對 Qualcomm Linux 核心進行除錯。

欲深入瞭解 KGDB 核心除錯，請參閱 [Debugging kernel and modules via gdb](https://www.kernel.org/doc/html/v6.14-rc7/process/debugging/gdb-kernel-debugging.html)。

## 透過序列 COM 連接埠使用 KGDB

在核心組態檔中啟用以下核心驅動程式，以透過序列 COM 連接埠支援 KGDB：

CONFIG_FRAME_POINTER
    CONFIG_KGDB
    CONFIG_KGDB_SERIAL_CONSOLE
    CONFIG_HAVE_ARCH_KGDB
    CONFIG_CONSOLE_POLL
    CONFIG_MAGIC_SYSRQ
    Copy to clipboard

更新除錯的命令列：

# Append  KERNEL_CMDLINE_EXTRA in meta-qcom-hwe/conf/machine/include/qcom-<SoC>.conf with following string
    "kgdboc=ttyMSM0,115200n8 kgdbwait nokaslr"
    
    # If waiting during the boot of kernel for gdb connection is not desired,
    # the parameter 'kgdbwait' can be skipped.
    Copy to clipboard

**停用看門狗**

- 使用 KGDB 除錯時，請停用看門狗。啟用看門狗時，SoC 會重置。
- 若要停用看門狗，請新增以下核心命令列參數：

echo 1 > /sys/bus/platform/devices/hypervisor:qcom,gh-watchdog/disable
        Copy to clipboard

**進入除錯模式的方法**

**方法 1** - 使用 `kgdbwait`：

如果以命令列參數形式傳遞 `kgdbwait`，核心將執行以下操作： 1. 在啟動期間暫停執行 2.進入除錯模式 3.等待來自遠端 GDB 的連線，並顯示以下訊息：

[ 0.239669] printk: console [ttyMSM0] enabled
    [ 1.535669] random: fast init done
    [ 1.541411] KGDB: Registered I/O driver kgdboc
    [ 2.224804] KGDB: Waiting for connection from remote gdb...
    Copy to clipboard

從組態中停用看門狗。

**方法 2** - 使用 `Magic SysRq`：

若要進入除厝模式，請在殼層中執行 `SysRq-G`，然後執行以下命令：

`echo g > /proc/sysrq-trigger`

**方法 3** - 若要在原始碼中設定 KGDB 斷點，請將以下程式碼片段新增至目標驅動程式檔案中：

#include <linux/kgdb.h>   (you may need to include this file )
    kgdb_breakpoint(); //call this for adding a break point at compile time
    Copy to clipboard

**方法 4** - 觸發恐慌：發生例外時，核心會自動進入除錯模式。若要觸發崩潰，請使用 `Magic SysRq` 功能。

`echo c > /proc/sysrq-trigger`

### 使用 COM 連接埠透過 GDB 連線至 Qualcomm SoC

安裝 GDB `gdb-multiarch: mingw64\bin\gdb-multiarch.exe`。

- 如果是適用於 Windows 的 GDB，請透過 [MSYS2](https://www.msys2.org/) 安裝 Mingw-w64。
- 如果是適用於 Linux 的 GDB，請參考 [How to Install GDB](https://www.gdbtutorial.com/tutorial/how-install-gdb) 安裝 GDB。
- 使用 COM 連接埠透過 GDB 連線至 SoC 時，請關閉所有其他與序列連接埠的連線。
- 在 Windows 主機上，將 COM 連接埠號碼設為大於 16 的數字。您可以從裝置管理員中取得連接埠號碼。
- 在 Windows 主機上，將 COM 連接埠傳遞為 `\\.\com<#>`。
- 在以下範例中，從 Windows 主機上的序列連接埠建立連線。使用的序列連接埠號碼為 COM17。GDB 與 COM 連接埠中斷連線，然後再次連接 PuTTY。若要附加和取消附加 GDB 命令，請執行以下命令：

gdb-multiarch.exe -b 115200 <path_to_vmlinux>
        (gdb) target remote \\.\com17
           Remote debugging using \\.\com17
           warning: multi-threaded target stopped without sending a thread-id, using first non-exited thread
           [Switching to Thread -2]
           arch_kgdb_breakpoint () at arch/arm64/include/asm/kgdb.h:21
           21      arch/arm64/include/asm/kgdb.h: No such file or directory.
        Copy to clipboard

若要設定、檢視斷點或檢查 CPU 暫存器，請執行以下命令：

# backtrace:
    > bt
    
    # set a break point:
    break <function_name>
    or
    break <filename>: line no
    
    # View all current break points:
    info break
    
    # View CPU registers:
    info reg
    
    # step over:
    s
    
    # continue execution:
    c
    Copy to clipboard

#### 使用 KGDB 對核心模組進行除錯

KGDB 是核心修補程式，允許使用 GDB 介面對正在運作的 Qualcomm Linux 核心進行原始碼層級除錯。

必須有 `.ko` 檔案並確定 `.text` 核心模組檔案的位置。

若要取得已載入模組的 `.text` 區段的位址，請執行以下命令：

# from live device
    # cat /sys/module/<module>/sections/.text
    Copy to clipboard

若要新增模組符號檔案，請執行以下命令：

(gdb) add-symbol-file <path_to_.ko> <.text_addr>
    Copy to clipboard

例如 `add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0`。

Last Published: Jan 01, 2026

[Previous Topic
從裝置存取內容](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/access-content-from-the-device.md) [Next Topic
排除核心問題](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/common_troubleshooting.md)