安卓(arm和x86)上的qemu模拟windows等系统
发表于 : 2014-10-16 12:08
自己做的linux绿色版qemu(静态编译或者带动态库),包括arm和x86版,可用于安卓和其它linux内核的系统,欢迎大家测试反馈。
现在取了个名字,叫APQ(Android Portable version of QEMU),安卓上请尽量使用最新版: http://pan.baidu.com/s/18hP86。压缩包APQ-版本号.zip,下载解压即可使用,也可以安装/卸载(就是自动把文件复制到/data分区,并设置权限)。包内附详细说明。
在红米手机上能测试运行windows xp:正常开机4-5分钟能见桌面,8-10分钟能完全启动;如果保存了快照(snapshots,虚拟机当时的运行状态),用loadvm启动快照,启动时间可以很短,C10的tf卡上,以128M内存运行基本上都小于40秒,以200M内存运行启动时间约10秒;运行速度,可以流畅运行扫雷;内存128M就足够了;可以上网;没有声音。
红米上还成功同时稳定运行两个虚拟机:xp和server 2003 http://tieba.baidu.com/p/3398867806
红米上还可以在虚拟机中使用USB设备:U盘和USB鼠标完全正常、TL-W821N无线网卡点亮。http://tieba.baidu.com/p/3391324692。
红米1是1.5GHz的cortex-a7的cpu,在同频或更高频的cortex-a9或cortex-15机器上可能运行速度更快(目前qemu只会占用单核,所以主要取决于单核性能)。
下面的教程是以最初的版本来说的,不适合最新的APQ项目了。最新的APQ项目有安卓下的使用脚本,使用上更为简单,但是可能引入一些人为的bug。如果你对命令行比较熟,下面的教程还是可以参考的。
这里有最原始的版本http://pan.baidu.com/s/1lMFfw,其中包括arm版和x86版(qemu-system-i386_for_arm.zip 和qemu-system-i386_for_x86.zip )。测试用镜像都在APQ_test开头的zip文件里,包括windows xp、windows 2003 server(仅供测试交流用,勿做商业用途、并于下载后24内删除),另外还有安卓x86-4.4-r1。
支持sdl,gtk,vnc版,可支持Android及Linux各发行版,但未广泛测试。
之前发布的静态库版本只支持vnc(忘了支不支持gtk了),比较乱,放在最后。
安卓下使用说明
针对超级小白们的更详细的图文教程http://tieba.baidu.com/p/3368194790
初级:
需要安装终端应用(推荐“超级终端/终端模拟器”或“Connectbot”)或者用adb shell或者ssh(推荐ssh/sftp Server)。
很多人使用的tf卡和内置sd卡文件系统都是fat格式的,会遇到权限问题(permission denied),所以建议程序文件的整个目录(qemu-system-i386_for_arm)放到/data分区中(这里应该需要root权限),镜像文件解压后可放到sd目录下,然后我们就开始输入下面的命令来启动虚拟机了:
然后开一个vnc客户端(推荐vnc viewer/realvnc),新建一个连接,本地5900端口(localhost:5900或127.0.0.1:5900),连接,应该就可以看到系统在启动了。
把第一条和第四条中间加个分号,作为终端应用登入时的命令,就可以一键启动系统了(别忘了还要回车哦)。
进阶一:使用sdl作为图形界面而不是vnc
功能:图形界面不使用vnc客户端,而是使用XServer XSDL这个应用。
好处:vnc客户端有各种虚拟按键,适合手触操作,但是不能全屏,且虚拟按键比较碍眼,如果你有外接键盘或者输入法自带ctrl、alt这些功能键,就可以使用XServer XSDL,默认是1:1显示,清晰度好,虚拟系统的分辨率调到满屏会很舒服。按返回键可以调出虚拟键盘。XServer XSDL放到后台会占用资源很少,相应的虚拟机运行速度就会非常慢,这个是优点也是缺点。
用法:运行前先打开XServer XSDL,然后输入:
进阶二:使用qemu命令,自定义硬件配置。
建议配置:
参数说明:
-m 128是指内存大小为128M;
-net user 是QEMU最简单的但是效率比较低的一种上网方式,-net nic,model=? 可以查看能使用网卡类型;
-soundhw help 可以查看可以使用声卡类型;
-vga vmware 使用vmware显卡模拟,可以有较高的分辨,但是好像有不稳定的现象,要是出现闪退什么的,请去掉这个选项使用默认或其它的;
-vnc :0 在5900端口开vnc服务,使用sdl不需要这个。
-monitor stdio 使用标准输入输出,也就是你敲命令的终端作为qemu的控制台,你会在终端中看到(qemu)这个提示符。
进阶三:保存和重载快照,提高启动速度
注意,保存和重新载入快照功能只能用于qcow2的镜像。
想要保存运行状态,Ctrl+Alt+2切换到qemu控制台(如果启动时用了-monitor stdio则直接在终端里输入):
s0是自己取的名字,这里取决于存储介质的类型,可能需要等待个几分钟的样子。
然后你就可以随便中断当前虚拟机的运行了,qemu控制台里输入q或者在运行qemu-system-i386的终端中ctrl+c都可以。
下次想启动,输入:
注意,loadvm时所用的参数一定要和savevm时的参数一致,所以最好像“进阶二”中那样,把配置写详细,下次启动用同样的配置。xp.qcow2镜像已经有一个快照,名字就是s0,配置正是“进阶二”中使用的参数(如果有问题的话,还是自己重新做吧)。
查看已保存的snapshots,在qemu的控制台输入info snapshots。
要保存新状态,使用同样的名字,或者delvm原来的snapshot,再savevm。
进阶四:创建镜像和安装系统
不建议直接在手机上创建镜像,所以软件中不包含qemu-img。
Linux下创建镜像及安装系统
windows下的qemu也是一样的,不过文件上面的命令都带.exe而已,而且需要先切换到安装目录。
注意,这里为了简单,虚拟机的各种硬件配置都使用默认的。制作的时候,最好是把各项配置写清楚,这样在别的机器上使用的时候也就能按这个配置启动系统,否则虚拟机里的系统可能遇到各种硬件问题,造成蓝屏(windows)、不响应之类的现象。
静态版:
arm版下载地址:http://pan.baidu.com/s/1hqBYLZu
(windows xp镜像本身870多M,qemu-system-i386约25M,还有一些pc-bios的配置文件等,不过有的文件是多余的,也懒得去搞明白,直接整个pc-bios目录+qemu-system-i386了)
x86版下载地址:http://pan.baidu.com/s/1kTtBKSB,在安装有32位库的ubuntu 12.04 amd64平台上能用,在虚拟和实体的android-x86上也能用。
x64版下载地址:http://pan.baidu.com/s/1kTKGim7,在编译的机器——ubuntu 12.04 amd64平台上能用。
可能遇到的问题及解决办法:
1. 静态版,可能遇到4楼那样keymap的问题,提示“Could not read keymap file 'en-us'”的。请把keymaps目录下的en-us、common和modifier三个文件和qemu-system-i386放到同一个目录下。
2. 如果qemu-system-i386这个文件已经是755的权限了,但是还是提示“sh:qemu-system-i386 Permission Denied”,请把qemu-system-i386_for_arm/bin/ld-linux-armhf.so.3的权限,也改为755。
额外说明:
运行支持硬件浮点(armhf)的Linux内核的机器,可能都能运行吧,三星的tizen、LG(hp)的webos、meego、sailfish等都可以尝试哦。
各版本都支持kvm,得Linux内核支持,然后还需要cpu支持虚拟化且是模拟同种cpu,目前能用的也就是x86版本的吧。
在贴吧的帖子及各种成功案例:
http://tieba.baidu.com/p/3361488195
http://tieba.baidu.com/p/3362633184
http://tieba.baidu.com/p/3362613174
http://tieba.baidu.com/p/3351412205
编译tunctl,可以使用NAT方式上网了(2014-10-23)。
使用TAP+iptables静态IP方式上网:http://blog.sina.com.cn/s/blog_59cf67260102v20w.html(2014-10-24)
声音问题还是没有解决。
本人的编译过程简单记录:
http://blog.sina.com.cn/s/blog_59cf67260102v1pv.html
http://blog.sina.com.cn/s/blog_59cf67260102v1tf.html。
现在取了个名字,叫APQ(Android Portable version of QEMU),安卓上请尽量使用最新版: http://pan.baidu.com/s/18hP86。压缩包APQ-版本号.zip,下载解压即可使用,也可以安装/卸载(就是自动把文件复制到/data分区,并设置权限)。包内附详细说明。
在红米手机上能测试运行windows xp:正常开机4-5分钟能见桌面,8-10分钟能完全启动;如果保存了快照(snapshots,虚拟机当时的运行状态),用loadvm启动快照,启动时间可以很短,C10的tf卡上,以128M内存运行基本上都小于40秒,以200M内存运行启动时间约10秒;运行速度,可以流畅运行扫雷;内存128M就足够了;可以上网;没有声音。
红米上还成功同时稳定运行两个虚拟机:xp和server 2003 http://tieba.baidu.com/p/3398867806
红米上还可以在虚拟机中使用USB设备:U盘和USB鼠标完全正常、TL-W821N无线网卡点亮。http://tieba.baidu.com/p/3391324692。
红米1是1.5GHz的cortex-a7的cpu,在同频或更高频的cortex-a9或cortex-15机器上可能运行速度更快(目前qemu只会占用单核,所以主要取决于单核性能)。
下面的教程是以最初的版本来说的,不适合最新的APQ项目了。最新的APQ项目有安卓下的使用脚本,使用上更为简单,但是可能引入一些人为的bug。如果你对命令行比较熟,下面的教程还是可以参考的。
这里有最原始的版本http://pan.baidu.com/s/1lMFfw,其中包括arm版和x86版(qemu-system-i386_for_arm.zip 和qemu-system-i386_for_x86.zip )。测试用镜像都在APQ_test开头的zip文件里,包括windows xp、windows 2003 server(仅供测试交流用,勿做商业用途、并于下载后24内删除),另外还有安卓x86-4.4-r1。
支持sdl,gtk,vnc版,可支持Android及Linux各发行版,但未广泛测试。
之前发布的静态库版本只支持vnc(忘了支不支持gtk了),比较乱,放在最后。
安卓下使用说明
针对超级小白们的更详细的图文教程http://tieba.baidu.com/p/3368194790
初级:
需要安装终端应用(推荐“超级终端/终端模拟器”或“Connectbot”)或者用adb shell或者ssh(推荐ssh/sftp Server)。
很多人使用的tf卡和内置sd卡文件系统都是fat格式的,会遇到权限问题(permission denied),所以建议程序文件的整个目录(qemu-system-i386_for_arm)放到/data分区中(这里应该需要root权限),镜像文件解压后可放到sd目录下,然后我们就开始输入下面的命令来启动虚拟机了:
代码: 全选
cd /data/qemu-system-i386_for_arm/bin
chmod 755 qemu-system-i386 #(第一次运行时可能需要)
chmod 755 lib/ld-linux-armhf.so.3 #(第一次运行时可能需要)
./qemu-system-i386 -hda /sdcard/xp.qcow2 -vnc :0
把第一条和第四条中间加个分号,作为终端应用登入时的命令,就可以一键启动系统了(别忘了还要回车哦)。
进阶一:使用sdl作为图形界面而不是vnc
功能:图形界面不使用vnc客户端,而是使用XServer XSDL这个应用。
好处:vnc客户端有各种虚拟按键,适合手触操作,但是不能全屏,且虚拟按键比较碍眼,如果你有外接键盘或者输入法自带ctrl、alt这些功能键,就可以使用XServer XSDL,默认是1:1显示,清晰度好,虚拟系统的分辨率调到满屏会很舒服。按返回键可以调出虚拟键盘。XServer XSDL放到后台会占用资源很少,相应的虚拟机运行速度就会非常慢,这个是优点也是缺点。
用法:运行前先打开XServer XSDL,然后输入:
代码: 全选
DISPLAY=:0 ./qemu-system-i386 -hda /sdcard/android-x86-4.4-r1.qcow2
进阶二:使用qemu命令,自定义硬件配置。
建议配置:
代码: 全选
./qemu-system-i386 -hda /sdcard/xp.qcow2 -vnc :0 -m 128 -net user -net nic,model=rtl8139 -soundhw es1370 -vga vmware -monitor stdio
-m 128是指内存大小为128M;
-net user 是QEMU最简单的但是效率比较低的一种上网方式,-net nic,model=? 可以查看能使用网卡类型;
-soundhw help 可以查看可以使用声卡类型;
-vga vmware 使用vmware显卡模拟,可以有较高的分辨,但是好像有不稳定的现象,要是出现闪退什么的,请去掉这个选项使用默认或其它的;
-vnc :0 在5900端口开vnc服务,使用sdl不需要这个。
-monitor stdio 使用标准输入输出,也就是你敲命令的终端作为qemu的控制台,你会在终端中看到(qemu)这个提示符。
进阶三:保存和重载快照,提高启动速度
注意,保存和重新载入快照功能只能用于qcow2的镜像。
想要保存运行状态,Ctrl+Alt+2切换到qemu控制台(如果启动时用了-monitor stdio则直接在终端里输入):
代码: 全选
(qemu) savevm s0
然后你就可以随便中断当前虚拟机的运行了,qemu控制台里输入q或者在运行qemu-system-i386的终端中ctrl+c都可以。
下次想启动,输入:
代码: 全选
./qemu-system-i386 -hda xp.qcow2 -vnc :0 -m 128 -loadvm s0
查看已保存的snapshots,在qemu的控制台输入info snapshots。
要保存新状态,使用同样的名字,或者delvm原来的snapshot,再savevm。
进阶四:创建镜像和安装系统
不建议直接在手机上创建镜像,所以软件中不包含qemu-img。
Linux下创建镜像及安装系统
代码: 全选
qemu-img create -f qcow2 c.qcow2 4095M #创建一个名为c.qcow2的约4G的镜像
qemu-system-i386 -hda c.qcow2 -cdrom system.iso -boot d #启动虚拟机,-cdrom system.iso是系统的iso光盘文件,-boot d表示从cdrom启动。
注意,这里为了简单,虚拟机的各种硬件配置都使用默认的。制作的时候,最好是把各项配置写清楚,这样在别的机器上使用的时候也就能按这个配置启动系统,否则虚拟机里的系统可能遇到各种硬件问题,造成蓝屏(windows)、不响应之类的现象。
静态版:
arm版下载地址:http://pan.baidu.com/s/1hqBYLZu
(windows xp镜像本身870多M,qemu-system-i386约25M,还有一些pc-bios的配置文件等,不过有的文件是多余的,也懒得去搞明白,直接整个pc-bios目录+qemu-system-i386了)
x86版下载地址:http://pan.baidu.com/s/1kTtBKSB,在安装有32位库的ubuntu 12.04 amd64平台上能用,在虚拟和实体的android-x86上也能用。
x64版下载地址:http://pan.baidu.com/s/1kTKGim7,在编译的机器——ubuntu 12.04 amd64平台上能用。
可能遇到的问题及解决办法:
1. 静态版,可能遇到4楼那样keymap的问题,提示“Could not read keymap file 'en-us'”的。请把keymaps目录下的en-us、common和modifier三个文件和qemu-system-i386放到同一个目录下。
2. 如果qemu-system-i386这个文件已经是755的权限了,但是还是提示“sh:qemu-system-i386 Permission Denied”,请把qemu-system-i386_for_arm/bin/ld-linux-armhf.so.3的权限,也改为755。
额外说明:
运行支持硬件浮点(armhf)的Linux内核的机器,可能都能运行吧,三星的tizen、LG(hp)的webos、meego、sailfish等都可以尝试哦。
各版本都支持kvm,得Linux内核支持,然后还需要cpu支持虚拟化且是模拟同种cpu,目前能用的也就是x86版本的吧。
在贴吧的帖子及各种成功案例:
http://tieba.baidu.com/p/3361488195
http://tieba.baidu.com/p/3362633184
http://tieba.baidu.com/p/3362613174
http://tieba.baidu.com/p/3351412205
编译tunctl,可以使用NAT方式上网了(2014-10-23)。
使用TAP+iptables静态IP方式上网:http://blog.sina.com.cn/s/blog_59cf67260102v20w.html(2014-10-24)
声音问题还是没有解决。
本人的编译过程简单记录:
http://blog.sina.com.cn/s/blog_59cf67260102v1pv.html
http://blog.sina.com.cn/s/blog_59cf67260102v1tf.html。