为什么学习qemu
- virtual box等虚拟机软件不支持arm处理器的服务器,安卓也有类似的开发版Limbo,IOS平台也有UTM
- qemu支持模拟多种架构x86,arm,mpis,….
创建安卓虚拟机
参数学习
qemu-system-x86_64 -boot d -cdrom ./android-x86_64-9.0-r2.iso -m 2048 -vnc :1 -k en-us
:1
表示端口5900+1
即vnc连接127.0.0.1:5901
- 如果是本地,不设置
-vnc:1
,则会直接弹出图形化窗口 - 如果开机后黑屏,换个iso镜像
- vnc如果键盘没用,等一会,鼠标多点几次就好了
- boot d 表示启动时虚拟机会尝试从光盘设备(CD/DVD)引导。这通常用于安装操作系统,因为在安装过程中需要从光盘引导。 如果你想从虚拟光驱加载一个 ISO 光盘映像(例如,安装操作系统),你可以使用 -cdrom 参数来指定 ISO 文件路径,并配合 -boot d 一起使用。
- boot c 表示启动时虚拟机会尝试从主硬盘设备(通常是虚拟硬盘镜像文件)引导。这用于在已安装操作系统的虚拟机中正常启动。 当你想从已安装的操作系统启动虚拟机,而不是引导光盘时,通常会使用 -boot c。
- 预运行,寻找合适的iso
qemu-system-i386 -boot c -m 4096 -smp 4 -k en-us -cdrom android-x86-9.0-rc2.iso
实践
#创建虚拟磁盘 (base) cndaqiang@macmini android$ qemu-img create -f qcow2 android_virtual_disk.qcow2 20G Formatting 'android_virtual_disk.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480 lazy_refcounts=off refcount_bits=16 #创建虚拟机并挂载磁盘 (base) cndaqiang@macmini android$ qemu-system-i386 -boot d -cdrom /Volumes/KPStoarge/ChromeDownload/cm-x86-13.0-r1.iso -m 4096 -smp 4 -vnc :1 -k en-us -hda android_virtual_disk.qcow2
为了稳定,安装过程分区没有采用GPT的格式, 启动
(base) cndaqiang@macmini android$ qemu-system-i386 -boot c -cdrom /Volumes/KPStoarge/ChromeDownload/cm-x86-13.0-r1.iso -m 4096 -smp 4 -vnc :1 -k en-us -hda android_virtual_disk.qcow2
qemu-system-i386 -boot c -m 4096 -smp 4 -vnc :1 -k en-us -hda android_virtual_disk.qcow2
尝试加速
加速方案tcg
qemu-system-i386 -boot c -cdrom cm-x86-13.0-r1.iso -m 4096 -smp 4 -vnc :1 -k en-us -hda android_virtual_disk.qcow2 -accel tcg
多线程,cpu全部跑满
qemu-system-i386 -boot c -cdrom cm-x86-13.0-r1.iso -m 4096 -smp 4 -vnc :1 -k en-us -hda android_virtual_disk.qcow2 -accel tcg,thread=multi
GPT:
如果你的系统不支持 KVM 或者 KVM 加速不可用,QEMU 仍然提供了其他加速方案以提高虚拟机性能。以下是一些主要的 QEMU 加速方案:
TCG(Tiny Code Generator):TCG 是 QEMU 的默认加速器,它是一种基于软件的虚拟化技术。即使没有硬件虚拟化支持,QEMU 也可以使用 TCG 加速来模拟 CPU 指令。但相对于硬件虚拟化,TCG 的性能通常较差。
HAXM(Intel Hardware Accelerated Execution Manager):HAXM 是针对 Intel x86 架构的加速器。它通过利用 Intel VT-x 技术来提供硬件加速,通常用于在 Intel 处理器上运行 x86 虚拟机。
HV(Hypervisor.framework,macOS 上):QEMU 在 macOS 上可以利用 Hypervisor.framework 进行加速。这种加速器可用于在 macOS 主机上运行虚拟机。
WHPX(Windows Hypervisor Platform,Windows 上):WHPX 是 Windows 上的虚拟化加速器,QEMU 可以使用它来提高 Windows 主机上的虚拟机性能。
KVM/PR/AVIC(x86 上的其他硬件加速):除了 KVM,x86 架构还有其他一些硬件加速技术,如 AMD 的 Process-Scoped Virtualization (PR) 和 Advanced Virtual Interrupt Controller (AVIC)。QEMU 可以利用这些技术来提高虚拟机性能。
用户模式网络堆栈加速(user-mode networking stack acceleration):QEMU 也可以通过用户模式网络堆栈来提高网络性能,尤其是在模拟网络环境时。
其他
Bliss给的参考
qemu-img create -f qcow2 Bliss14.qcow2 20G
#!/bin/bash
qemu-system-x86_64 \
-enable-kvm \
-M q35 \
-m 4096 -smp 4 -cpu host \
-bios /usr/share/ovmf/x64/OVMF.fd \
-drive file=disks/bliss14-k54-gapps.qcow2,if=virtio \
-cdrom images/Bliss14-k54-gapps.iso \
-usb \
-device virtio-tablet \
-device virtio-keyboard \
-device qemu-xhci,id=xhci \
-machine vmport=off \
-device virtio-vga-gl -display sdl,gl=on \
-audiodev pa,id=snd0 -device AC97,audiodev=snd0 \
-net nic,model=virtio-net-pci -net user,hostfwd=tcp::4444-:5555
mac运行 Bliss, 选择VM模式, VM模式中的硬件加速模式(KVM)会报错
(base) cndaqiang@macmini ChromeDownload$ qemu-system-x86_64 -boot d -cdrom Bliss-v15.8.6-x86_64-OFFICIAL-foss-20230703.iso -m 4096 -smp 4 -accel hvf
your cpu does not support sse4.2 instructions
` sse4.2`貌似就是kvm,bliss监测到不知吃kvm了, 然后无法启动, 使用vm中的非硬件加速模式,虽然也报这个错,但是可以启动
qemu-img create -f qcow2 android_virtual_disk.qcow2 20G
qemu-system-x86_64 -boot d -cdrom /Volumes/KPStoarge/ChromeDownload/Bliss-v15.8.6-x86_64-OFFICIAL-foss-20230703.iso -m 4096 -smp 4 -hda android_virtual_disk.qcow2 -accel hvf
qemu-system-x86_64 -boot c -m 4096 -smp 4 -hda android_virtual_disk.qcow2 -accel hvf -net nic -net user
#root后开启5555端口映射adb, 也可以用别的端口XXXX-:5555. 之后就可以在主机用127.0.0.1:5555调试
qemu-system-x86_64 -boot c -m 4096 -smp 4 -hda android_virtual_disk.qcow2 -accel hvf -netdev user,id=mynet0,hostfwd=tcp::5555-:5555 -device e1000,netdev=mynet0 -vnc :1 -k en-us
kernelSU授权给termux
挂载/dev/block/sda
到/mnt
,可以看到里面有grub,有menu.list之类的,就可以修改默认启动项为VM(without HW)
#parallel desktop安装bliss
#bliss 开始adb
#kernelSu 授予termux root权限
#termux 执行(因为bliss无法识别wifi,把网络识别成了有线网卡,不能利用安卓本文的无线调试,所以只能这样)
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
#就可以用局域网调试了
wm size 960x540
√ 120
#上面这样设置完成后,重启也能保存,不用重新输入命令
(base) cndaqiang@macmini ChromeDownload$ adb shell
Parallels Virtual Platform:/ $ wm size
Physical size: 1024x768
Override size: 960x540
#重启后需要断开pc的adb重新连接
adb kill-server
adb connect 10.211.55.19:5555
#安装游戏
adb install 10040714_com.tencent.tmgp.sgame_a2680838_8.4.1.6_fL2tC9.apk
redroid解析
docker里面是linux镜像,oracle上安装的13 进入docker后是aarch64的debian 使用top后,发现跑的是QEMU 错误检查8
cndaqiang@oracle:~$ curl -fsSL https://raw.githubusercontent.com/remote-android/redroid-doc/master/debug.sh | bash -s 6d6fed43afdf
USAGE: bash [container]
redroid安装
modprobe binder_linux devices="binder,hwbinder,vndbinder"
modprobe ashmem_linux
docker run -itd \
--memory-swappiness=0 \
--privileged --pull always \
-v /home/cndaqiang/builddocker/redroid/8arm:/data \
-p 5555:5555 \
redroid/redroid:8.1.0-arm64 \
androidboot.hardware=mt6891 ro.secure=0 ro.boot.hwc=GLOBAL ro.ril.oem.imei=861503068361145 ro.ril.oem.imei1=861503068361145 ro.ril.oem.imei2=861503068361148 ro.ril.miui.imei0=861503068361148 ro.product.manufacturer=Xiaomi ro.build.product=chopin \
androidboot.redroid_width=960 \
androidboot.redroid_height=540 \
androidboot.redroid_dpi=160 \
androidboot.redroid_fps=5 \
redroid.gpu.mode=guest
For x86 ubuntu OK, MINT ERROR
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
786793c9434cdcb54f6aa058ab6cd3319421bed70473f5b401e4c67253f6b052
docker run -itd \
--memory-swappiness=0 \
--privileged --pull always \
-v /Users/cndaqiang/data:/data \
-p 5555:5555 \
redroid/redroid:8.1.0-amd64 \
androidboot.hardware=mt6891 ro.secure=0 ro.boot.hwc=GLOBAL ro.ril.oem.imei=861503068361145 ro.ril.oem.imei1=861503068361145 ro.ril.oem.imei2=861503068361148 ro.ril.miui.imei0=861503068361148 ro.product.manufacturer=Xiaomi ro.build.product=chopin \
androidboot.redroid_width=960 \
androidboot.redroid_height=540 \
androidboot.redroid_dpi=160 \
androidboot.redroid_fps=5 \
redroid.gpu.mode=guest
本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!