我想在我的部门的高性能计算机(使用8核处理器)上运行一些程序.现在我使用终端ssh使用该机器.机器上安装了Red Hat linux.但我的程序需要在Solaris上运行.我使用Nexenta Solaris for x86.
可以使用qemu通过终端在该机器上运行Nexenta Solaris.我需要说服管理员可以,否则他不会在该机器上安装qemu,因此允许我通过虚拟机使用Solaris.另请注意,我不使用Nexenta Solaris的GUI,只使用命令行.在我的机器中,我使用VMware来运行它.
如何从使用 Qemu 运行的裸机程序获取 UART 输出?
这是我一直在使用的命令行调用:
qemu-system-arm -M xilinx-zynq-a9 -cpu cortex-a9 -nographic -kernel $BUILD_DIR/mm.elf -m 512M -s -S
Run Code Online (Sandbox Code Playgroud)
xilinx-zynq-a9cortex-a9-m 512M表示平台有 512 MiB RAM-s是一个快捷方式-gdb tcp::1234-S意味着启动时冻结CPU我使用的ELF文件(mm.elf)执行一个简单的矩阵乘法运算,然后打印它是成功还是失败,以及运行了多长时间。ELF 是使用 Xilinx ARM 工具链编译的。我用它来进行软件故障注入。目前我使用 GDB 来询问应该打印的变量的值。然而,由于在故障注入的情况下打印可能会出现很多问题,因此最好看看通过 UART 实际发送的内容。
这有一些我尝试过的建议,但它不适用,因为问题是关于在主机终端窗口中获取 Linux 启动消息。
这是一个不太相关的问题,因为它仍然假设用户拥有某种引导加载程序。虽然从技术上讲必须有一个引导加载程序才能运行应用程序,但 Xilinx 在boot.S等文件中提供了此系统代码,然后将其编译到 ELF 文件中,作为之前运行的代码main。
我尝试将这些添加到当前 Qemu 命令的末尾。结果遵循尝试的参数。
-serial mon:stdio
-serial null …我的系统是基于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"
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,系统进入了OOPS.
我想查看日志以调查崩溃的原因,但我无法使用Shift密钥和Page Up/ 在QEMU控制台中导航Page Down.所以我尝试使用curses命令将输出重定向到主机终端:
qemu-system-x86_64 -kernel linux-3.9.2/arch/x86/boot/bzImage -serial stdio -append "root=/dev/ram0 console=tty1" -curses
Run Code Online (Sandbox Code Playgroud)
但在这里,我无法导航并找到问题所在.
PS如果我的系统启动正常(使用正确的rootfs),那么我可以导航并查看消息.
如何将消息重定向到终端或文件?