Une panique du noyau Linux est un appel de sous-programme que le noyau exécute lorsque la logique du noyau détermine qu'il existe une condition qui rend l'exécution continue de la logique normale impossible ou irresponsable.
Le noyau peut appeler une panique lorsque:
- Il détecte une erreur logicielle dans le code ou la pile du noyau
- Lorsqu'il existe une condition d'exécution telle qu'une mémoire insuffisante sans processus éliminable
- Une exception de processeur pendant l'exécution en mode privilégié entraîne une condition Oops
Il y a environ 950 conditions distinctes où une panique est appelée dans les noyaux 3.X. Le sous-programme de panique imprime d'abord le vidage de la pile du noyau et les registres CPU sur la console. Ensuite, si un noyau kexec en panne a été configuré, il démarre le noyau kexec. Sinon, la routine de panique brise tous les verrous et effectue un redémarrage d'urgence.
Un oops est un sous-programme appelé à partir d'un gestionnaire d'exceptions CPU pour une exception CPU qui se produit lors de l'exécution en mode privilégié (c'est-à-dire le noyau). L'exception peut se produire à la suite d'une erreur dans le code du noyau, ou à cause d'une défaillance matérielle, ou à la suite d'une condition externe qui provoque une exception spécifique. Le gestionnaire de l'exception imprime un journal du noyau avec les registres CPU et la liste des modules. Contrairement aux appels de panique, la logique du noyau elle-même n'appelle jamais un oups en dehors du contexte des gestionnaires d'exceptions CPU.
Si le noyau est configuré pour kexec, un oups entraînera le démarrage du noyau kexec. Sinon, si l'exception se produit lors de l'exécution d'un gestionnaire d'interruption, le oups entraîne un appel de panique du noyau. Sinon, si le noyau est configuré avec «panique sur oops», alors le oops entraînera un appel de panique. Sinon, le noyau quitte le gestionnaire d'exceptions et reprend l'exécution. Lorsque le noyau quitte le gestionnaire d'exceptions et reprend l'exécution, l'intégrité du noyau est suspecte.
Les gestionnaires d'exceptions CPU sont spécifiques à l'architecture. Ils sont généralement implémentés dans arch / * / kernel / traps.c et définis dans le code d'entrée du noyau spécifique à l'architecture qui configure la table d'interruption. Voir par exemple arch/powerpc/kernel/traps.c
et arch/powerpc/kernel/head_fsl_booke.S
.
Les conditions de panique du noyau et oops peuvent être configurées pour appeler une kmsg_dump
routine que vous pouvez utiliser pour enregistrer les informations de débogage sur incident dans la RAM, ou pour flasher la mémoire à moins que les oops ne se soient produits dans un contexte d'interruption, auquel cas la routine «kmsg_dump» ne peut être utilisée que pour enregistrer sur RAM, pas sur MTD. Lors de l'enregistrement dans la RAM, il est de votre responsabilité: a) de vous assurer que la zone RAM utilisée n'est pas remplacée lors du démarrage de kexec ou du redémarrage d'urgence, et b) de récupérer la zone de mémoire à partir du noyau kexec ou de la logique du chargeur de démarrage.