2013-06-17 4 views
1

J'utilise une ancienne version du code linux (2.6.27). J'ai le CONFIG_BUG = y et aussi le HAVE_ARCH_BUG défini. Donc j'utilise la définition BUG() dans le fichier asm-x86/bug.h au lieu de asm-generic. Je vois que lorsque j'insère un module de test (qui a juste un appel BUG()), il ne plante pas la boîte. Je suis capable d'arriver à la console. C'est un système SMP donc je m'y attends. La question que j'ai est, par conception, était BUG() censé accrocher la boîte comme panique? Si oui, quelle est la raison pour laquelle ce n'est pas sur ce noyau?L'appel BUG() du noyau Linux ne bloque pas le noyau

thx Murali

+0

Ceci est x86, correct? –

+0

Oui c'est le système x86 32 bits. – Murali

Répondre

1

BUG() lui-même est pas censé accrocher la boîte, de sorte que le comportement de votre système est OK.

Sur x86, BUG() tente éventuellement d'exécuter l'instruction machine ud2 qui conduit à l'exception "Invalid opcode". C'est au noyau de gérer cela, de produire un message et de continuer à travailler ou à s'arrêter. Différents noyaux peuvent réagir de différentes manières ici.

+0

Thx, je le vois maintenant. BUG appelait ud2 qui invoquait die. et à moins qu'il n'y ait panic_on_oops, ou dans un contexte d'interruption, il renvoie juste des sorties avec un signal passé (SIGSEGV) dans ce cas. – Murali

+0

@Murali: exactement. – Eugene