1

Linux カーネル 2.4 (宿題) の sched.c に変更を加えたところ、システムがカーネル パニックに陥りました。奇妙なことに、多くの起動チェックと初期化に合格しているように見え、最後の最後でのみパニックになり、次のスタック トレースが表示されます。

update_process_times
do_timer
timer_interrupt
handle_IRQ_event
do_IRQ
call_do_IRQ
do)wp_page
handle_mm_fault
do_page_fault
do_sigaction
sys_rt_sigaction
do_page_fault
error_code

エラーは次のとおりです。「割り込みハンドラーで-同期していません」

コードがないとわかりにくいことはわかっていますが、正しい方向に向けるための知識に基づいた推測を誰かが行うことができますか?

4

1 に答える 1

1

カーネルの問題をデバッグするときの個人的なマントラをお伝えします。「それは常にあなたのせいです」。

作業している場所以外のメモリを上書きすることによる問題がよく見られます。たとえば、ハードウェアに DMA の不適切なアドレスを供給した場合などです。どういうわけかロックを台無しにしている可能性があります。この場合、タイムアウトが発生している場合、それが可能であると思われます。ロックされたロックを忘れると、ハングが原因でタイムアウトが発生します。

私にとって、update_process_times のパニックは、タスク構造体ポインターの問題を示唆している可能性があります...しかし、私にはまったくわかりません。

カーネル内の事柄は、障害が発生するずっと前にうまくいかないことが多いため、コードのどこかに間違ったビットがあると、影響がないように見えても、責任がある可能性があることに注意してください。可能であれば、コードを段階的に追加または削除し、問題を特定できるかどうかを確認することをお勧めします。

于 2010-04-30T20:23:05.137 に答える