# カーネルデバッガーを構成する

カーネルデバッガーを構成すると、ランタイム時やクラッシュ後にLinuxカーネルの検査や制御ができます。Kernel 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の接続は、PuTTYを再接続する前にCOMポートから切断されます。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-3JA/topics/access-content-from-the-device.md) [Next Topic
カーネルの問題のトラブルシューティング](https://docs.qualcomm.com/bundle/publicresource/80-70020-3JA/topics/common_troubleshooting.md)