当前位置:  开发笔记 > 前端 > 正文

Windows下编译Qemu虚拟机的方法

编译准备:下载如下软件包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?downloa
编译准备:
下载如下软件包
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放在一起就可以了!

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有