سؤال

لقد قمت بإجراء تغييرات في Sched.C في Linux kernel 2.4 (الواجب المنزلي) ، والآن يذهب النظام إلى ذعر kernel. الشيء الغريب هو: يبدو أنه يمر بالكثير من اختبارات التمهيد والتهيئة ، والذعر فقط في النهاية ، مما يظهر HTE بعد تتبع المكدس:

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

والخطأ هو: "في معالج المقاطعة - لا تزامن"

أعلم أنه من الصعب معرفة أي رمز ، لكن هل يمكن لأي شخص أن يخمن تعليمًا ليشيرني في الاتجاه الصحيح؟

هل كانت مفيدة؟

المحلول

يمكنني أن أعطيك شعاري الشخصي عند تصحيح مشاكل النواة: "إنه خطأك دائمًا".

غالبًا ما أرى المشكلات بسبب الكتابة فوق الذاكرة خارج المكان الذي أعمل فيه - إذا قمت بتغذية الأجهزة عنوانًا غير صحيح لـ DMA على سبيل المثال. قد تكون تضع قفلًا بطريقة ما ؛ يبدو ذلك ممكنًا في هذه الحالة إذا كنت ترى مهلة: قفل مغلق منسي يتسبب في حدوث مهلة بسبب تعليق.

بالنسبة لي ، قد يقترح الذعر في update_process_times مشكلة في مؤشر هيكل المهمة ... لكن ليس لدي أي فكرة.

ضع في اعتبارك أن الأمور في kernel غالباً ما تسوء قبل حدوث الفشل ، لذلك قد يكون اللوم الخاطئ في أي مكان في الكود ، حتى لو كان لا يبدو أنه يجب أن يكون له تأثير. إذا استطعت ، أوصي بإضافة الكود أو إزالة الكود بشكل تدريجي والتحقق من المشكلة لمعرفة ما إذا كان يمكنك عزله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top