如何在启动时捕获整个内核崩溃。

8

我正在使用Buildroot尝试进行自定义内核构建。在构建镜像并在VirtualBox环境中引导后,内核总是在GRUB阶段后发生崩溃。以下是我看到的一般概述:

] CPU: 0 PID: 1 ...
] Hardware name: innotek GmbH ...
] <some registers>
] Call Trace:
]  [<c0a1c995>] dump_stack+...
]  [<........>] panic+...
]  [<........>] do_exit+...
]  ...
] Kernel Offset: 0x0 from 0xc0400000 ...
] ---[ end Kernel panic - not syncing: Attempted to kill init! ...

现在,我假设这只是我想要查看的消息的结尾,但是我没有办法查看它(例如:不能Shift-PageUp)。当恐慌发生时,上述文本不会在屏幕上呈现一秒钟。

我首先偶然发现了一个KernelDebuggingTricks page,其中写道:

减缓启动时内核消息的速度

... [Build] 使用以下选项构建内核:

CONFIG_BOOT_PRINTK_DELAY=y

使用以下内核引导参数启动机器:

boot_delay=N

我已确认我的内核(3.16)已经构建了CONFIG_BOOT_PRINTK_DELAY选项,并尝试在我的GRUB中将boot_delay设置为10、500和1000毫秒。即使设置了1000毫秒的延迟(并等待了大约5分钟),整个内核崩溃日志消息也会在眨眼间被吐出。

有人对我如何查看内核恐慌的根源有任何建议吗?我现在唯一想到的是手动将睡眠添加到内核代码中(这是我想避免的事情)。


1
“上述文本在屏幕上从未呈现一秒钟。”——嗯?你能肯定地陈述发生了什么,而不使用否定语吗?你尝试过将系统控制台分配给串行端口(即tty)(在内核命令行中),以允许日志记录/捕获吗? - sawdust
我已经尝试了你和duskwulf提到的串口,谢谢。 - jdknight
你有什么想法?我也在尝试在 VM 环境中加载自定义内核,但出现了与你类似的问题... 你有什么解决方法吗? - app
2个回答

8

console=ttyS0 console=tty0添加到启动参数中,配置虚拟机同时记录串行控制台和控制台日志,然后在虚拟机设置中配置串行端口输出到文件。如果发生内核恐慌,详细信息将会保存在该文件中。

详情请参见:https://www.virtualbox.org/wiki/Serial_redirect


谢谢!这正是我想要的。使用串口并选择端口模式为“原始文件”。 - jdknight

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接