# 커널 문제 해결

커널 문제를 해결하려면 다음 방법을 사용하세요.

## 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
- 루트 파일 시스템의 `/lib/firmware/qcom/<SoC>` 폴더에 모든 필요한 펌웨어 파일이 있는지 확인합니다.

## 이미지에 반영되지 않는 구성 또는 기호 디버그

구성 또는 기호가 이미지에 반영되지 않는 커널 구성 변경 문제를 디버그하려면 다음 단계를 따르세요.

1. 디버그 구성 드라이버를 `arch/arm64/configs/qcom_debug.config` 파일에 추가합니다.
2. `bitbake` 명령을 실행하기 전에 `DEBUG_BUILD=1` 매크로를 내보냅니다.

참고

이전의 디버그 구성 파일은 사용자 지정 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 = ID - SoC에 사용
- z = ID - SoC 수정(예약된 필드)에 사용
- y = ID - CDP, MTP(하드웨어 변형) 및 플랫폼에 사용
- 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` 대 스핀 잠금 중첩을 허용합니다. `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 - Linux 커널 문서](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-3KO/topic/virtualization.html#kvm-traces) 를 참조하세요.

Last Published: Jan 01, 2026

[Previous Topic
커널 디버거 구성](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/configure-kernel-debugger.md) [Next Topic
참조](https://docs.qualcomm.com/bundle/publicresource/80-70020-3KO/topics/references.md)