【问题标题】:Where does the linux kernel panic message go?linux内核恐慌消息在哪里?
【发布时间】:2021-01-13 21:22:09
【问题描述】:

不知道是不是和SO有关。我知道当我使用 Linux 内核 panic 函数时,它的工作是冻结我的系统,但它需要 1 参数,即 消息。如果我的系统完全死机并且我通过按住电源关闭按钮强制关闭我的电脑,我在哪里可以实际看到 消息

ma​​in.c

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h> // panic

MODULE_LICENSE("GPL");

static int __init initialization_function(void)
{
    panic("Module: my message!\n");
    return 0;
}

static void __exit cleanup_funcion(void)
{    
    printk(KERN_INFO "Module: Cleanup done, exiting.\n");
}

module_init(initialization_function);
module_exit(cleanup_funcion);

顺便说一句,我不知道如何才能看到实际的 oops 消息,在哪里以及如何才能看到它?

【问题讨论】:

  • 很可能您打开了图形管理器,因此它不会显示缓冲区消息。登录其中一个 tty(例如 ctrl+alt+F2),确保您会在那里看到它,或者打开终端并输入 dmesg -wHjournalctl -f 以跟踪日志。
  • 通常在控制台上(“视频”(可能带有帧缓冲区)或串行)。它可能会进入内存,以便在下次启动时,内核驱动程序和某些程序可以检索它,以进行进一步处理。
  • @GiacomoCatenazzi,你的意思是持久的 UEFI 内存吗?重启后会写在哪里?
  • @AlexeiMartianov:不,普通 RAM。 RAM 在重新启动时不会重置,因此它只是内核为恐慌保留了一小部分 ram,以及一个检索它的程序。驱动程序没有什么异常(保留 RAM,也可以提前保留,以防内存映射到 IO)。
  • @GiacomoCatenazzi,也许是特定于硬件的,您想到的是哪种硬件?问题没有提到硬件,只有Linux。 en.wikipedia.org/wiki/Reset_button: "在个人电脑上,[NB 1] 重置按钮清除内存"。

标签: c linux-kernel panic


【解决方案1】:

它进入内核控制台,与printk() 消息所在的位置相同。 Wikipedia article on kernel panic有截图:

通常,如果在启动时发生内核崩溃,您将能够看到它。

至于如果你有一个正在运行的桌面系统会发生什么,很遗憾我不记得了。要么你看不到它,要么 X/Wayland 服务器崩溃,你会在控制台中看到它的消息。

【讨论】:

    【解决方案2】:

    正如您自己所注意到的,这非常棘手,因为系统会冻结。您可以做的是在重新启动后查看系统日志。究竟如何做到这一点取决于分布。在带有systemd 的系统上,您可以使用journalctl -xe

    【讨论】:

      猜你喜欢
      • 2013-06-15
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 2012-02-08
      相关资源
      最近更新 更多