Windows安装Arm版Ubuntu虚拟机(59)_windows安装arm虚拟机
1. 前言
我们使用的电脑一般都是 x64 架构的 CPU 及系统,如果需要使用 Arm 架构的操作系统,我们无法使用主流的虚拟机软件(vmware workstation 等) 进行安装,因为此类软件只能安装和宿主机 CPU 相同架构的系统。不过,我们可以使用 qemu 进行模拟运行。
本文介绍了如何在 x64 Windows 10 系统中安装并使用 qemu 安装 Arm 架构的 Ubuntu 2204 LTS 系统,以便在 Windows 上可以使用 Arm 架构的 Linux 进行开发、调试、安全测试等操作。
2. 安装
2.1. Windows 10 安装 qemu
我们使用的是 QEMU,QEMU 可以模拟很多不同指令集的 CPU,目前包括有 ARM、LoongArch、MIPS、RISCV 和 x86_64 等,我们可以到官网下载最新版:qemu.org。这里以 qemu-w64-setup-20240423. exe 为例。
直接运行下载得到的 qemu-w64-setup-20240423.exe 进行默认安装即可:
为了方便,可以把安装路径配置到环境变量中去,这样到时候使用虚拟机的命令就可以方便一点,不需要指定全路径:
此时打开 cmd,输入 qemu-system-aarch64,有内容说明 qemu 安装成功:
3、安装 tap 网卡
qemu 里的系统若要连接互联网,需要通过 tap 网卡进行通信。最简单的办法是借用 openvpn 的 tap 网卡驱动。下载并安装 OpenVPN。
将上述的网卡改名为 tap0,方便后续操作:
把联网的真实网卡共享给 tap0:
2.2. 下载 Ubuntu 2204 LTS Arm
下载 Ubuntu 2204 LTS Arm 的安装包,下载地址:64-bit ARM (ARMv8/AArch64) server install image。
2.3. 下载 QEMU EFI
统一可扩展固件接口(英语:Unified Extensible Firmware Interface,缩写 UEFI)是一种个人电脑系统规格,用来定义操作系统与系统固件之间的软件界面,作为 BIOS(基本输入/输出系统)的替代方案。可扩展固件接口负责加电自检(POST)、联系操作系统以及提供连接操作系统与硬件的接口。我们的 ARM 虚拟机需要用到这个,下载地址:QEMU_EFI. fd。
2.4. 创建空白磁盘
把下载的 QEMU_EFI 固件和系统安装包放到一个目录下:
打开 cmd,切换到 C:\\Ubuntu2204Arm
目录中,运行以下命令创建空白磁盘:
qemu-img create ubuntu_2204_arm.img 100G
2.5. 安装系统
cmd 输入以下命令安装虚拟机:
qemu-system-aarch64.exe -m 4096 -cpu cortex-a76 -smp 8,sockets=1,cores=4,threads=2 -M virt -bios ./QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device VGA -drive if=none,file=./ubuntu-22.04.5-live-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=./ubuntu_2204_arm.img,id=hd0 -device virtio-blk-device,drive=hd0 -device nec-usb-xhci -device usb-ehci -device usb-kbd -device usb-mouse -accel tcg,thread=multi
此时会弹出 qemu 窗口,但默认输出是在 VGA 窗口,此窗口只有告警信息:
需要我们进入视图页手动选择为 serial0:
此时可以看到 ubuntu 安装选项,接下里正常安装 Ubuntu 就可以了。安装过程较慢,需要 30min 左右。
2.6. 修改分辨率
qemu 的分辨率默认为 800x400,并且无法像 vmware 一样自适应物理机,只能修改 grub 配置项指定。
sudo vim /etc/default/grub----------------------------GRUB_GFXMODE=1920x1080(或1600x900)----------------------------sudo update-grubsudo reboot
2.7. 后续启动
后续如果想要重新启动 qemu,不需要再重新安装 ubuntu,用以下命令启动即可。
qemu-system-aarch64.exe -m 4096 -cpu cortex-a76 -smp 8,sockets=1,cores=4,threads=2 -M virt -bios ./QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device VGA -drive if=none,file=,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=./ubuntu_2204_arm.img,id=hd0 -device virtio-blk-device,drive=hd0 -device nec-usb-xhci -device usb-ehci -device usb-kbd -device usb-mouse -accel tcg,thread=multi
2.8. 特别说明
QEMU 模拟器界面是无法识别数字小键盘的,如果你的登录密码是数字,而在这个界面你用数字小键盘输入密码,则会一直提示密码不对!需要用英文字母上边那一排数字键输入数字。
2.9. 使用 HAXM 进行加速
之前貌似是使用 kqemu 在 Window 上进行加速的,但是目前 kqemu 不再进行更新,且 64 位支持也是 debug 版本。
稍微介绍一下我看到的,Linux 使用的是 KVM 进行加速,这个是 Linux 自带的,可以达到几乎是原生的效果,但是 Window 上就无法使用。
那么像 VM 这个的虚拟机是怎么运行流畅的呢?
答案是使用了 CPU 的虚拟拓展,这里 Intel 与 Amd 的虚拟拓展是各玩各的。
Intel 用的就是 HAXM,这个在 qemu 有支持,而且 Intel 稍微新一点的都支持了这个,有的可能比较多。
1、HAXM 能否使用的检测。
.\\checktool. exe --verbose
附件:checktool-windows-1.0.0. zip
结果如下(根据实际情况):
CPU vendor * GenuineIntelIntel64 supported * YesVMX supported * YesVMX enabled * YesEPT supported * YesNX supported * YesNX enabled * YesHyper-V disabled * YesOS version * Windows 6.1.7601OS architecture * x86_64Guest unoccupied * Yes. 0 guest (s)
里面的选项没有弄太明白,只知道 Hyper-V 是 Window 自己的虚拟化机制,如果开启的话会占用掉 CPU 的虚拟拓展。
2、安装 HAXM。
下载安装包:HAXM
HAXM 的安装十分简单,只需要默认打开 exe 点点点。
3、使用加速功能。
安装结束之后就可以使用了:
qemu-system-aarch64.exe -m 4096 -cpu cortex-a76 -smp 8,sockets=1,cores=4,threads=2 -M virt -bios ./QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device VGA -drive if=none,file=,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=./ubuntu_2204_arm.img,id=hd0 -device virtio-blk-device,drive=hd0 -device nec-usb-xhci -device usb-ehci -device usb-kbd -device usb-mouse -accel hax
本质只是将:
-accel tcg,thread=multi
改为了:
-accel hax
这里本来想使用 thread=multi,但是发现没有任何反应。
3. 总结
通过上面的步骤,可以搭建出一个方便使用的 qemu + Arm 开发环境。相比 vmware 等商业软件,qemu 还有一些不足,例如物理机的性能利用率低、外设支持少、不能复制粘贴等,与真机有较大差别,故本教程适用于简单的跨平台开发,或学习研究等场合。