# 커널 디버거 구성

커널 디버거를 구성하면 런타임 동안 또는 충돌 후에 Linux 커널을 검사하고 제어할 수 있습니다. 커널 GNU 디버거 KGDB 및 동적 추적 프레임워크 같은 도구를 사용하면 단계적 디버깅을 수행하여 커널 코드의 로우레벨 문제를 식별하고 해결할 수 있습니다.

## KGDB를 사용한 커널 및 모듈 디버그

KGDB는 기기의 커널에 대한 실시간 디버깅 지원을 제공합니다.

KGDB를 구성하여 코어 커널 및 모듈 문제를 디버그할 수 있습니다. KGDB는 Qualcomm Linux 커널을 디버그하기 위해 GDB와 함께 사용되는 소스 수준 디버거입니다.

KGDB 커널 디버깅에 대한 자세한 내용은 [Debugging kernel and modules via gdb](https://www.kernel.org/doc/html/v6.14-rc7/process/debugging/gdb-kernel-debugging.html) 를 참조하세요.

## KGDB를 시리얼 COM 포트와 함께 사용

커널 구성 파일에서 다음 커널 드라이버를 활성화하여 시리얼 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

**watchdog 비활성화**

- KGDB를 사용하여 디버깅할 경우 watchdog을 비활성화하세요. SoC는 watchdog이 활성화되면 다시 설정됩니다.
- watchdog을 비활성화하려면 다음과 같은 커널 명령줄 매개변수를 추가하세요.

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

구성에서 watchdog을 비활성화합니다.

**방법 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를 설치합니다.
- GDB와 함께 COM 포트를 사용하여 SoC에 연결하는 중에는 시리얼 포트에 연결된 다른 모든 연결을 종료합니다.
- Windows 호스트에서 COM 포트 번호를 16보다 큰 숫자로 설정합니다. 기기 관리자에서 포트 번호를 확인할 수 있습니다.
- Windows 호스트에서 COM 포트를 `\\.\com<#>` 로 전달합니다.
- 다음 예시를 통해 Windows 호스트의 시리얼 포트에서 연결을 설정합니다. 사용된 시리얼 포트 번호는 COM17입니다. PuTTY를 다시 연결하려면 우선 COM 포트에서 GDB의 연결을 끊습니다. 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-3KO/topics/access-content-from-the-device.md) [Next Topic
커널 문제 해결](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/common_troubleshooting.md)