0

クラッシュするメソッドのobjdumpがあります。クラッシュはメモリアクセスの不良が原因であることがわかりました。メモリアドレスはMIPSレジスタa0に存在します。objdumpを段階的にバックトラック(ウォークスルー)する以外に、レジスタがこのアドレスをどのように取得したかを追跡する方法はありますか(a0はs3などから取得しました)。

そしてもう1つ質問があります。

カーネルでページングは​​どのように行われますか。それらはすべてすでにメモリ内にあるため、カーネルに仮想アドレスの概念があってはなりません。この質問は、クラッシュ時にBADVA(BAD Virtual Address)と呼ばれるものが不正なアドレスを保持しているために発生しました。

これがクラッシュレポートです

Cpu 0
Registries dump
Status: 10000302    KERNEL EXL 
**Cause : 00803c08    TLBL**
**BadVA : fdca9b68**
PrId  : 01019378
4

1 に答える 1

0

クラッシュの主な原因は、BadVAの仮想アドレスに一致するTLBエントリがないことと、CPUが例外モードのときに発生したことです。

BadVAアドレス(fdca9b68)は、仮想アドレス空間のKSEG2領域にあります。この領域は、MIPS Linuxカーネル(通常はカーネルモジュールに使用されます)のマップされたアドレスに使用されます。カーネルモジュールのバグが疑われます。

MIPS CPUで何が起こっているのかを理解したい場合は、購入して調査する必要があります。MIPSRunを参照してください。

于 2012-08-28T22:39:46.697 に答える