カーネルパニックコアダンプの出力を理解するには?

カーネルパニックコアダンプの出力を理解するには?

以下は、私のアプリケーションの1つを実行したときに得られる出力です。

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

コアダンプをシンボルテーブルに関連付けることができると、読みやすくなります。このように、デバッグツールはメモリマップされたアドレスをニーモニック(データ構造、関数名、グローバル変数など)に変換できます。まず第一に、上記の通貨追跡はより役立つでしょう。

パニック誘発ダンプの場合、コアダンプを読み取る一般的なアプローチは、エラーを考えられる原因として追跡することです。追跡する可能性が最も高い手がかりは、エラーポイントで実行されているプロセスです。ほとんどのカーネルでは、適切なデバッグシンボル情報を使用して命令ごとに戻り、誤った値を見つけることができます。

私はこの出力の表現に慣れていませんが、割り込みに達してはいけないと主張している状態で、カーネルが割り込みを受け取ったようです。このルールは、データ計算が安全でないように見える場合にデータ計算を防止し、カーネルパニックが発生して修正を防止することです。しかし、これは私の推測だけです。

多くのカーネルは、可能な限り簡素化するために、実行時にすべてのシンボル情報を削除します。より簡単に消化できるパニック出力を得るには、これらの値をカーネルにコンパイルする必要があるようです。

関連情報