本文用于记录使用qemu虚拟化aarch64架构的虚拟机。
从https://qemu.weilnetz.de/w64/ 下载最新版的qemu for windows软件并安装,我这里c盘快满了,安装到d:\qemu目录里面

安装完成以后需要手动将d:\qemu加到PATH路径里面去,因为后续我们需要通过命令行去使用qemu的可执行文件。

现在高版本的qemu自带用于arm引导的uefi(bios) 文件,安装完就有,挺方便的。
下面通过命令行创建虚拟机硬盘
qemu-img.exe create -f qcow2 f:\vm\arm64\disk\phytium-arm64.qcow2 80G
创建过程非常快,实际没有立即分配80G空间,只是创建了一个不到200k的文件

还需要手动下载一下下面的文件并把这个文件放到f:\vm\arm64目录里面去
http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd
下面创建虚拟机
@echo off
REM 启动 ARM64 虚拟机安装程序
REM -M virt 表示使用 QEMU 通用 ARM 虚拟主板
REM -cpu cortex-a72 表示模拟 ARMv8 CPU,接近通用 64 位 ARM 服务器环境
REM -smp 4 表示 4 个虚拟 CPU
REM -m 8192 表示 8GB 内存
REM -bios 指定 ARM UEFI 固件
REM -drive if=virtio 使用 virtio 磁盘,提高兼容性和性能
REM -cdrom 挂载 ARM64 Linux 安装镜像
REM -netdev user 使用用户态网络,最容易上手
REM hostfwd 将宿主机 2222 端口转发到虚拟机 22 端口,后面可直接 SSH
qemu-system-aarch64.exe ^
-M virt,accel=tcg ^
-cpu cortex-a72 ^
-smp 4 ^
-m 4096 ^
-bios f:\vm\arm64\QEMU_EFI.fd ^
-display gtk ^
-device qemu-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device virtio-gpu-pci ^
-drive if=none,file=f:\vm\arm64\disk\phytium-arm64.qcow2,format=qcow2,id=hd0 ^
-device virtio-blk-pci,drive=hd0 ^
-drive if=none,file=f:\iso\Kylin-Desktop-V10-Release-Build1-20200710-arm64.iso,media=cdrom,id=cdrom ^
-device virtio-scsi-pci ^
-device scsi-cd,drive=cdrom ^
-device virtio-net-pci,netdev=net0 ^
-netdev user,id=net0,hostfwd=tcp::2222-:22
然后更启动的时候会提示:display output is not active ,耐心等就行,特别特别慢,比vmware虚拟x64的机器要慢特别多,慢到你以为系统启动失败了。
然后如果你需要释放鼠标的话是ctrl+alt+G
在耗时1个小时以后系统安装完成,修改启动命令,去掉iso文件,创建f:\vm\arm64\start_kylin_arm64.bat
@echo off
REM 启动已安装完成的 ARM64 麒麟系统
REM 说明:
REM 1. 不再挂载 ISO,直接从虚拟硬盘启动
REM 2. 保留 GTK 图形界面
REM 3. 保留 SSH 端口转发:宿主机 2222 -> 虚拟机 22
qemu-system-aarch64.exe ^
-M virt,accel=tcg ^
-cpu cortex-a72 ^
-smp 4 ^
-m 4096 ^
-bios f:\vm\arm64\QEMU_EFI.fd ^
-display gtk ^
-device qemu-xhci ^
-device usb-kbd ^
-device usb-mouse ^
-device virtio-gpu-pci ^
-drive if=none,file=f:\vm\arm64\disk\phytium-arm64.qcow2,format=qcow2,id=hd0 ^
-device virtio-blk-pci,drive=hd0 ^
-device virtio-net-pci,netdev=net0 ^
-netdev user,id=net0,hostfwd=tcp::2222-:22
pause
启动的时候还是提示Display output is not active,等着就行了。
然后有个小坑,我这里安装的是银河麒麟系统,选择分区的时候创建了数据分区,结果默认的情况下系统挂载的/data不让执行程序,需要解决一下执行程序报错没有权限问题,在/etc/fstab里面默认对/data分区的挂载配置是:
UUID=2972908b-e84e-43b7-9587-65131e1bf899 /data ext4 rw,user,x-gvfs-show,nosuid,nofail 0 2
问题就出在这个user上面,写了user就默认隐含带着noexec,不让你执行可执行程序,需要改成下面这样才行:
UUID=2972908b-e84e-43b7-9587-65131e1bf899 /data ext4 rw,exec,nosuid,nofail 0 2