安卓(arm和x86)上的qemu模拟windows等系统

Kvm、VMware、Virtualbox、Xen、Qemu 等
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

安卓(arm和x86)上的qemu模拟windows等系统

#1

帖子 felonwan » 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目录下,然后我们就开始输入下面的命令来启动虚拟机了:

代码: 全选

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
然后开一个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,然后输入:

代码: 全选

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
s0是自己取的名字,这里取决于存储介质的类型,可能需要等待个几分钟的样子。
然后你就可以随便中断当前虚拟机的运行了,qemu控制台里输入q或者在运行qemu-system-i386的终端中ctrl+c都可以。
下次想启动,输入:

代码: 全选

./qemu-system-i386 -hda xp.qcow2 -vnc :0 -m 128 -loadvm s0
注意,loadvm时所用的参数一定要和savevm时的参数一致,所以最好像“进阶二”中那样,把配置写详细,下次启动用同样的配置。xp.qcow2镜像已经有一个快照,名字就是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下的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
上次由 felonwan 在 2014-11-12 0:07,总共编辑 45 次。
ccc113
帖子: 16
注册时间: 2014-01-25 18:36
系统: windows
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#2

帖子 ccc113 » 2014-10-18 15:37

好像启动不了。。
Screenshot_2014-10-18-15-30-47.png
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#3

帖子 felonwan » 2014-10-18 20:44

ccc113 写了:好像启动不了。。
Screenshot_2014-10-18-15-30-47.png
:em06 第一个反馈的就是启动不了。。。

先查看一下可执行权限是否对:

代码: 全选

ls -al qemu-system-i386
正常应该是-rwxr-xr-x。
如果权限不对,怎么也改不过来,目前我用的解决办法是把qemu那些文件放到/data/下的一个目录下,镜像太大可以还放在sd卡上。
如果权限正常,请说下你机器的配置。
ccc113
帖子: 16
注册时间: 2014-01-25 18:36
系统: windows
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#4

帖子 ccc113 » 2014-10-18 22:20

复制到了data里面改了权限,可还是启动不了,手机是小米3,CPU是高通骁龙800
Screenshot_2014-10-18-22-14-46.png
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#5

帖子 felonwan » 2014-10-18 23:54

ccc113 写了:复制到了data里面改了权限,可还是启动不了,手机是小米3,CPU是高通骁龙800
Screenshot_2014-10-18-22-14-46.png
:em05 你注意到提示信息已经变了没?

keymaps目录下有en-us, common, modifier这三个文件,放到qemu-system-i386同一个目录下就可以了。(这样肯定就可以啦)
或者可以自己指定-k ./keymaps/en-us(这个不确定行不行)。
ccc113
帖子: 16
注册时间: 2014-01-25 18:36
系统: windows
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#6

帖子 ccc113 » 2014-10-19 12:27

这个怎么在手机上安装系统呢
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#7

帖子 felonwan » 2014-10-19 20:59

ccc113 写了:这个怎么在手机上安装系统呢
米3的运行速度怎么样?

我编译的时候倒是有qemu-img这个文件,只是在手机装系统太慢。
建议你在电脑上安装个windows版本的qemu,在电脑上使用windows的命令行安装系统,“进阶四”。另外,qemu贴吧还有视频教程。
上次由 felonwan 在 2014-10-20 16:22,总共编辑 1 次。
1915007283
帖子: 1
注册时间: 2014-10-20 15:15
系统: 安卓
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#8

帖子 1915007283 » 2014-10-20 15:22

可以识别内存卡吗
余为远
帖子: 2
注册时间: 2014-10-20 16:27
系统: windows8.1
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#9

帖子 余为远 » 2014-10-20 16:33

为什么我的手机不能启动,提示 permission denied(没有权限),我都是按照要求输入的
附件
截屏_20141020_162755.png
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#10

帖子 felonwan » 2014-10-20 16:38

1915007283 写了:可以识别内存卡吗
什么意思?
在红米上测试的时候,是所有文件都放在内存卡上用的。
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#11

帖子 felonwan » 2014-10-20 22:02

余为远 写了:为什么我的手机不能启动,提示 permission denied(没有权限),我都是按照要求输入的
你这个我目前也不知道原因,你先再试试静态编译的版本。
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#12

帖子 felonwan » 2014-10-28 20:01

1915007283 写了:可以识别内存卡吗
-hdc /dev/block/mmcblk1p1可用。
felonwan
帖子: 261
注册时间: 2008-09-12 12:32
送出感谢: 2 次
接收感谢: 13 次

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#13

帖子 felonwan » 2014-10-28 20:03

余为远 写了:为什么我的手机不能启动,提示 permission denied(没有权限),我都是按照要求输入的
lib里的ld-linux-armhf.so.3也设置权限为可执行。
kunge
帖子: 2
注册时间: 2015-10-25 15:47
系统: Android
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#14

帖子 kunge » 2015-10-26 1:27

可以用安卓APQ来运行安卓的iso文件吗,为什么我老是失败
kunge
帖子: 2
注册时间: 2015-10-25 15:47
系统: Android
送出感谢: 0
接收感谢: 0

Re: 安卓(arm和x86)上的qemu模拟windows等系统

#15

帖子 kunge » 2015-10-26 1:31

可以用来运行安卓的iso吗,我想在安卓系中虚拟出另一个安卓,但老是失败 :Love
回复

回到 “虚拟机和虚拟化”