基于 Windows 平台利用 QEMU 部署 ARM 架构的虚拟机
https://www.modb.pro/db/1733672145120206848
【全网最简单】Windows下通过QEMU使X86模拟ARM64教程
https://www.bilibili.com/read/cv15057604/
平常以开发桌面版的应用程序居多,经常需要涉及到跨平台的测试,ARM 架构的平台测试是无法绕过去的。
随着信创产业发展持续深化,采用ARM、LoongArch64等架构的设备逐步增多,各种架构的设备入手一台也不现实,要么租一台云设备,要么就模拟一台ARM虚拟机。
各种查资料,了解到了可以通过 QEMU 来进行模拟一个 ARM 环境,方便地测试和验证应用程序在不同平台上的运行情况,确保它们在不同硬件上都能够顺利工作。
这样通过 QEMU 搭建 ARM 虚拟机环境,无需实际设备,就可以进行跨平台开发、调试和测试,提高开发效率。
部署所用资源
部署主机: i7/64G/4TB
操作系统: Windows 10 专业版 64位
麒麟桌面操作系统ARM版: Kylin-Desktop-V10-SP1-General-Release-2303-ARM64.iso
存储目录: D:\OS\Kylin\ARM
QEMU 软件: qemu-w64-setup-20231126.exe(V8.1.91)
EFI文件: QEMU_EFI
虚拟网卡软件: tap-windows-9.24.7-I601-Win10.exe
ARM虚拟机拟安装目录: D:\qemu\kylinv10
连接工具: MobaXterm V22.1
部署步骤
安装 QEMU
QEMU 下载
QEMU下载地址
arm0001.png
QEMU 安装
双击运行文件“qemu-w64-setup-20231126.exe”,正常安装应用程序即可;
安装过程中记住软件的安装路径;
配置部署主机环境变量
右击“此电脑”——“属性”,在弹出的系统窗口中点击“高级系统设置”;
在系统属性窗口中,点击“环境变量”按钮;
设置Path环境变量
arm0010.png
arm0011.png
查看 QEMU 版本, 在cmd窗口中输入命令
qemu-system-aarch64 -version
安装虚拟网卡
双击运行文件“tap-windows-9.24.7-I601-Win10.exe”,进行虚拟网卡的安装;
安装完成后,网络连接里会出现一个“TAP-Winodws-Adapter V9”的本地连接网卡;
arm0019.png
将网卡的名称修改为tap0;
共享物理网卡
右击物理网卡——属性;
切换到“共享”标签页;
勾选“允许其它网络通过此计算机的Internet连接来连接”;
“家庭网络连接”项选择新增加的网卡:tap0;
勾选“允许其它网络用户控制或禁用共享的 Internet 连接”;
点击“确定”按钮;
创建虚拟机
创建虚拟磁盘镜像
在拟创建目录的地址栏输入 cmd ,打开 cmd 窗口;
在 cmd 窗口中输入
qemu-img create -f qcow2 D:\qemu\kylinv10\Kylin-Desktop-10-SP1-ARM64.img 200G
qcow2 是一种支持快照和压缩等高级特性的虚拟磁盘格式,通常用于虚拟机的存储。
EFI文件拷贝到镜像目录中(D:\qemu\kylinv10)
使用 qemu-system-aarch64 命令安装麒麟操作系统
qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 4,cores=4,threads=1,sockets=1 -M virt -bios D:\qemu\kylinv10\QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=D:\OS\Kylin\ARM\Kylin-Desktop-V10-SP1-General-Release-2303-ARM64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=D:\qemu\kylinv10\Kylin-Desktop-10-SP1-ARM64.img,id=hd0 -device virtio-blk-device,drive=hd0
# -m 8192 表示分配给虚拟机的内存最大8192MB,可以直接使用 -m 8G
# -cpu cortex-a72 指定CPU类型,还可以选择cortex-a53、cortex-a57等
# -smp 4,cores=4,threads=1,sockets=1 指定虚拟机最大使用的CPU核心数等
# -M virt 指定虚拟机类型为virt,具体支持的类型可以使用 qemu-system-aarch64 -M help 查看
# -bios D:\qemu\kylinv10\QEMU_EFI.fd 指定UEFI固件文件
# -net tap,ifname=tap0 启用网络功能(ifname=tap0中的tap0,修改为前面步骤中自己修改后的网卡名称)
# -device nec-usb-xhci -device usb-kbd -device usb-mouse 启用USB鼠标等设备
# -device VGA 启用VGA视图,对于图形化的Linux这条很重要!
# -drive if=none,file=D:\OS\Kylin\ARM\Kylin-Desktop-V10-SP1-General-Release-2303-ARM64.iso,id=cdrom,media=cdrom 指定光驱使用镜像文件
# -device virtio-scsi-device -device scsi-cd,drive=cdrom 指定光驱硬件类型
# -drive if=none,file=D:\qemu\kylinv10\\Kylin-Desktop-10-SP1-ARM64.img 指定硬盘镜像文件
不要关掉 CMD 窗口!!!
不要关掉 CMD 窗口!!!
不要关掉 CMD 窗口!!!
选择“Install Kylin-Desktop V10-SP1”,回车;
借此回忆一波安装麒麟桌面版操作系统的过程
安装过程主打一个字:慢,要有耐心,有耐心,有耐心!!!
安装过程主打一个字:慢,要有耐心,有耐心,有耐心!!!
安装过程主打一个字:慢,要有耐心,有耐心,有耐心!!!
安装完成后,再次启动虚拟机
无需再次指定iso文件启动
qemu-system-aarch64 -m 8192 -cpu cortex-a72 -smp 4,cores=4,threads=1,sockets=1 -M virt -bios D:\qemu\kylinv10\QEMU_EFI.fd -net nic -net tap,ifname=tap0 -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=D:\qemu\kylinv10\Kylin-Desktop-10-SP1-ARM64.img,id=hd0 -device virtio-blk-device,drive=hd0
adigoldsteinEUsVwEOsblEunsplash.jpg
问题
重启 QEMU 虚拟机后,可能会出现无法连接外网
此问题是 Windows 网络共享的问题,在宿主机种右键物理网卡,点击“属性”按钮,在弹出的界面中选择“共享”选项,先取消共享,点击确定后,再次选择共享即可。
系统启动后,ssh没有安装
安装 ssh 的过程
sudo apt-get install openssh-server
E:dpkg 被中断,您必须手工运行’sudo dpkg –configure -a’ 解决此问题。
arm0046.png
sudo dpkg –configure -a
arm0047.png
再次运行
sudo apt-get install openssh-server
MobaXterm 连接 ssh
结语
640.png
QEMU 是一个强大的工具,可以模拟多种硬件架构,包括 ARM。通过 QEMU,你可以在自己的开发环境中建立一个 ARM 虚拟机,进行跨平台开发、调试和测试,而不用依赖实际的硬件设备。
跨平台开发和测试: 使用 QEMU 创建 ARM 架构平台可以让软件开发者更方便地进行跨平台开发和测试。ARM 架构广泛应用于嵌入式系统、移动设备等领域,通过在 QEMU 中模拟 ARM 环境,开发者可以在自己的开发环境中轻松测试和验证应用在 ARM 平台上的运行情况,节省了实际硬件的需求和实施的复杂性。
底层调试和研究: QEMU 提供了强大的模拟功能,可以模拟 ARM 指令集和寄存器架构等底层细节,这对于软件开发者来说是一个非常有价值的工具。通过在 QEMU 中创建 ARM 架构平台,开发者可以更深入地了解 ARM 架构的工作原理,进行底层调试和研究,对于理解嵌入式系统和底层编程有很大的帮助。
提高开发效率: 使用 QEMU 创建 ARM 架构平台可以大大提高开发效率。开发者无需购买实际的ARM硬件设备,也不需要实际部署和调试大量的设备,节省了时间和资源。此外,QEMU 的快速启动和快速模拟能力使得开发者可以迅速进行软件的测试和调试,加快了开发迭代的速度。
总体而言, 选择使用 QEMU 创建 ARM 架构平台的软件开发者可以享受跨平台开发和测试的便利性,深入研究和调试 ARM 架构的底层细节,并提高开发效率。QEMU 为软件开发者提供了一个强大而灵活的工具,使我们能够更好地应对ARM平台上的开发挑战。