有时,Linux 启动在很早的阶段就会失败(例如 initrd 加载)。然后,内核崩溃消息以文本模式显示。由于屏幕高度限制,我只能看到大约 40 行基于文本的内核崩溃消息。为了诊断崩溃原因,我想查看上述消息(例如向上滚动消息),但我不知道该怎么做。有什么好的技巧吗?
答案1
串行端口
这串行端口是 Linux 内核支持并且大多数模拟器模拟的一个古老而可靠的通信协议硬件。
您可以通过它将内核消息流式传输到主机文件或控制台:
量子计算单元(QEMU):
以下是重现该问题的最小设置:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/b366bac0c5410ceef7f2b97f96d93d722c4d9ea6/kernel_module/panic.c
真实硬件:大多数现代笔记本电脑上都没有暴露串行端口,这是一种遗憾......但在桌面上它看起来像这样:
来源。
在 Raspberry Pi 上:
系列替代品
其中甚至提到了更为奇特的方法:确定 Linux 内核崩溃的原因 | Unix 和 Linux Stack Exchange
netdump:通过网络发送跟踪。
假设恐慌没有破坏网络,这比连续发生的可能性更大。
与串行相比,其优点是:
适用于没有串行暴露的系统,如现代笔记本电脑
串行电缆的最大线长非常有限,如果您想将公司的所有电路板放在远程房间以便开发人员之间共享资源,那么这将是有问题的。
不过,如果你的目标暴露了串行端口,我建议使用带有以太网服务器的串行连接器,例如这个:
kdump:启动辅助 Linux 内核,检查崩溃的内核。可能出现什么问题?
这些方法更加灵活,但可靠性较低。
也可以看看:https://unix.stackexchange.com/questions/208260/how-to-scroll-up-after-a-kernel-panic/364966#364966
答案2
Shift您应该能够使用+PageUp和Shift+上下滚动PageUp。
答案3
您应该尝试使用 kexec 内核功能。Kexec 是存储在 RAM 中的辅助内核的功能,尤其适用于这种情况(不仅如此),例如,当内核崩溃时,您想要调查另一个内核的转储。您应该在谷歌上找到足够多的相关信息,因为它可以用于不同的目的。基本上,您只需要在内核配置文件中启用 Kexec,然后将 CRASHKERNEL=XXXM 添加到内核参数中(由引导加载程序传递)。然后编辑一些配置文件,继续体验和谷歌搜索,直到您让它工作......
祝你好運:D