文章

Ubuntu x86系统中通过QEMU安装Ubuntu ARM系统

Ubuntu x86系统中通过QEMU安装Ubuntu ARM系统

环境准备

1、安装QEMU及相关工具

在Ubuntu x86虚拟机中执行以下命令安装QEMU和ARM架构支持包:

1
2
sudo apt update
sudo apt install qemu qemu-system-arm qemu-efi qemu-user-static

需要确保包含qemu-system-arm(模拟ARM系统)和qemu-efi(支持UEFI启动)

2、下载ARM版Ubuntu镜像

官网获取ARM架构的Ubuntu镜像,或通过以下命令下载:

1
wget https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04-live-server-arm64.iso

3、准备UEFI固件文件

QEMU需要加载UEFI固件以启动ARM虚拟机,下载地址:

1
wget https://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd

创建虚拟磁盘

生成初始img文件

使用 qemu-img 创建动态分配的 QCOW2 格式镜像(支持动态分配空间)

1
2
3
4
qemu-img create -f qcow2 ubuntu.img 20G

# 查看镜像信息
qemu-img info ubuntu.img

启动QEMU安装ARM系统

​启动安装命令 执行以下命令启动QEMU虚拟机,加载ISO镜像并开始安装:

1
2
3
4
5
6
7
qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 \
  -M virt -bios QEMU_EFI.fd \
  -drive file=ubuntu-24.04-live-server-arm64.iso,media=cdrom,format=raw \
  -drive file=ubuntu.img,format=qcow2,if=virtio \
  -device virtio-scsi-device \
  -netdev user,id=net0 -device virtio-net-device,netdev=net0 \
  -nographic

​参数说明:

  • -M virt:模拟ARM的“virt”通用平台,适用于 AArch64 架构。
  • -bios:BIOS文件,指定ARM64 UEFI 固件路径
  • -cpu cortex-a57:指定ARM处理器类型。
  • -netdev user:配置用户模式网络(支持虚拟机联网)
  • -device virtio-scsi-device:确保磁盘设备可被 UEFI 识别
  • -nographic:文本模式安装(若需图形界面则替换为 -vnc :1)
  • -m 4096:分配 4096 MB 内存给虚拟机。
  • -smp 4:核心数4个。

注意:​必须创建 EFI 系统分区​(类型 EF00,建议 512MB),文件系统推荐使用 ext4 格式,引导安装位置/dev/vda(对应 virtio 设备)。

根据安装向导完成Ubuntu ARM系统的安装,过程与物理机安装一致。安装完成后,移除-cdrom参数并重新启动即可进入已安装的系统。

1
2
3
4
5
6
7
qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 \
  -M virt -bios QEMU_EFI.fd \
  -drive file=ubuntu.img,format=qcow2,if=virtio \
  -device virtio-scsi-device \
  -netdev user,id=net0,hostfwd=tcp::2222-:22 \
  -device virtio-net-device,netdev=net0 \
  -nographic

常见问题解决

​启动时卡在 UEFI Shell

这是因为未检测到有效引导分区,在 UEFI Shell 中手动引导:

1
2
fs0:           # 进入第一个文件系统
\EFI\ubuntu\grubaa64.efi  # 执行引导文件

重新安装 GRUB:进入 Live 环境挂载镜像后执行

1
2
3
4
chroot /mnt
grub-install --target=arm64-efi --efi-directory=/boot/efi
update-grub
```[3](@ref)

网络无法连接

检查 -netdev user 参数是否正确映射端口 在虚拟机内执行 dhclient eth0 手动获取 IP


本文参考

QEMU创建arm64的ubuntu22.04虚拟机

本文由作者按照 CC BY 4.0 进行授权