Windows下编译QEMU

本文详细介绍了如何通过MinGW环境编译QEMU,并加入kqemu加速模块的过程。涵盖了所需软件的下载、配置环境、编译步骤及注意事项。

编译准备:
下载如下软件包
MSYS-1.0.10.exe (http://prdownloads.sf.net/mingw/MSYS-1.0.10.exe?download)
msysDTK-1.0.1.exe (http://prdownloads.sf.net/mingw/msysDTK-1.0.1.exe?download)
MinGW-3.1.0-1.exe (http://prdownloads.sourceforge.net/mingw/MinGW-3.1.0-1.exe?download)
SDL-1.2.9.tar.gz (http://www.libsdl.org/release/SDL-1.2.9.tar.gz)
zlib-1.2.2.tar.gz (http://prdownloads.sourceforge.net/libpng/zlib-1.2.2.tar.gz?download)
directx-devel.tar.gz (http://www.libsdl.org/extras/win32/common)
kqemu二进制安装包 (http://fabrice.bellard.free.fr/qemu/kqemu-0.7.2.tar.gz)
也可以使用Cygwin (http://www.cygwin.com/)
(Cygwin和MinGW是用来将Linux下的软件移植到Win下使用的编译器,Cygwin更加强大,包括对Linux下API的支持还有一套提供Linux界面的工具;MinGW:Minimalist GNU for Windows顾名思义是Windows的小型GNU系统)
本文以MinGW为例(Cygwin使用方法类似,都是在unix shell下敲入相同命令)

编译步骤:
1:安装MSYS-1.0.10.exe到c:/msys,安装完毕后,会弹出系统提示框,这里输入n跳过;
2:安装msysDTK-1.0.1.exe到MSYS-1.0.10.exe的安装目录c:/msys;
3:在c:/msys下建立名为mingw的子目录,将MinGW-3.1.0-1.exe安装到c:/msys/mingw;
4:将SDL-1.2.9.tar.gz(SDL的中文介绍见http://www.libsdl.org/intro.cn/toc.html)、zlib-1.2.2.tar.gz解压到C:/msys/home/usrname/,(usrname为你的用户名),解压directx-devel.tar.gz到C:/msys/mingw
5:运行msys.bat,进入shell。
进入刚才解压的SDL源码目录cd sdl-1.2.9(一定要编译,否则QEMU没有图象输出)
依次输入:

./configure --prefix=/mingw

make

make install


6:按照上面的编译过程再编译zlib

cd zlib-1.2.2
./configure --prefix=/mingw
make
make install

这步用来编译zlib,并安装zlib头文件到正确路径

7:从CVS下载QEMU的源码
进入home目录也就是到C:/msys/home/usrname/目录cd /home/usrname
输入export CVS_RSH="ssh"
cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/qemu co qemu
回答yes建立SSH连接并且下载

官方的版本不带有kqemu加速模块(Kqemu使用的不是GPL协议,要分发必须得到作者授权),导致安装ISO时时间漫长,据称使用kqemu能够使QEMU运行效率提升5倍,所以萌生了自己编译kqemu的念头。

加速模块官方说明:This module enables QEMU to run most of the target application code directly on the host processor to achieve near native performance.
此模块能够使QEMU基于物理机处理器运行绝大部分目标应用程序代码以获得接近本地运行的效率。
这也正好说明了QEMU是真正的CPU模拟器,这个真正的CPU模拟器模拟了一个不同于物理主机的、并不存在的CPU。
我猜想加速模块可以屏蔽QEMU模拟CPU的功能,使之仅作为虚拟机(virtualizer)使用,而不是emulator

8:下载完成后,将kqemu二进制安装包 (http://fabrice.bellard.free.fr/qemu/kqemu-0.7.2.tar.gz)解压到qemu源码目录,这样编译qemu后才能支持kqemu加速模块,称之为qemu built-in with kqemu
shell进入qemu目录
输入./configure --target-list=i386-softmmu --static --enable-adlib
target-list=i386-softmmu表示只生成32位exe可执行文件,如果要生成x64的qemu exe可执行文件可以把参数--target-list=i386-softmmu去掉
接下来会看到屏幕输出如下内容

如图:可以看到QEMU能够支持kqemu了
接下来可以编译QEMU了
shell提示符下输入make,这里有可能会提示找不到texi2html和pod2man命令,texi2html和pod2man是用来编译生成帮助文档的,可以建立两个空白文件取名为texi2html、pod2man。帮助文档可以在官方网站找到。
再次make,完成之后qemu-img.exe在/home/usrname/qemu目录,qemu.exe在/home/usrname/qemu/i386-softmmu目录,这样编译生成的文件体积太大了(包括sdl.dll),运行strip命令来减小它们的体积

strip i386-softmmu/qemu
strip qemu-img.exe


9:最后将

home/usrname/qemu/i386-softmmu/qemu.exe
home/usrname/qemu/qemu-img.exe
home/usrname/qemu/pc-bios/bios.bin
home/usrname/qemu/pc-bios/ppc_rom.bin
home/usrname/qemu/pc-bios/vgabios.bin
home/usrname/qemu/pc-bios/vgabios-cirrus.bin
home/usrname/qemu/kqemu/kqemu.inf
home/usrname/qemu/kqemu/kqemu.sys
home/usrname/SDL-1.2.9/src/.libs/sdl.dll
拷贝出来
这样编译生成的qemu就是支持kqemu的了
要使QEMU使用kqemu加速模块,必须在运行qemu前,首先要安装kqemu驱动,鼠标右击kqemu.inf安装之,在命令行输入
net start kqemu启动kqemu服务
启动qemu后在控制台(CTRL+ALT+2)下输入info kqemu能够查看QEMU对kqemu的支持情况

小提示:
如果编译出错,不需要重新下载源码只需make distclean即可清除编译生成的文件。
注:本文参考了qemu官方论坛comike的文章
补充:
各个版本应该带对应的辅助文件(bios.bin,vga*.bin等),不然会出问题,比如:0.12.2版的qemu不能直接替换掉0.9.0版,启动会有问题的
0.12.2版make install 有问题,发现mingw没有dd 命令,直接把其生成的文件qemu.exe放在一起就可以了!
<think>我们正在回答用户关于在Ubuntu系统下编译QEMU并运行Linux 0.11版本的问题。 根据用户需求,我们需要: 1. 在Ubuntu上编译QEMU(从源码编译) 2. 准备Linux 0.11的镜像文件 3. 使用编译好的QEMU运行Linux 0.11 步骤: 1. 安装编译QEMU所需的依赖包。 2. 下载QEMU源码(选择一个较旧的版本可能更容易成功,因为Linux 0.11很古老)。 3. 配置、编译安装QEMU。 4. 下载Linux 0.11的镜像文件(通常包括根文件系统镜像和内核镜像)。 5. 使用QEMU命令启动Linux 0.11。 注意:由于Linux 0.11非常古老,我们需要使用较旧版本的QEMU(如0.x版本)或使用特定的配置选项。但较新版本的QEMU可能已经不支持一些旧的特性。因此,我们可以尝试使用一个已知能运行Linux 0.11QEMU版本,例如0.12.5。 然而,从源码编译旧版本的QEMU可能会遇到依赖问题,因为Ubuntu系统上的库比较新。因此,我们可以尝试使用一个较新的QEMU版本,并加上一些参数来模拟旧的机器。 另外,有一个名为“Linux 0.11 Lab”的项目,它提供了在Docker/Qemu/Bochs中运行Linux 0.11的环境,我们可以参考。 根据引用[3]:Linux 0.11 Lab works on Linux, Windows and Mac OSX, but please install docker at first, then simply install the environment with these three commands. 但是用户要求编译QEMU,所以我们先提供编译QEMU的方法,然后再提供运行Linux 0.11的方法。 步骤1:安装依赖 在Ubuntu上,打开终端,执行以下命令安装编译QEMU所需的依赖: ```bash sudo apt update sudo apt install git build-essential zlib1g-dev libglib2.0-dev libpixman-1-dev libfdt-dev libsdl1.2-dev libgtk2.0-dev ``` 步骤2:下载QEMU源码 我们可以选择一个较旧的版本,比如0.12.5(因为Linux 0.11需要较旧的模拟器)。但请注意,旧版本可能无法在新系统上编译通过。因此,我们也可以尝试使用较新的版本(如4.2.0)并加上一些参数来运行。 这里我们以0.12.5为例(如果编译失败,可以尝试其他版本或使用新版本加参数): ```bash wget https://download.qemu.org/qemu-0.12.5.tar.gz tar xvzf qemu-0.12.5.tar.gz cd qemu-0.12.5 ``` 步骤3:配置和编译 ```bash ./configure --target-list=i386-softmmu make ``` 如果编译成功,可以安装(可选,安装到系统目录): ```bash sudo make install ``` 或者,我们也可以不安装,直接使用当前目录下的可执行文件(在i386-softmmu目录下)。 步骤4:准备Linux 0.11镜像 我们可以从网上下载Linux 0.11的镜像文件。例如,从以下链接下载: - 内核文件:linux-0.11.img - 根文件系统:rootimage-0.11 或者,我们可以下载一个已经打包好的镜像文件(如hdc-0.11.img,包含根文件系统)。 这里提供一个常用的下载地址(但请注意链接可能失效): - http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip 或者,我们可以使用Linux 0.11 Lab提供的镜像,但需要下载整个项目。 步骤5:运行 假设我们已经有了内核镜像(bzImage)和根文件系统镜像(hdc-0.11.img),我们可以使用以下命令运行: 对于使用旧版QEMU(0.12.5): ```bash ./qemu-system-i386 -m 16M -boot a -fda linux-0.11.img -hda hdc-0.11.img ``` 但是,根据引用[1],他们使用了这样的参数: ```bash qemu-system-i386 -m 16M -boot a -fda Image -hda hdc-0.11.img ``` 这里Image是内核镜像,而hdc-0.11.img是硬盘镜像(包含根文件系统)。 如果我们使用较新版本的QEMU(比如从Ubuntu仓库安装的版本),可以尝试: ```bash qemu-system-i386 -m 16M -boot a -fda linux-0.11.img -hda hdc-0.11.img ``` 或者,如果我们有bzImage(内核文件)和根文件系统,也可以使用-kernel参数: 引用[2]中使用了: ```bash qemu-system-i386 -m 512M -smp 4 -kernel bzImage ``` 但这是针对较新的内核,对于Linux 0.11,我们可能需要指定根文件系统,例如: ```bash qemu-system-i386 -m 16M -kernel bzImage -hda hdc-0.11.img -append "root=/dev/hda" ``` 注意:Linux 0.11的根设备可能是/dev/hda(第一个IDE硬盘)。 如果遇到问题,可以尝试使用旧版本的QEMU,或者使用Linux 0.11 Lab提供的Docker镜像(这样就不需要自己编译QEMU了)。 另外,如果用户不想自己编译旧版本的QEMU,也可以直接安装Ubuntu提供的QEMU(较新版本): ```bash sudo apt install qemu-system ``` 然后尝试运行,但可能需要调整参数。 由于Linux 0.11非常古老,运行它可能需要特定的配置。这里提供一个更简单的方法:使用现成的环境。 方法二:使用Linux 0.11 Lab(通过Docker) 根据引用[3],我们可以使用Docker来运行一个已经配置好的环境: 1. 安装Docker(如果还没有安装): ```bash sudo apt install docker.io ``` 2. 运行以下命令来获取Linux 0.11 Lab的Docker镜像并运行: ```bash docker run -it --name linux-0.11 --rm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -v $HOME/Downloads:/root/Downloads -v $HOME/Developments:/root/Developments tinylab/linux-0.11-lab ``` 但用户要求编译QEMU并运行,所以我们还是回到自己编译的方法。 如果用户编译旧版QEMU遇到问题,可以尝试使用较新版本的QEMU(如4.2.0)并加上一些参数来模拟旧的机器类型。 例如,使用`-machine pc`(默认)或尝试`-machine isapc`(如果支持)等。 总结步骤: 1. 安装依赖 2. 下载QEMU源码(0.12.5或4.2.0) 3. 编译安装 4. 下载Linux 0.11的镜像文件(内核和根文件系统) 5. 运行命令 由于Linux 0.11的镜像文件可能不容易找到,这里提供一个镜像的下载地址(注意:请确保来源可靠): - http://oldlinux.org/Linux.old/bochs/linux-0.11-040615.zip 解压后,里面通常包含: - Image:内核文件 - rootimage:根文件系统(软盘镜像) - hdc-0.11.img:硬盘镜像(根文件系统) 我们可以使用以下命令运行: ```bash qemu-system-i386 -m 16M -boot a -fda Image -hda hdc-0.11.img ``` 或者,如果使用新版本QEMU,并且有bzImage(内核)和根文件系统镜像(hdc-0.11.img),则: ```bash qemu-system-i386 -m 16M -kernel bzImage -hda hdc-0.11.img -append "root=/dev/hda" ``` 注意:bzImage需要从Linux 0.11的源码编译得到,但通常下载的镜像中已经包含。 如果遇到问题,可以尝试使用`-no-kvm`(禁用KVM加速)或`-M isapc`(指定机器类型)等参数。 由于环境配置可能很复杂,如果遇到问题,建议参考Linux 0.11 Lab项目。 最后,我们生成相关问题。</think>### 在Ubuntu下编译QEMU并运行Linux 0.11 #### 1. **安装编译依赖** ```bash sudo apt update sudo apt install git build-essential zlib1g-dev libglib2.0-dev libpixman-1-dev libsdl2-dev libgtk-3-dev ``` #### 2. **下载QEMU源码** 选择兼容旧系统的版本(如4.2.0): ```bash wget https://download.qemu.org/qemu-4.2.0.tar.xz tar xvf qemu-4.2.0.tar.xz cd qemu-4.2.0 ``` #### 3. **配置与编译** 启用i386模拟,禁用新特性以兼容旧系统: ```bash ./configure --target-list=i386-softmmu --disable-kvm --disable-werror make -j$(nproc) sudo make install ``` #### 4. **准备Linux 0.11镜像** 下载镜像文件(含内核和根文件系统): ```bash wget https://oldlinux.org/Linux.old/bochs/linux-0.11-040615.zip unzip linux-0.11-040615.zip cd linux-0.11 ``` 关键文件: - `Image`:内核文件(约500KB) - `hdc-0.11.img`:根文件系统(约10MB) #### 5. **启动Linux 0.11** ```bash qemu-system-i386 \ -m 16M \ # 内存16MB -boot a \ # 从软盘启动 -fda Image \ # 内核镜像 -hda hdc-0.11.img \ # 根文件系统 -append "root=/dev/hda" # 指定根设备 ``` #### 6. **验证运行** 启动后会出现引导日志,最终进入`/ #`提示符: ```bash Booting from Floppy... Loading system ... Uncompressing Linux... done. ... Welcome to Linux 0.11 /bin/sh (tty1) / # ``` > **故障处理**: > - 若启动失败,尝试添加`-machine isapc`指定旧主板类型 > - 若显示异常,添加`-nographic`禁用图形输出 > - 调试需添加`-s -S`参数,配合GDB使用[^1] ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值