【问题标题】:Linux kernel BUG() call does not hang the kernelLinux内核BUG()调用不挂内核
【发布时间】:2013-06-17 02:05:07
【问题描述】:

我正在运行旧版本的 linux 代码 (2.6.27)。我定义了 CONFIG_BUG=y 和 HAVE_ARCH_BUG 。所以我在 asm-x86/bug.h 中使用 BUG() 定义而不是 asm-generic。 我看到当我安装一个测试模块(它只有一个 BUG() 调用)时,它不会使盒子崩溃。我能够进入控制台。这是一个 SMP 系统,所以我希望如此。 我的问题是,按照设计,BUG() 是否应该像恐慌一样挂起盒子?如果是这样,为什么它不在这个内核上?

谢谢 壁画

【问题讨论】:

  • 这是 x86,对吗?
  • 是的,它是 x86 32 位系统。

标签: kernel smp


【解决方案1】:

BUG()本身不应该挂框,所以你系统的行为是OK的。

在 x86 上,BUG() 最终会尝试执行 ud2 机器指令,这会导致“无效操作码”异常。由内核决定如何处理它,是输出消息并继续工作还是停止。不同的内核在这里可能会以不同的方式做出反应。

【讨论】:

  • 谢谢,我现在看到了。 BUG 调用 ud2 调用 die。并且除非有 panic_on_oops,或者在中断上下文中,在这种情况下它只是返回带有信号传递(SIGSEGV)的退出。
猜你喜欢
  • 2020-04-17
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2019-02-17
  • 2022-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多