Question

J'ai fait des changements dans sched.c dans le noyau Linux 2.4 (devoirs), et maintenant le système passe en panique du noyau. La chose étrange est: il semble passer beaucoup de contrôles et le démarrage initialisations, et paniques seulement à la fin, montrant hte suivant trace de la pile:

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

Et l'erreur est: « Dans le gestionnaire d'interruption - et non la synchronisation »

Je sais qu'il est difficile de dire sans code, mais tout le monde peut faire de une supposition à me diriger dans la bonne direction?

Était-ce utile?

La solution

Je peux vous donner mon propre mantra personnel lors du débogage des problèmes de noyau: «il est toujours de ta faute »

Je vois souvent des problèmes en raison de la mémoire à l'extérieur où l'écrasement je travaille - si je nourrirai une adresse incorrecte du matériel pour DMA par exemple. Vous pouvez être vissant une serrure en quelque sorte; qui semble possible dans ce cas, si vous voyez un délai d'attente:. un cadenas verrouillé oublié provoque un délai d'attente de se produire en raison d'un blocage

Pour moi, une panique dans update_process_times pourrait suggérer un problème avec le pointeur struct tâche ... mais je ne sais vraiment pas.

Gardez à l'esprit que les choses dans le noyau souvent tournent mal bien avant la défaillance se produit, donc un peu partout de mal dans votre code peut être à blâmer, même si elle ne semble pas que cela devrait avoir un effet. Si vous le pouvez, je vous recommande d'ajouter ou de supprimer progressivement et vérifier votre code pour le problème pour voir si vous pouvez l'isoler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top