# Đặt cấu hình trình gỡ lỗi kernel

Việc đặt cấu hình trình gỡ lỗi kernel cho phép bạn kiểm tra và điều khiển Linux kernel trong runtime hoặc sau khi gặp lỗi. Các công cụ như Kernel GNU debugger KGDB và dynamic tracing frameworks cho phép gỡ lỗi từng bước để xác định và giải quyết các vấn đề cấp thấp trong mã kernel.

## Gỡ lỗi kernel và mô-đun bằng KGDB

KGDB hỗ trợ gỡ lỗi trực tiếp cho kernel trên thiết bị.

Bạn có thể đặt cấu hình KGDB để gỡ lỗi kernel và mô-đun. KGDB là trình gỡ lỗi cấp source-level được dùng với GDB để gỡ lỗi Qualcomm Linux kernel.

Để biết thêm thông tin về cách gỡ lỗi kernel KGDB, hãy xem [Debugging kernel and modules via gdb](https://www.kernel.org/doc/html/v6.14-rc7/process/debugging/gdb-kernel-debugging.html).

## Sử dụng KGDB có cổng serial COM

Bật các kernel driver sau đây trong tệp cấu hình kernel để hỗ trợ KGDB qua cổng serial COM:

CONFIG_FRAME_POINTER
    CONFIG_KGDB
    CONFIG_KGDB_SERIAL_CONSOLE
    CONFIG_HAVE_ARCH_KGDB
    CONFIG_CONSOLE_POLL
    CONFIG_MAGIC_SYSRQ
    Copy to clipboard

Cập nhật dòng lệnh để gỡ lỗi:

# 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

**Tắt tính năng watchdog**

- Tắt tính năng watchdog khi gỡ lỗi bằng KGDB. SoC sẽ reset lại khi tính năng watchdog được bật.
- Để tắt tính năng watchdog, hãy thêm tham số dòng lệnh sau đây cho kernel:

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

**Các phương pháp chuyển sang chế độ gỡ lỗi**

**Phương pháp 1** - Sử dụng `kgdbwait`:

Nếu `kgdbwait` được truyền dưới dạng tham số dòng lệnh, thì kernel sẽ thực hiện như sau: 1. Tạm dừng quá trình thực thi trong khi khởi động 2. Chuyển sang chế độ Gỡ lỗi 3. Chờ kết nối từ GDB từ xa cùng với thông báo sau:

[ 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

Hãy tắt tính năng watchdog trong cấu hình.

**Phương pháp 2** - Sử dụng `Magic SysRq`:

Để chuyển sang chế độ Gỡ lỗi, hãy chạy `SysRq-G` trong shell và chạy lệnh sau:

`echo g > /proc/sysrq-trigger`

**Phương pháp 3** - Bất cứ khi nào bạn muốn dừng tại breakpoint của KGDB trong mã nguồn, hãy thêm đoạn mã sau vào driver mong muốn:

#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

**Phương pháp 4** - Kích hoạt kernel panic: Kernel sẽ tự động chuyển sang chế độ Gỡ lỗi khi xảy ra exception. Để kích hoạt crash, hãy sử dụng tính năng `Magic SysRq`.

`echo c > /proc/sysrq-trigger`

### Kết nối với Qualcomm SoC thông qua GDB qua cổng COM

Cài đặt GDB `gdb-multiarch: mingw64\bin\gdb-multiarch.exe`.

- Đối với GDB dành cho Windows – Cài đặt Mingw-w64 thông qua [MSYS2](https://www.msys2.org/).
- Đối với GDB dành cho Linux – Cài đặt GDB bằng cách [How to Install GDB](https://www.gdbtutorial.com/tutorial/how-install-gdb).
- Đóng tất cả các kết nối khác tới cổng serial, trong khi sử dụng Cổng COM với GDB để kết nối với SoC.
- Trên máy chủ Windows, hãy đặt số cổng COM thành một số lớn hơn 16. Bạn có thể lấy số cổng từ trình quản lý thiết bị.
- Trên máy chủ Windows, hãy truyền Cổng COM dưới dạng `\\.\com<#>`.
- Trong ví dụ sau, hãy thiết lập kết nối từ cổng serial trên máy chủ Windows. Số cổng nối tiếp được dùng là COM17. GDB bị ngắt kết nối khỏi cổng COM trước khi kết nối lại PuTTY. Để gắn kết và tách ra GDB, hãy chạy các lệnh sau:

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

Để đặt , xem breakpoints hoặc kiểm tra thanh ghi CPU, hãy chạy các lệnh sau:

# 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

#### Sử dụng KGDB để gỡ lỗi mô-đun kernel

KGDB là bản vá kernel cho phép gỡ lỗi ở cấp độ source-level của Qualcomm Linux kernel đang chạy, sử dụng giao diện GDB.

Bạn phải có các tệp `.ko` và vị trí của các tệp mô-đun kernel `.text`.

Để lấy địa chỉ phần `.text` của mô-đun đã tải, hãy chạy lệnh sau:

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

Để thêm symbol của tệp mô-đun, hãy chạy lệnh sau:

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

Ví dụ: `add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0`.

Last Published: Jan 01, 2026

[Previous Topic
Truy cập nội dung trên thiết bị](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/access-content-from-the-device.md) [Next Topic
Khắc phục sự cố kernel](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/common_troubleshooting.md)