我想在我部门的高性能计算机(带有8核处理器)上运行一些程序。现在我使用终端通过 ssh 来使用该机器。该机器上安装了 Red Hat linux。但我的程序需要在 Solaris 上运行。我使用适用于 x86 的 Nexenta Solaris。
可以使用 qemu 通过终端在该计算机上运行 Nexenta Solaris。我需要让管理员相信它可以,否则他不会在那台机器上安装 qemu,从而允许我通过虚拟机使用 Solaris。另请注意,我在 Nexenta Solaris 中不使用 GUI,仅使用命令行。在我的机器上,我使用VMware来运行它。
您可以自己编译qemu并将其安装到您的主目录中。不会有内核模式 qemu 加速器,但 qemu 会工作,而且速度会相当高。
Qemu 有两个非 GUI 启动选项: https://www.qemu.org/docs/master/system/qemu-manpage.html#hxtool-3
2.3.4 显示选项:
-nographic
- 通常,QEMU 使用 SDL 来显示 VGA 输出。使用此选项,您可以完全禁用图形输出,以便 QEMU 成为一个简单的命令行应用程序。模拟串口在控制台上重定向。因此,您仍然可以使用 QEMU 通过串行控制台来调试 Linux 内核。
-display curses
- 通常,QEMU 使用 SDL 来显示 VGA 输出。通过此选项,QEMU 可以在文本模式下使用curses/ncurses 界面显示VGA 输出。图形模式下不显示任何内容。
它还可以通过VNC协议将图形输出发送到另一台机器(
-vnc
选项)
Linux:
-append 'console=ttyS0'
除了 osgx 在评论中提到的
-nographic
之外,Linux 内核也需要该选项:
qemu-system-x86_64 -append 'console=ttyS0' \
-initrd rootfs.cpio.gz \
-kernel bzImage \
-nographic \
-serial mon:stdio \
现在您可以执行以下操作:
-append 'console=ttyS0'
使 QEMU 将 console=ttyS0
内核命令行选项 传递给 Linux,这告诉内核使用 串行端口 而不是显示器。串行端口在主机和客户机之间发送字符,而不是显示器上的像素,然后 QEMU 可以在终端上显示这些字符。
-serial mon:stdio
在这个最小命令中是可选的,但通常是一个好主意。例如,如果您稍后还想添加方便的 -monitor telnet
,它会改善行为:
这可以使用 Buildroot
qemu_x86_64_defconfig
轻松测试。我创建了这是一个高度独立且自动化的设置,让您可以轻松尝试此操作
相关但操作系统限制较少:
在 Ubuntu 18.04、QEMU 2.11.1 上测试。
FreeBSD
我已经为此苦苦挣扎了一段时间,终于找到了如何让它为我工作:
您需要安装SGABIOS。有趣的是,这个 BIOS 不包含在 debian qemu 软件包中,因此您需要安装它(作为超级用户):
apt install sgabios
然后,当您运行 qemu 时,使用 -device 选项告诉虚拟机使用 sga 输出
qemu-system-i386 -nographic -device sga discimage.bin
瞧!通过 ssh 完美工作,监视器和文本输出都通过 stdio 发送。您可以使用 C-a c 访问 qemu 监视器。
干杯,本
os 终端无法运行 qemu。所以你应该在 Windows 电脑上使用 putty 或者你应该使用 linux 机器终端。