커널 패닉 코어 덤프 출력을 이해하는 방법은 무엇입니까?

커널 패닉 코어 덤프 출력을 이해하는 방법은 무엇입니까?

다음은 내 애플리케이션 중 하나를 실행할 때 얻는 출력입니다.

Kernel bug detected[#1]:
Cpu 0
$ 0   : 00000000 00000000 0fffff00 0fffff00
$ 4   : c6800000 850b7780 8b0043c0 00000040
$ 8   : 000004ac 000004ac 00000002 844e8000
$12   : 00000000 feced300 8430d2ac 0000000a
$16   : 00000040 000000fc 8b759300 00000001
$20   : 00000012 84370000 00000004 00000009
$24   : 00000000 8403d4f4                  
$28   : 8b1c0000 8b1c3ee0 0000000a 84255764
Hi    : 003d08ef
Lo    : 79432700
epc   : 840a754c 0x840a754c
    Tainted: P          
ra    : 84255764 0x84255764
Status: 1100dc03    KERNEL EXL IE 
Cause : 00800034
PrId  : 00019749 (MIPS 74Kc)
Modules linked in: em8xxxcursor(P) em8xxxfb em8xxxcopybit(P) pmem_rua em8xxx(P) llad(P)
Process events/0 (pid: 4, threadinfo=8b1c0000, task=8b0323d8, tls=00000000)
Stack : 8b0323d8 8402d074 843d0c68 843d10e8 8b1c3f80 8b0323d8 843d0cc8 8b2d6de8
        8b2d6de8 8402d194 00000003 00000000 00000000 84300000 84374104 8b124c80
        84255238 fffffffc efffffff 8431d16c 8431d1a4 00000000 00000000 8404c364
        8404cc6c 00000001 8b124c88 8b124c80 8b124c88 8b124c80 8b1c3f80 00000000
        00000000 00000000 00000000 8404cc04 8b03254c 8b03254c 84051638 00000000
        ...
Call Trace:[<8402d074>] 0x8402d074
[<8402d194>] 0x8402d194
[<84255238>] 0x84255238
[<8404c364>] 0x8404c364
[<8404cc6c>] 0x8404cc6c
[<8404cc04>] 0x8404cc04
[<84051638>] 0x84051638
[<84051b14>] 0x84051b14
[<8404cba8>] 0x8404cba8
[<84051650>] 0x84051650
[<8401504c>] 0x8401504c


Code: 3c030fff  3463ff00  00431024 <00028036> 09029cfd  24050001  27bdffc8  0085102b  afb7002c 
Kernel panic - not syncing: Fatal exception in interrupt

이 덤프에서 이 문제를 발생시키는 문제에 대한 정보를 얻을 수 있습니까?

답변1

코어 덤프를 기호 테이블과 연결할 수 있으면 읽기가 더 쉬울 것입니다. 이러한 방식으로 디버깅 도구는 메모리 매핑된 주소를 니모닉(예: 데이터 구조, 함수 이름, 전역 변수 등)으로 변환할 수 있습니다. 우선, 위의 통화 추적이 더 도움이 될 것입니다.

패닉 유발 덤프의 경우 코어 덤프를 읽는 일반적인 접근 방식은 오류를 가능한 원인으로 추적하는 것입니다. 추적할 가능성이 가장 높은 단서는 오류 지점에서 실행 중인 프로세스입니다. 대부분의 커널에서는 적절한 디버깅 기호 정보를 사용하여 명령어별로 뒤로 물러나 잘못된 값을 찾을 수 있습니다.

나는 이 출력의 표현에 익숙하지 않지만 인터럽트에 도달해서는 안 된다고 주장되는 상태에서 커널이 인터럽트를 수신한 것 같습니다. 이 규칙은 데이터 계산이 안전하지 않은 것으로 보일 때 데이터 계산을 방지하여 커널 패닉이 발생하여 수정을 방지하는 것입니다. 그러나 이것은 단지 내 추측일 뿐이다.

많은 커널은 최대한 간소화하기 위해 런타임 시 모든 기호 정보를 제거합니다. 더 쉽게 소화할 수 있는 패닉 출력을 얻으려면 이러한 값을 커널에 컴파일해야 하는 것 같습니다.

관련 정보