在QEMU安装Windows on ARM
本文转载自“GuCATs’ 摸鱼站”,感谢原作者发布!

实验环境

Windows on ARM

关于如何获取Windows on ARM的系统镜像,可以阅读:使用UUP构建Windows镜像

3.1.2022 更新
建议在构建镜像的时候用uup.rg-adguard,那个可以移除安装限制,可以有效避免TPM问题(因为还不会怎么模拟TPM)
或者自己手动修改镜像

QEMU

首先下载最新版QEMU

QEMU的安装位置需要记牢,在安装程序会出现,后面需要用到。

UEFI固件

项目链接

下载文件名开头为edk2.git-aarch64的文件,并用7-Zip等解压缩工具多次解压,直至提取出QEMU_EFI.fdvars-template-pflash.raw这两个文件。

VirtIO ARM64驱动光盘

下载链接

配置环境变量

按下 Windows徽标键+R,输入SystemPropertiesAdvanced并回车
点击“环境变量”。

在“系统变量(S)”里找到名为“Path”的项并双击,点击旁边的“新建(N)”,最后在矩形框中输入QEMU的安装目录。

然后全部点击“确定”即可。

创建硬盘文件

以管理员身份运行cmd,输入以下命令。

qemu-img.exe create -f 硬盘格式 <自定义存放路径\文件名.硬盘格式> <容量大小><单位>

比如我的存放位置为E:\QEMU\ARM,文件名为OS,硬盘格式为qcow2(可选的有还raw、host_device、qcow、cow、vdi、vmdk、vpc、cloop、img),容量大小为60GB(单位有 K、M、G、T、P、E)
那么我的命令如下(需要区分大小写,而且路径和文件名不要有空格,用下划线_代替)

qemu-img.exe create -f qcow2 E:\QEMU\ARM\OS.qcow2 60G

没有别的提示就代表成功了

最后,将QEMU_EFI.fdvars-template-pflash.raw这两个文件一并复制到存放位置。

启动系统

在存放的目录(我的是E:\QEMU\ARM)下新建文本文档,命名为start.cmd,并编辑内容。

<>里的内容(包括引号)是需要自行修改的内容,你可以在最顶端插入chcp 65001,这样cmd内提示的中文报错就不会乱码。
qemu-system-aarch64.exe -M virt,virtualization=true -cpu cortex-<CPU 型号> -smp <CPU 核心数> -m <运行内存大小> ^
-device qemu-xhci -device usb-kbd -device usb-tablet ^
-drive file=<"硬盘文件路径\文件名.qcow2">,if=virtio ^
-nic user,model=virtio ^
-drive file=<"系统镜像路径\文件名.iso">,media=cdrom,if=none,id=cdrom -device usb-storage,drive=cdrom ^
-drive file=<"virtio-win 所在路径\virtio-win 的名称.iso">,media=cdrom,if=none,id=cdrom1 -device usb-storage,drive=cdrom1 ^
-bios QEMU_EFI.fd -device ramfb ^
-drive file=vars-template-pflash.raw,if=pflash,index=1,format=raw

比如我的CPU型号为a76(可选的还有a72,a57和a53,亦或者是其它)
CPU核心数量为4,运行内存大小为4096MiB,硬盘文件、系统镜像和virtio-win镜像命名分别为Image.isoOS.qcow2virtio-win-0.1.225.iso(若start.cmd与前面几个文件在同一目录下就不需要指定目录,直接填写名称即可)

那么我的命令如下(需要区分大小写,而且路径和文件名不要有空格,用下划线_代替,或者在收尾添加英文引号: "

qemu-system-aarch64.exe -M virt,virtualization=true -cpu cortex-a76 -smp 4 -m 4096 ^
-device qemu-xhci -device usb-kbd -device usb-tablet ^
-drive file=OS.qcow2,if=virtio ^
-nic user,model=virtio ^
-drive file=Image.iso,media=cdrom,if=none,id=cdrom -device usb-storage,drive=cdrom ^
-drive file=virtio-win-0.1.225.iso,media=cdrom,if=none,id=cdrom1 -device usb-storage,drive=cdrom1 ^
-bios QEMU_EFI.fd -device ramfb ^
-drive file=vars-template-pflash.raw,if=pflash,index=1,format=raw

保存后双击运行,如果正常会是这样,可以进入到TinaoCore Logo的引导页。

若有如下报错为正常,无需理会第一个是未指定vars-template-pflash.raw的格式(已在文中更新代码,故不会出现该报错),第二个不知道有什么用。(反正不影响.jpg

但或者是这种找不到文件的报错,则需要自己在文件名前加上路径。

安装系统

然后就这样漫长的等待,就会进入到Windows安装程序页。

按下Ctrl+ Alt+G即可将鼠标脱离虚拟机

在选择磁盘的时候,点击“加载驱动程序(L)”。

选择“浏览(B)”。

选择virtio-win光驱。

找到名为“viostor”的文件夹,选择里面“w11”文件夹下的“ARM64”文件夹。(如果安装的是 Windows10则选择w10)

选择驱动程序,然后点击“下一页(N)”,这样就可以正常安装系统了。

最后进入无尽的等待…

x86转译AArch64性能会有所下降(不止一点点,再加上QEMU是软件模拟),所以安装时间会比普通的虚拟机要长不知道多少倍(

记得开启“鼠标经过时捕获”(“Grab On Hover”)或“捕获输入”(“Grab Input”)。

从进入安装程序到准备就绪,花了近一个半小时(没什么意外的话,可能这个要转114514h(悲(而且鉴于无法联网,且硬盘驱动都要自己加载,所以这个过程跳过也没啥问题()


这里不得不说一下CPU默认才1.0GHz属实吝啬,不过不难看出它真的在动了(
有需要的话可以自己搜一下“QEMU配置CPU”

当我把QEMU升级之后之后就被识别出是虚拟机力(无慈悲


按下Shift+F10打开CMD窗口,并输入以下命令

OOBE\MSOOBE

然后就会跳过那漫长的准备就绪阶段。

再等待亿会,就可以进入OOBE了。

由于暂时没有网卡驱动,且Windows 11要求联网才能继续,所以需要跳过联网激活验证。(Windows 10可跳过该步骤)

按下Shift+F10打开CMD窗口,并输入以下命令

OOBE\BypassNRO
(如果这期间OOBE仍要求联网,可以打开CMD窗口,输入explorer并打开,然后再按网卡驱动的方式安装网卡驱动。

等待一会,系统会自动重启,然后就可以继续正常安装了。

可能你会遇到“为什么我的电脑重启了?”这个提示,无需理会,点击“下一步(N)”即可。

接着就可以按照正常方式继续安装了。

一切都开始好起来力)

网卡驱动

以管理员身份启动PowerShell然后在命令框中输入以下命令并重启。

bcdedit /set testsigning on

打开virtio-win光驱,然后定位到\NetKVM\w11\ARM64(如果是Windows 10 就选择w10文件夹)右键类型为“安装信息”的netkvm.inf文件,选择“安装”。

在弹出的UAC窗口中选择“是”,等待一会,提示安装完成,再等一会就有网络了。

这是最后在里面运行Dism++ ARM64的效果。(启动速度和运行效率会比x86转译ARM64快许多)

后话

1. 如果你后面不需要光驱了可以把

-drive file=<"系统镜像路径\文件名.iso">,media=cdrom,if=none,id=cdrom -device usb-storage,drive=cdrom ^
-drive file=<"virtio-win 所在路径\virtio-win 的名称.iso">,media=cdrom,if=none,id=cdrom1 -device usb-storage,drive=cdrom1 ^

这两行代码删除。

2. 因为没有显卡驱动以及其它的驱动,在QEMU模拟运行Windows on ARM性能会大打折扣,整个过程会非常漫长,建议将文件存放在SSD内。

3. 文章内仅模拟了所需的硬件及网卡,其它的硬件需要自行查询。

镜像内其它驱动的大致意思如下:

  • NetKVM/:Virtio网络驱动
  • viostor/:Virtio块驱动
  • vioscsi/:Virtio SCSI驱动
  • viorng/:Virtio RNG驱动
  • vioser/:Virtio串口驱动
  • Balloon/:Virtio内存气球驱动
  • qxl/:用于Windows 7及之前版本的QXL显卡驱动(virtio-win-0.1.103-1和之后版本会创建)
  • qxldod/: 用于Windows 8及之后版本的QXL显卡驱动(virtio-win-0.1.103-2 和之后版本会创建)
  • pvpanic/:QEMU pvpanic设备驱动(virtio-win-0.1.103-2 和之后版本会创建)
  • guest-agent/:QEMU Guest Agent的32位和64位安装包
  • qemupciserial/:QEMU PCI串口设备驱动
  • *.vfd:用于Windows XP下的VFD软驱镜像

4. 如果运行真的很慢,可以看看BetaWiki给出的解决方案。(不一定100%有效)

以管理员身份打开CMD,粘贴以下命令

sc stop "Spooler"
sc config "Spooler" start= disabled
sc stop "WSearch"
sc config "WSearch" start= disabled
REM Disable Automatic Defragmentation
schtasks /Delete /TN "\Microsoft\Windows\Defrag\ScheduledDefrag" /F
REM Disable Pagefile
wmic computersystem set AutomaticManagedPagefile=FALSE
wmic pagefileset delete
REM Disable Hibernation
powercfg -h off

参考文献

  1. 如何在QEMU中安装Windows Client ARM64
  2. Windows virtio 驱动
除特殊声明转载之外,本文由博主 云萧是个咕咕怪 原创,依据 CC BY-NC-SA 4.0 许可协议授权,转载请注明出处。(*◦˙▽˙◦)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇