2013-06-17 4 views
1

Я запускаю старую версию Linux-кода (2.6.27). У меня есть CONFIG_BUG = y, а также HAVE_ARCH_BUG. Поэтому я использую определение BUG() в asm-x86/bug.h вместо asm-generic. Я вижу, что когда я вставляю тестовый модуль (который просто имеет вызов BUG()), он не разбивает поле. Я могу добраться до консоли. Это система SMP, поэтому я ожидал бы этого. Вопрос, который у меня есть, по дизайну, был BUG(), который должен был повесить коробку так же, как панику? Если да, то почему это не на этом ядре?Ядро Linux BUG() вызов не вешает ядро ​​

ТНХ Murali

+0

Это x86, верно? –

+0

Да, это x86 32-разрядная система. – Murali

ответ

1

BUG() сам по себе не должен повесить коробку, так что поведение вашей системы в порядке.

На этапе x86 BUG() в конечном итоге пытается выполнить служебную инструкцию ud2, которая приводит к исключению «Недействительный код операции». Это зависит от ядра, как обрабатывать это, выводить сообщение и продолжать работу или останавливаться. Здесь разные ядра могут реагировать по-разному.

+0

Thx, я вижу его сейчас. BUG вызывал ud2, который вызывал смерть. и если нет panic_on_oops или в контексте прерывания, он просто возвращает выходы с переданным сигналом (SIGSEGV) в этом случае. – Murali

+0

@Murali: точно. – Eugene