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 回答