使用Buildroot,我试图做一个自定义的内核构build。 在VirtualBox环境中构build映像并将其引导后,内核在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页面 ,其中指出:
在启动时减慢内核消息
- embedded式Linux上的轻量级debugging
- 如何configurationDDD使用另一个GDB,而不是默认的
- 在C项目中检查未使用的variables
- 如何debugging用“make”编译的程序?
- 如何在我们的过程中同时运行Valgrind,因此其性能不会降低太多?
… [内部版本]启用以下选项:
CONFIG_BOOT_PRINTK_DELAY = Y
用以下内核引导参数启动机器:
boot_delay = N
我已经确认我的内核(3.16)已经使用boot_delay
选项构build,并尝试将boot_delay
设置为boot_delay
和1000毫秒。 即使设置了1000毫秒的延迟时间(并等待大约5分钟),整个内核恐慌日志消息也瞬间传出。
有没有人有任何build议,我可以如何查看内核恐慌的根? 我现在唯一想到的是手动添加睡眠到内核代码(这是我想避免)。
通过将console=ttyS0 console=tty0
到引导参数中,配置您的虚拟机以登录到串行控制台以及控制台,然后将您的机器的串行端口(在VirtualBox设置中)配置为输出到文件。 如果发生内核恐慌,细节将以该文件结束。
有关详细信息,请参阅: https : //www.virtualbox.org/wiki/Serial_redirect
kdump和netdump是两个更多的选择,如果你没有一个串口的便利,这是在大多数现有的笔记本电脑上运行金属的情况下。 有关详细信息,请参阅以下答案: https : //unix.stackexchange.com/a/60928/32558但是,设置涉及更多。
最后,您可能还有兴趣使用JTAG或QEMU(不确定Virtualbox支持) 调试内核 : Linux内核实时调试,如何完成以及使用哪些工具?