如何使用qemu在终端上运行非GUI操作系统?

51

我希望在我们系的高性能计算机上运行一些程序(拥有8核处理器)。目前我使用终端通过ssh来使用该机器。该机器上安装了Red Hat Linux,但我的程序需要在Solaris上运行。我使用的是x86架构的Nexenta Solaris。

请问是否可以使用qemu通过终端在那台机器上运行Nexenta Solaris?我需要说服管理员确认可行性,否则他将不会在那台计算机上安装qemu,从而不允许我使用虚拟机运行Solaris。还请注意,我不使用Nexenta Solaris的图形用户界面,只使用命令行。在我的机器上,我使用VMware来运行它。

4个回答

71
你可以自己编译qemu并将其安装到你的主目录中。没有内核模式qemu加速器,但qemu将工作,并且速度相当快。 Qemu有两个非图形界面启动选项:http://wiki.qemu.org/download/qemu-doc.html 2.3.4显示选项: - 通常,QEMU使用SDL显示VGA输出。使用此选项,您可以完全禁用图形输出,使QEMU成为一个简单的命令行应用程序。仿真串行端口被重定向到控制台上。因此,您仍然可以使用QEMU通过串行控制台调试Linux内核。 - 通常,QEMU使用SDL来显示VGA输出。使用此选项,当在文本模式下使用curses/ncurses接口时,QEMU可以显示VGA输出。在图形模式下不显示任何内容。 同时它可以通过VNC协议将图形输出发送到另一台机器(使用-vnc选项)。

3
是的,-curses 可以在 ssh 上工作,而 -nographic 则会卡住。 - Sridhar Sarnobat
1
Qemu的原始curses补丁,2005年:https://lists.gnu.org/archive/html/qemu-devel/2005-12/msg00084.html "[Qemu-devel] qemu curses driver" 来自:andrzej zaborowski 日期:2005年12月10日 "当qemu使用“-curses”运行时,它会在当前终端中显示所有内容,无论是本地控制台、Linux帧缓冲区、xterm还是通过ssh运行,将字符渲染任务留给终端...。只要虚拟图形适配器处于文本模式下,这就可以工作。" - osgx
速度将会相当高。有点晚了,但是根据我的经验,使用QEMU编译一些旧CPU的客户代码时,我粗略估计CPU和内存性能会降低约一个数量级,而IO性能不会受到太大影响。通常需要10分钟左右的编译可能需要一两个小时。因此,您的性能取决于您的工作负载。但它确实有效,并且效果很好。 - Andrew Henle

26

Linux: -append 'console=ttyS0'

这个选项也是Linux内核所需的,除了-nographic由osgx在评论中提到

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

在FreeBSD上也成功运行:如何在Qemu下引导FreeBSD镜像


2
“-kernel bzImage” 是什么? - falsePockets
@falsePockets 它是许多可能的Linux内核构建输出之一,请参见:https://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vml/482978#482978 这里有一个示例设置,可以作为示例运行 - Ciro Santilli OurBigBook.com
关于模拟的DOS,如何将输出重定向到CLI? - beppe9000
@beppe9000 你是指 MS-DOS 吗?由于串口是如此通用的硬件,它极有可能也支持串口,你只需要深入研究他们的文档,了解如何告诉它使用所需的串口。如果 QEMU 对于 DOS 有一个类似于 -append 的模拟器,我建议你提出一个单独的具体问题,并链接到它。 - Ciro Santilli OurBigBook.com

6

我曾经为此苦苦挣扎,最后终于想出了解决方法:

你需要安装SGABIOS。有趣的是,这个BIOS在Debian QEMU包中并未包含,因此你需要安装它(作为超级用户):

apt install sgabios  

运行qemu时,请使用“-device”选项告诉虚拟机使用sga输出。

qemu-system-i386 -nographic -device sga discimage.bin

使用ssh,Voila!可以通过stdio的监视器和文本输出完美运行。您可以使用C-a c访问qemu监视器。

祝好,本


1
FYI:sgabios在最近的Debian中不再是一个单独的软件包。 - hildred
没有选择,因为apt install sgabios会删除qemu-kvm qemu-system qemu-system-arm qemu-system-data qemu-system-mips qemu-system-misc qemu-system-ppc qemu-system-s390x qemu-system-sparc qemu-system-x86 - palik

-4

操作系统终端无法在QEMU上运行。因此,您应该在Windows PC上使用PuTTY或者在Linux机器终端上使用。


这不是真的,请看其他答案。 - istepaniuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接