# Khắc phục sự cố kernel

Để khắc phục sự cố kernel, hãy sử dụng các phương thức sau:

## Lỗi khởi động do chọn sai hoặc không chọn được DTB

Khi khắc phục sự cố lỗi khởi động do vấn đề tải DTB, hãy xác minh tính xác thực và khả năng truy cập DTB, sau đó làm theo các bước khắc phục sự cố.

Các tình huống sau dẫn tới lỗi khởi động:

- **Lỗi xác thực**

    Ví dụ sau đây mô tả log lỗi do xác thực không chính xác:

Platform Subtype : 0
        DtPlatformLoadDtb qcs6490-rb3gen2.dtb is loaded
        Platform Subtype : -2090817768
        DtPlatformLoadSign qcs6490-rb3gen2.sgn is loaded
        failed to authenticate image !
        Copy to clipboard
- **Lỗi do không truy cập được DTB**

    Ví dụ sau đây mô tả log lỗi do thiếu DTB:

DtPlatformLoadDtb qcs6490-rb3gen2.dtb is loading failed with Status = E
        DtPlatformDxeEntryPoint: no DTB blob could be loaded, defaulting to ACPI (Status == Not Found)
        Copy to clipboard

    Để khắc phục sự cố không truy cập được DTB, hãy thực hiện như sau:

    - Xác minh xem tệp DTB tương ứng có nằm trong gói tệp `efi.bin` hay không.
    - Mount tệp `efi.bin` trên máy chủ phát triển để xác minh những điều sau:

mount -t vfat efi.bin /mnt/
            
            ls -lR /mnt/
            Copy to clipboard
- **Để xác minh DTB đã tải từ kernel log**

    Sử dụng lệnh sau để xác minh DTB được tải trong quá trình khởi động từ kernel log:

dmesg | grep -i model
        Copy to clipboard

## Serial console không hoạt động

Để khắc phục lỗi log serial console, hãy bật các driver tương ứng  trong cấu hình kernel và thêm các tham số liên quan vào đối số khởi động kernel.

- Bật driver sau trong tệp cấu hình kernel:

    - `CONFIG_SERIAL_QCOM_GENI=y`
    - `CONFIG_SERIAL_QCOM_GENI_CONSOLE=y`
- Thêm tham số sau vào đối số khởi động kernel:

console=ttyMSM0,115200n8
        Copy to clipboard
- Để nhận thông báo khởi động sớm từ kernel, hãy thêm tham số sau vào đối số khởi động kernel:

earlycon
        Copy to clipboard

## Gỡ lỗi bộ xử lý từ xa

Để khắc phục lỗi remoteproc, hãy ghi lại kernel log, sử dụng các tệp chữ ký firmware trùng khớp và xác minh vị trí firmware trong thiết bị.

- Đảm bảo rằng tất cả ảnh hệ thống con trùng khớp đều được flash mà không có bất kỳ lỗi nào.
- Xác minh xem có lỗi trong kernel log không.

    Ví dụ sau đây minh họa một kernel log mẫu:

0x000000000A27652C |   5198.790423:   qcom_q6v5_pas 3000000.remoteproc: fatal error received: err_inject_crash.c:413:Crash injected via Diag
        0x000000000A276689 |   5198.801061:   remoteproc remoteproc2: crash detected in 3000000.remoteproc: type fatal error
        0x000000000A2767A1 |   5198.809602:   remoteproc remoteproc2: handling crash #1 in 3000000.remoteproc
        0x000000000A27688E |   5198.816837:   remoteproc remoteproc2: recovering 3000000.remoteproc
        0x000000000A276971 |   5198.823784:   qcom_q6v5_pas 8a00000.remoteproc: subsystem event rejected
        Copy to clipboard
- Tắt tính năng khởi động lại hệ thống con sau để đảm bảo rằng dấu hiệu lỗi remoteproc hiển thị trong log kernel:

echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/recovery
        Copy to clipboard
- Xác nhận xem tất cả các tệp firmware cần thiết có nằm trong `/lib/firmware/qcom/<SoC>` trong hệ thống tệp rootfs hay không.

## Cấu hình gỡ lỗi hoặc symbols không có trong ảnh

Để gỡ lỗi các sự cố thay đổi cấu hình kernel trong đó cấu hình hoặc symbol không có trong ảnh, hãy làm theo các bước sau:

1. Thêm cấu hình gỡ lỗi driver vào tệp `arch/arm64/configs/qcom_debug.config`.
2. Xuất macro `DEBUG_BUILD=1` trước khi chạy lệnh `bitbake`.

Ghi chú

Tệp cấu hình gỡ lỗi trước đó liên quan đến biến thể BSP tùy chỉnh. Thêm các thay đổi vào tệp `qcom.cfg` cho biến thể BSP cơ sở.

## Sắp hết dung lượng bộ nhớ hệ thống

Để gỡ lỗi các trường hợp hệ thống hết bộ nhớ trống, hãy xem phần [Hết bộ nhớ](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-12/debugging_linux_kernel.html#out-of-memory).

## Xác định DTB trong quá trình khởi động

Khi thiết bị khởi động, trình tải khởi động sẽ xác minh các ID sau và tải tệp DTB tương ứng:

qcom,msm-id = <x z>;
    qcom,board-id = <y y'>;
    Copy to clipboard

- x = ID của SoC
- z = ID của phiên bản SoC (trường dành riêng)
- y = ID của CDP, MTP (biến thể phần cứng) và platform
- y' = ID của subtype (giả định là 0 nếu không có)

## Gỡ lỗi kernel RT

Các phương pháp sau đây được dùng để khắc phục sự cố trong kernel RT:

- Làm cách nào để xác minh rằng kernel là thời gian thực?

    Sau khi khởi động xong, hãy chạy các lệnh sau để xác minh loại kernel:

uname -r
        6.6-rt15
        uname -v
        SMP PREMPT_RT
        Copy to clipboard
- Làm cách nào để làm cho driver tuân thủ chuẩn RT?

    Đảm bảo rằng các cơ chế đồng bộ hóa không phá vỡ các giả định của RT.

    Sau đây là các ví dụ về những tình huống có thể phá vỡ các giả định RT và gây ra hành vi hệ thống không mong muốn:

/* Acquiring a preemptible lock in non preemptible context */
        
        preempt_disable( )
        ……
        spin_lock( )
        
        /* Acquiring a preemptible lock in non preemptible context /
        
        raw_spin_lock( )
        ……
        spin_lock( )
        
        /* Acquiring a non preemptible lock in preemptible context /
        
        local_lock_irq( )
           …..
        raw_spin_lock( )
        Copy to clipboard
- Cấu hình gỡ lỗi cho kernel RT

    Sau đây là cấu hình gỡ lỗi cho kernel RT:

    - `CONFIG_DEBUG_ATOMIC_SLEEP` - Kiểm tra sleep bên trong vùng atomic.
    - `CONFIG_PROVE_RAW_LOCK_NESTING` - Cho phép lồng ghép `raw_spinlock` và  spinlock. Đảm bảo không vi phạm các quy tắc lồng ghép khóa trong kernel `PREEMPT_RT`.

        Trong khi gỡ lỗi, bạn có thể chuyển từ kernel RT sang kernel không phải RT. Để chuyển đổi, hãy thực hiện thay đổi đối với tệp `meta-qcom-realtime/conf/layer.conf` để thay đổi cài virtual/kernel trong `linux-qcom-base-rt` và biên dịch lại.

        Để thực hiện thay đổi, hãy chạy các lệnh sau:

- PREFERRED_PROVIDER_virtual/kernel = "linux-qcom-base"
            + PREFERRED_PROVIDER_virtual/kernel = "linux-qcom-base-rt"
            Copy to clipboard

Để biết thêm thông tin về các cơ chế locking trong kernel RT, hãy xem [Lock types and their rules—The Linux Kernel documentation](https://www.kernel.org/doc/html/latest/locking/locktypes.html).

## Khắc phục sự cố virtio

Sử dụng các phương pháp sau để khắc phục sự cố virtio:

- Đảm bảo kernel được biên dịch với các cấu hình cần thiết.
- Xác minh các tùy chọn dòng lệnh QEMU hoặc cấu hình XML libvirt.
- Kiểm tra log hệ thống xem có lỗi hay không.
- Bật chế độ trace trong dòng lệnh QEMU cho virtio bằng cách sử dụng backend trace có sẵn. Để biết thêm thông tin về trace trong KVM, hãy xem [Tính năng trace KVM](https://docs.qualcomm.com/doc/80-70020-3VI/topic/virtualization.html#kvm-traces).

Last Published: Jan 01, 2026

[Previous Topic
Đặt cấu hình trình gỡ lỗi kernel](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/configure-kernel-debugger.md) [Next Topic
Tham khảo](https://docs.qualcomm.com/bundle/publicresource/80-70020-3VI/topics/references.md)