# 排除核心問題

若要排除核心問題，請使用以下方法：

## 因選擇不正確的 DTB 或未選擇 DTB 而導致啟動失敗

排除因 DTB 載入問題而導致的啟動失敗時，請確認驗證和 DTB 可用性，並依照步驟解決問題。

以下情況會導致啟動失敗：

- **驗證失敗**

    以下範例呈現因驗證不正確而導致失敗的紀錄：

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
- **因缺少 DTB 而導致失敗**

    以下範例呈現因缺少 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

    若要解決缺少 DTB 的問題，請執行以下操作：

    - 確認對應的 DTB 檔案是否為已封裝 `efi.bin` 檔案的一部分。
    - 在開發主機上本機掛載 `efi.bin` 檔案以確認以下資訊：

mount -t vfat efi.bin /mnt/
            
            ls -lR /mnt/
            Copy to clipboard
- **若要從核心紀錄確認載入的 DTB**

    使用以下命令從核心紀錄確認啟動時載入的 DTB：

dmesg | grep -i model
        Copy to clipboard

## 序列主控台無法運作

若要排除序列主控台紀錄故障，請在核心組態中啟用特定驅動程式並將相關參數新增至核心啟動引數。

- 在核心組態檔中啟用以下驅動程式：

    - `CONFIG_SERIAL_QCOM_GENI=y`
    - `CONFIG_SERIAL_QCOM_GENI_CONSOLE=y`
- 將以下參數新增至核心啟動引數：

console=ttyMSM0,115200n8
        Copy to clipboard
- 若要從核心取得早期啟動訊息，請將以下參數新增至核心啟動引數：

earlycon
        Copy to clipboard

## 對遠端處理器故障進行除錯

若要排除 remoteproc 故障，請擷取核心紀錄，使用相符的韌體簽署檔案，並確認裝置中的韌體位置。

- 確保已燒錄所有相符的子系統映像，無任何錯誤。
- 確認核心紀錄中是否有任何錯誤。

    以下範例呈現範例核心紀錄：

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
- 停用以下子系統重新啟動功能，以確保 remoteproc 崩潰簽章在核心紀錄中可見：

echo disabled > /sys/kernel/debug/remoteproc/remoteprocN/recovery
        Copy to clipboard
- 確認所有必要的韌體檔案是否存在於 rootfs 檔案系統的 `/lib/firmware/qcom/<SoC>` 中。

## 對組態或符號未反映在映像中的問題進行除錯

如果組態或符號未反映在映像中而要對核心組態變更問題進行除錯，請遵循下述步驟：

1. 將除錯組態驅動程式新增至 `arch/arm64/configs/qcom_debug.config` 檔案。
2. 匯出 `DEBUG_BUILD=1` 巨集，然後執行 `bitbake` 命令。

備註

先前的除錯組態檔屬於自訂 BSP 變體。將變更新增至基礎 BSP 變體的 `qcom.cfg` 檔案。

## 系統記憶體不足

若要對系統耗盡可用記憶體的情況進行除錯，請參閱 [記憶體不足](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-12/debugging_linux_kernel.html#out-of-memory)。

## 啟動時識別 DTB

裝置啟動時，啟動載入器會確認以下 ID 並載入對應的 DTB 檔案：

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

- x = SoC 的 ID
- z = SoC 版本的 ID (保留欄位)
- y = CDP、MTP (硬體變體) 和平台的 ID
- y』 = 子類型的 ID (若不存在，則假設為 0)

## 對 RT 核心進行除錯

使用以下方法排除 RT 核心中的問題：

- 如何確認底層核心是否為即時核心？

    啟動完成後，執行以下命令以確認核心類型：

uname -r
        6.6-rt15
        uname -v
        SMP PREMPT_RT
        Copy to clipboard
- 如何使驅動程式符合 RT？

    確保同步基元不會破壞 RT 假設。

    以下是可能破壞 RT 假設並導致非預期系統行為的情境範例：

/* 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
- 對 RT 核心組態進行除錯

    以下是 RT 核心的除錯組態：

    - `CONFIG_DEBUG_ATOMIC_SLEEP` - 確認原子區段內是否有睡眠。
    - `CONFIG_PROVE_RAW_LOCK_NESTING` - 允許 `raw_spinlock` 與一般 `spinlock` 的巢狀使用確保不違反 `PREEMPT_RT` 核心的鎖定巢狀規則。

        除錯時，可從 RT 核心切換到非 RT 核心。若要切換，請對 `meta-qcom-realtime/conf/layer.conf` 檔案進行變更，變更 `linux-qcom-base-rt` 中的虛擬/核心設定並重新編譯。

        若要進行變更，請執行以下命令：

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

欲深入瞭解 RT 核心提供的鎖定基元，請參閱 [Lock types and their rules—The Linux Kernel documentation](https://www.kernel.org/doc/html/latest/locking/locktypes.html)。

## 排除 virtio 問題

使用以下方法排除 virtio 問題：

- 確保使用所需的組態來編譯核心。
- 確認 QEMU 命令列選項或 libvirt XML 組態。
- 確認系統紀錄是否有錯誤。
- 使用可用的追蹤後端，針對 virtio 在 QEMU 命令列中啟用追蹤。欲深入瞭解 KVM 追蹤，請參閱 [KVM 追蹤](https://docs.qualcomm.com/doc/80-70020-3TC/topic/virtualization.html#kvm-traces)。

Last Published: Jan 01, 2026

[Previous Topic
配置核心除錯器](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/configure-kernel-debugger.md) [Next Topic
參考資料](https://docs.qualcomm.com/bundle/publicresource/80-70020-3TC/topics/references.md)