如何解决内核无法启动而不在屏幕上生成消息的问题

如何解决内核无法启动而不在屏幕上生成消息的问题

我一直在尝试应用 Ingo Molnar 的 retime 补丁,但遇到了黑屏且没有任何消息的情况。即内核恐慌或其他情况。

鉴于我想更好地了解内核,特别是实时补丁,我可以遵循一组方法来获取有关此状态下出现问题的信息吗?

是否有写在某处的日志可供我通过将磁盘插入另一个 Linux 系统来研究,或者是否有一个内核配置选项可以使内核更加冗长,并可能产生某种工件或一种产生内存转储的方法?

事实上,内核开发人员使用什么方法来测试和排除内核故障?

非常感谢您的帮助!

答案1

确保不会丢失来自内核的任何消息的一种方法是在虚拟机中对其进行调试。

例如,以下脚本用于qemu启动具有自定义内核的虚拟机:

qemu-system-x86_64\
    -kernel arch/x86/boot/bzImage\
    -drive file=/home/lgeorget/VM/image.qcow2,if=virtio\
    -append "root=/dev/vda1"\
    -netdev user,id=mynet0 -device e1000,netdev=mynet0\
    -enable-kvm\
    -S

这里重要的选项是-S让 qemu 启动 GDB 服务器并在启动之前等待调试器准备就绪。

在另一个控制台中,转到您编译自定义内核的 Linux 开发树,然后在此处启动 GDB 以gdb vmlinux加载内核符号。接下来,在提示符下键入:

target remote :1234

这将连接到 qemu 启动的 gdb 服务器(在本地主机上,默认端口 1234)。然后,您几乎可以像任何程序一样使用调试器、设置断点、使用 command 继续执行continue等。您应该能够检查和转储内存,如果您想分析日志,还可以复制日志。请注意,但这并不会增加内核的详细程度。

网上有很多教程,还有一些官方文档。

https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu http://wiki.osdev.org/Kernel_Debugging http://elinux.org/Debugging_The_Linux_Kernel_Using_Gdb

相关内容