17

QEMU虚拟机学习(草稿、很乱)

 8 months ago
source link: https://cndaqiang.github.io/2023/09/09/qemu/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么学习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。
  • 预运行,寻找合适的isoqemu-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

如果你的系统不支持 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 协议 ,转载请注明出处!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK