[全网首发] 红米 Note 10 Pro 联发科1100 启用 KVM 运行 QEMU

您所在的位置:网站首页 天玑11006nm [全网首发] 红米 Note 10 Pro 联发科1100 启用 KVM 运行 QEMU

[全网首发] 红米 Note 10 Pro 联发科1100 启用 KVM 运行 QEMU

2024-07-15 16:45| 来源: 网络整理| 查看: 265

前言:

KVM:既Kernel-based Virtual Machine

你可以叫它linux内核虚拟机

这是一个内核功能 你可以在编译内核的时候将它开启 或者作为一个模块载入内核

有了它 你可以让linux内核变成一个hypervisor

配合QEMU运行硬件虚拟化加速支持的虚拟机

安卓内核是基于linux

这里以arm64架构进行讨论(x86不在本次讨论范围)

我们市边上大部分手机都是arm64架构的

arm64又是一个精简指令集

果想要让kvm工作的话 光靠编译内核开启虚拟化和kvm是不足够的 

首先排除自身CPU以及CPU的OEM厂商对虚拟化的限制

剩下的就涉及到一个新的概念:arm64异常级别(Exception Level 简称为EL)

这里的异常指的是 在精简指令集(RISC)体系结构中 中断或打断程序正常执行的事件 //不理解没关系

arm64有4个异常级别EL0/1/2/3

ARM64处理器在EL0时执行进程

在EL1时执行内核

EL2对应的是虚拟机监控器

EL3对应的是安全监控器

其中arm64架构安全扩展又分为正常世界和安全世界 通过安全监视器EL3(三星的SBOOT貌似是运行在此级别上)进行切换

我们需要注意的是 这里面有个异常级别二(EL2)对应的是虚拟机监控器

而kvm想要正常工作 必须要运行在EL2上  并且kvm是属于内核空间 因此为了方便切换 让内核运行在EL2便是整个安卓kvm成功的关键问题

可是手机厂商对这个异常级别是不开放的(pixel6系列是个意外)

这个地方往往被手机厂商用来执行一些自定义代码

如果这个级别被开放 那么它的权限将高于整个系统

(举一个例子 我们解锁了设备的bootloader 也仅仅是对EL1完全掌控) 

但是凡是都有以外的联发科的天玑 1100 内核直接运行在了EL2上

现在这个设备上的KVM还是残血状态 还有很多问题没有解决

因为寄存器捕获的问题是无法运行windows系统的

只能够运行linux系统

开始之前

你应该准备如下东西 

红米 Note 10 Pro (国行)手机一部 (需要 解锁 \ ROOT \ TWRP)

UP提供的内核文件由 @无念_ 编译

Linux安装镜像

你还更应该注意以下事项

本教程不讨论任何有关于这样做的意义问题(生命的意义在于折腾) 

在进行教程时务必做好数据备份

关于kvm运行windows arm64系统

这个目前来说还是没能实现

UP也实测了一下  Windows  boot manager过后不会转圈圈  目前是缺少对一些寄存器的捕获

Android搭建QEMU环境

1.部署chroot debian linux

建议选择debian sid的chroot

Qemu是一个多平台的开源虚拟机

他没有为安卓专门出过apk

但是我们仍然可以运行它

这里我推荐使用termux里面部署一个chroot debian安装QEMU

可以先去参考下UP发的视频教程

https://www.bilibili.com/video/BV1Qe411j7vB

2.刷入KVM内核

进入TWRP

刷入KVM内核

内核下载链接( https://olphschool-my.sharepoint.com/:u:/g/personal/a7556_365v_me/ETTH-imS0IZNngDlpusEg2MBIULNXc7WXmnkWZm39-mpAg?e=zl5u8X )

3.安装QEMU

在终端里面输入

apt install qemu-system-aarch64

结束以后输入

qemu-system-aarch64 --version

//检查qemu版本以及是否安装到位

4.KVM调用测试:

输入以下命令:

qemu-system-aarch64 -M virt -cpu host --enable-kvm -monitor stdio -vnc :0

你的面前应该会出现一个QEMU控制台

此时输入info kvm

输出的

kvm support: enable

就调用成功了

5.启动QEMU

设置音频

export PULSE_SERVER=tcp:127.0.0.1:4713 启动命令qemu-system-aarch64 -machine virt,accel=kvm,gic-version=host -object memory-backend-ram,id='pc.ram',size=2048,x-use-canonical-path-for-ramblock-id='off' -m 2048M -cpu host -smp 4,cores=1,threads=1,sockets=4 -device virtio-gpu-pci,edid=true,max_hostmem=512M,xres=1600,yres=720 -usb -device usb-ehci,id='ehci',maxframes='128' -device usb-tablet -device usb-kbd -enable-kvm -serial stdio -drive if=none,file='虚拟机空白镜像文件',id=hd0 -device virtio-blk-device,drive=hd0 -pflash /你的目录/EFI_DEBUG.img -pflash /你的目录/EFI_VARS.img -smbios type='4',manufacturer='Intel',max-speed='2600',current-speed='2600',sock_pfx='XBZJ',version='QEMU-XBZJ',serial='XBZJ'  -display 'vnc'="127.0.0.1:0",key-delay-ms='0',connections='30000',to='2',lossy='off',non-adaptive='off',id='video0',audiodev='HDA' -audiodev 'alsa',id='HDA',in.channels='2',in.frequency='44100',out.buffer-length='4399',in.format='s16',in.voices='2' -device 'intel-hda' -global intel-hda.multifunction='on' -global intel-hda.msi='auto' -device 'hda-duplex' -global hda-duplex.mixer='true' -global hda-duplex.use-timer='true' -global hda-duplex.cad='4294967295' -global hda-duplex.audiodev='HDA' -drive if=none,file=/安装盘,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom

如果不出意外就可以去VNC连接

地址 127.0.0.1:0

安装好后关机

去掉后面的光盘命令

启动

qemu-system-aarch64 -machine virt,accel=kvm,gic-version=host -object memory-backend-ram,id='pc.ram',size=2048,x-use-canonical-path-for-ramblock-id='off' -m 2048M -cpu host -smp 4,cores=1,threads=1,sockets=4 -device virtio-gpu-pci,edid=true,max_hostmem=512M,xres=1600,yres=720 -usb -device usb-ehci,id='ehci',maxframes='128' -device usb-tablet -device usb-kbd -enable-kvm -serial stdio -drive if=none,file='虚拟机空白镜像文件',id=hd0 -device virtio-blk-device,drive=hd0 -pflash /你的目录/EFI_DEBUG.img -pflash /你的目录/EFI_VARS.img -smbios type='4',manufacturer='Intel',max-speed='2600',current-speed='2600',sock_pfx='XBZJ',version='QEMU-XBZJ',serial='XBZJ'  -display 'vnc'="127.0.0.1:0",key-delay-ms='0',connections='30000',to='2',lossy='off',non-adaptive='off',id='video0',audiodev='HDA' -audiodev 'alsa',id='HDA',in.channels='2',in.frequency='44100',out.buffer-length='4399',in.format='s16',in.voices='2' -device 'intel-hda' -global intel-hda.multifunction='on' -global intel-hda.msi='auto' -device 'hda-duplex' -global hda-duplex.mixer='true' -global hda-duplex.use-timer='true' -global hda-duplex.cad='4294967295' -global hda-duplex.audiodev='HDA'

到这里就完事了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3