我在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
错误是:“在中断处理程序中 - 不同步”
我知道没有任何代码很难说,但任何人都可以做出有根据的猜测,指出我的方向正确吗?
答案 0 :(得分:1)
在调试内核问题时,我可以给你自己的个人口头禅:“这总是你的错。”
我常常看到由于在我工作的地方以外覆盖内存而导致的问题 - 例如,如果我为DMA提供错误的地址。你可能会以某种方式搞砸锁;在这种情况下,如果您看到超时,这似乎是可能的:忘记锁定锁定导致由于挂起而发生超时。
对我来说,update_process_times中的恐慌可能表明任务结构指针存在问题......但我真的不知道。
请记住,内核中的内容在发生故障之前很久就会出错,因此代码中的任何位置都可能有错误,即使它看起来不应该产生影响。如果可以的话,我建议您逐步添加或删除代码并检查问题,看看是否可以隔离它。