安装qemu
QEMU for Windows – Installers (64 bit)
我选了最新的20221230的版本,我将其安装在c:\qemu7\下,另外在环境变量中加入这个路径
然后在别的盘上建立一个路径,名称随意,不要有中文和空格即可,我放在了e:\qemu_rom下
然后在这个目录下运行下面的命令生成一个30G大小的磁盘镜像
qemu-img.exe create win10arm.img 30G
也可以通过我的电脑 -》管理-》计算机管理-》磁盘管理-》更多操作-》创建VHD,选项如图所示一定要选固定大小,不然识别不成功。
下载Linaro UEFI与带虚拟磁盘驱动的虚拟磁盘三个文件,从以下地址获得。
链接:https://pan.baidu.com/s/1lba9kdN8QCiTtfYJtFGt7Q ;
提取码:3w1h
安装arm虚拟机_Windows 10 ARM64 QEMU虚拟机安装步骤_女儿奴的RPG的博客-CSDN博客1,下载QEMU虚拟机软件,使用以下版本,并安装到计算机任意目录之下。https://qemu.weilnetz.de/w64/2017/qemu-w64-setup-20171217.exehttps://qemu.weilnetz.de/w32/2017/qemu-w32-setup-20171217.exe2,下载WINDOWS 10 ARM64镜像,从以下地址获取,下载完成后,把镜像移入Q...https://blog.csdn.net/weixin_36410293/article/details/112570169
下载win10 arm的版本
UUP (Unified Update Platform) Generation Project (v2.4.18) [by @rgadguard & whatever127]This project helps you just download UUP files or download and create an ISO image in one click.https://uup.rg-adguard.net/选择finalversion ,然后windows 版本选1803 arm,如果选高了可能安装不上,然后选中文 ,profession,最后一个选dowload ISO,然后在右边会生成一个cmd的脚本,把这个脚本下载,放到本地,注意路径中不要有空格和中文,然后运行后大约1-2个小时就会自动生成iso的文件了(视网速而定)
将前面的rom,虚拟盘,以及Linaro UEFI与带虚拟磁盘驱动的虚拟磁盘三个文件都放到一个文件夹下
然后新建立一个叫win10.cmd的批处理文件
qemu-system-aarch64.exe ^
-M virt ^
-cpu cortex-a57 ^
-smp 4 ^
-m 4G ^
-pflash QEMU_EFI.img ^
-pflash QEMU_VARS.img ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device usb-storage,drive=install ^
-drive if=none,id=install,format=raw,media=cdrom,file=win10.ISO ^
-device usb-storage,drive=drivers ^
-drive if=none,id=drivers,readonly=on,file=Drivers.vhdx ^
-device virtio-blk,drive=system ^
-drive if=none,id=system,format=raw,file=system.img ^
名称 | 注释 |
---|---|
qemu-system-aarch64.exe | 二进制文件,提供模拟aarch64架构的虚拟机进程 |
-M virt | 模拟成什么服务器,我们一般选择virt就可以了,他会自动选择最高版本的virt |
-cpu cortex-a57 | 模拟成什么CPU,其中cortex-a53\a57\a72都是ARMv8指令集的,都是假的,速度不会差多少 |
-smp 4 | 4个vCPU |
-m 4G | 分配内存4G,实际上看效果2G就够了 |
-device xxx | 添加一个设备,参数可重复 |
-drive | 添加一个驱动器,参数可重复 |
详细的参数说明请参考下面的文章qemu常用参数选项说明_Quard_D的博客-CSDN博客_qemu 参数详解qemu常用参数选项说明在我的系列博客《基于qemu-riscv从0开始构建嵌入式linux系统》中使用qemu项目一步步构造搭建了嵌入式linux系统,而其中在run.sh中qemu的启动参数选项非常多且繁杂,因此本文将对其进行归纳整理。设备类型(-machine/-M)在qemu中,不同的指令集的模拟器会编译成不同的可执行文件,诸如:qemu-system-x86_64/qemu-system-aarch64/qemu-system-arm/qemu-system-mips/qemu-systemhttps://blog.csdn.net/weixin_39871788/article/details/123250595?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167271407416800182169237%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167271407416800182169237&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-2-123250595-null-null.142%5Ev68%5Ewechat_v2,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_control2&utm_term=qemu%20-M%20virt&spm=1018.2226.3001.4187
点击浏览,选中c盘,点击下一步,就会自动安装了
选 中20G的硬盘做为我们的安装盘占击下一步
然后就开始漫长的等待了
安装快成功的样子 ,感觉文字方面微软进步不小
到目前为止已经过去了快3个小时了
最后系统安装成功,但是这个系统是无法上网的,而我要测试的应用要连网,于是又要把网配一下
- 下载 VirtIO ARM64 驱动光盘
点此https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso下载最新的 VirtIO ARM64 驱动光盘,将其改名为 driver.iso 并复制到 Qemu 安装目录内
由于网络驱动程序的签名存在问题,安装系统后,以管理员身份运行命令提示符,运行命令:
bcdedit /set testsigning on
运行后重启系统,再安装 VirtIO 驱动光盘中 \NetKVM\w10\ARM64 文件夹下的网络驱动程序
然后通过下面文章,安个虚拟网卡,在系统中加个网桥,就可以上网了
【UEFI实战】Windows版本QEMU网络配置_jiangwei0512的博客-CSDN博客_qemu windows 网络【UEFI实战】Windows版本QEMU网络配置。https://blog.csdn.net/jiangwei0512/article/details/122791901?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167274199216782428697606%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167274199216782428697606&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-122791901-null-null.142%5Ev68%5Ewechat_v2,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_control2&utm_term=win10%20qemu%20%E7%BD%91%E5%8D%A1%E9%85%8D%E7%BD%AE&spm=1018.2226.3001.4187下面是全部运行的文件
qemu-system-aarch64.exe ^
-M virt ^
-cpu cortex-a72 ^
-smp 4,cores=4,threads=1,sockets=1 ^
-m 4G ^
-pflash QEMU_EFI.img ^
-pflash QEMU_VARS.img ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device usb-storage,drive=drivers ^
-drive if=none,id=drivers,readonly=on,file=drivers.vhdx ^
-device virtio-blk,drive=system ^
-drive if=none,id=system,format=raw,file=win10arm.img ^
-device usb-storage,drive=netdriver ^
-drive if=none,id=netdriver,format=raw,media=cdrom,file=virtio-win-0.1.225.iso ^
-net nic,model=virtio ^
-net tap,ifname=tap0 ^
但是这个x64 win11下安装的arm win10 运行速度之慢做一个循环,在虚拟机外用时1.7秒,在虚拟机内用时51秒,差了30倍,如果在虚拟机中使用x86的版本会更慢要100多秒
// main.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <time.h>
int main(int argc, char const* argv[]) {
clock_t start, end;
start = clock();
printf("begin program\n");
double v = 0;
for (unsigned long i = 0; i < 10000000; i++)
{
v += 2 * sin(i);
}
end = clock();
char infor[256];
sprintf(infor, "result=%0.3lf , time cost %ld \r\n", v, (end - start));
printf("%s", infor);
printf("finished!\n");
getchar();
return 0;
}
用vs2019编译出的exe程序,运行会提示缺少vcruntime140.dll,
第一种:
一般可以配置一下两项:
1.项目 -> 配置属性->常规->MFC的使用 :在静态库中使用MFC。
2.项目 -> 配置属性->C/C++->代码生成->运行库 :选择 多线程调试(/MT)。
编译时,在下拉框中选择的是release,win32
执行编译生成方案之后,在该工程目录下的release文件夹中,找到这个.exe文件,则可以在其它电脑上运行使用。
然后执行arm 版本和win32版本,分别耗时5412ms ,14971ms ,在win10 arm系统中仅支持x86与arm应用,对x64的应用不支持,其中arm的exe比x86的应用快3倍(仅针对本程序)。
程序版本 | 运行耗时(ms) |
arm64 | 5412 |
x86 | 14971 |
然后把程序放在我笔记本(i9 12900h ,32g,2T ssd)外面运行一下
程序版本 | 运行耗时(ms) |
x64 | 95 |
x86 | 102 |
是的没错,在qemu中虚拟出的win10运行效率比外面慢了近50倍,可能有出入但应该是10倍以上的效率损失。
然后再把这个应用放在华为matebook E go
-
Snapdragon® 8cx Gen 3 3.0G
- 16G +512G
- win11 home
上面的程序运行结果
程序版本 | 运行耗时(ms) |
arm64 | 364 |
win32 | 645 |
x64 | 425 |
最后,qemu模拟arm win10的这个效率比arm原生的系统也慢了10多倍,如果有条件还是在原生的arm系统上测试应用吧。
WINDOWS 10 ARM64版本与WINDOWS 10 X86/X64版本之前界面功能没任何差别,只是ARM64版除支持ARM版Windows应用外还能通过模拟器形式支持运行X86-32位应用程序,两个系统版本,前者支援ARM处理器的精简指令集架构,后者支援X86-64处理器的复杂指令集架构。
而win11 arm版本可以兼容运行x86/x64/arm指令的应用,但是涉及到驱动程序必须是arm64的,x64如果应用没有驱动层的可以完全正常运行