我的系统是基于 x86 的内核和基于 ramfs 的根文件系统。我已经制作了基于 cpio 存档的 ramfs(它将使用 boot=/dev/ram0 作为 RAM 设备),并且我在 init 方面遇到了一些问题。整个目的是将 ramfs 优化到最小,以适应非常小的系统。我正在尝试调试 init 中的问题。我使用以下命令在 Ubuntu 12.10 (Quantal Quetzal) 中启动 QEMU:
qemu-system-x86_64 -kernel linux-3.9.2/arch/x86/boot/bzImage -serial stdio \
-append "root=/dev/ram0 console=tty1"
正如预期的那样,系统进入 OOPS。
我想查看日志以调查崩溃的原因,但我无法使用 Shift 键和 Page Up/Page Down 在 QEMU 控制台中导航。所以我尝试通过命令使用curses将输出重定向到主机终端:
qemu-system-x86_64 -kernel linux-3.9.2/arch/x86/boot/bzImage -serial stdio \
-append "root=/dev/ram0 console=tty1" -curses
但我再次无法导航并找到问题。
附注如果我的系统启动正常(使用正确的 rootfs),那么我就可以导航并查看消息。
如何将消息重定向到终端或文件?
添加以下命令:
console=ttyAMA0 console=ttyS0
qemu-system-x86_64 -kernel linux-3.9.2/arch/x86/boot/bzImage -serial stdio \
-append "root=/dev/ram0 console=ttyAMA0 console=ttyS0"
现在所有 dmesg 日志都将被重定向到您的控制台。
还有一件事:我从上面的命令观察到,你的初始RAM磁盘在哪里?即 -
-initrd (initrdimage)
要启动系统,您需要两个映像,1) zImage 或 bZimage(如果是 x86) 2) rootfs - 根文件系统
在您的情况下,缺少的组件是 rootfs。
根据文档,您可以使用选项 -ngraphic 并且 qemu-system 将直接打印到您的控制台
sudo qemu-system-x86_64 [your things here] -nographic
你可以尝试这样的事情:
qemu-system-x86_64 -serial stdio -kernel linux-3.9.2/arch/x86/boot/bzImage
-追加“root=/dev/ram0 console=ttyS0”
因为默认控制台是 ttyS0