为QEMU创建基于UEFI的AARCH64虚拟机

QEMU默认将会采用seabios的启动方式,本文将介绍如何以UEFI模式启动

1. 下载所需要的安装文件

wget http://cdimage.debian.org/debian-cd/8.1.0/arm64/iso-cd/debian-8.1.0-arm64-netinst.iso

2. 创建UEFI固件文件

$ dd if=/dev/zero of=flash0.img bs=1M count=64
$ LINARO_EDK2_URL=http://releases.linaro.org/15.01/components/kernel/uefi-linaro/
$ wget $LINARO_EDK2_URL/release/qemu64-intelbds/QEMU_EFI.fd
$ dd if=QEMU_EFI.fd of=flash0.img conv=notrunc
$ dd if=/dev/zero of=flash1.img bs=1M count=64
$ dd if=/dev/zero of=hda.img bs=1M count=8192

3. 创建块设备

dd if=/dev/zero of=hda.img bs=1M count=8192

4. QEMU 命令行设置,我在这里实现了一个脚本文件install.sh :

#!/bin/sh

CDROM_IMG=debian-8.1.0-arm64-CD-1.iso
HDA_IMG=hda.img

make_cdrom_arg()
{
  echo "-drive file=$1,id=cdrom,if=none,media=cdrom" \
    "-device virtio-scsi-device -device scsi-cd,drive=cdrom"
}

make_hda_arg()
{
  echo "-drive if=none,file=$1,id=hd0" \
    "-device virtio-blk-device,drive=hd0"
}

HDA_ARGS=`make_hda_arg $HDA_IMG`
if [ $# -eq 1 ]; then
  case $1 in
    install)
      CDROM_ARGS=`make_cdrom_arg $CDROM_IMG`
      ;;
    *)
      CDROM_ARGS=""
      ;;
  esac
fi

qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic \
  -pflash flash0.img \
  $CDROM_ARGS \
  $HDA_ARGS \
  -netdev user,id=eth0 \
  -device virtio-net-device,netdev=eth0 

4. 更改文件执行权限 并执行:

chmod +x ./install.sh

./install.sh

 

到此,你就实现了一个UEFI启动的AARCH64虚拟机.

Enjoy, and have a lot of fun!

<think>嗯,用户在使用qemu-system-aarch64命令创建虚拟机时遇到没有反应的问题。首先,我得考虑可能的原因。常见的问题可能有架构不匹配,比如用户可能没有启用KVM加速,或者镜像文件有问题,比如路径错误或格式不支持。还有可能是缺少必要的固件文件,比如EFI固件。此外,用户权限不足,没有访问/dev/kvm设备,或者CPU不支持虚拟化,这些也是潜在的原因。 接下来,我需要一步步引导用户检查这些问题。第一步应该检查KVM是否启用,因为如果没有KVM加速,QEMU会非常慢,甚至看起来没有反应。建议用户运行kvm-ok命令,并检查/dev/kvm是否存在,以及是否有权限访问。如果权限不足,可能需要将用户加入kvm组,或者用sudo运行。 然后,确认镜像和固件是否正确。用户需要检查-aarch64的镜像是否存在,路径是否正确,特别是UEFI固件如edk2-aarch64-code.fd是否安装。不同发行版的包名可能不同,比如在Ubuntu上是qemu-efi,而在Arch可能是edk2-armvirt。 接下来,检查命令行参数是否正确。用户可能漏掉了关键参数,比如-machine和-cpu的设置。需要确认使用的是支持的类型,比如-machine virt,gic-version=3和-cpu cortex-a57。同时,确保内存设置合理,比如-m 4096分配足够的内存。 用户权限也是一个重要点,特别是访问/dev/kvm设备。需要确认用户是否有权限,或者是否在使用sudo。此外,检查CPU是否支持虚拟化,可以通过查看/proc/cpuinfo中的flags是否有vmx或svm(虽然AArch64可能不同,但检查虚拟化支持仍然重要)。 如果以上步骤都没问题,可以尝试增加调试参数,比如-D日志文件,或者-monitor stdio来进入QEMU监视器,查看是否有报错信息。另外,建议用户尝试最小化启动命令,排除其他参数的影响,逐步添加选项定位问题。 最后,可能需要考虑其他因素,比如终端输出是否被重定向导致看起来没反应,或者是否需要添加显示设备参数如-vga virtio。如果用户使用的是旧版本QEMU,升级到最新版本也可能解决问题。如果所有步骤都失败,建议提供具体的命令行和日志以便进一步分析。</think>检查QEMU虚拟机卡住问题可按照以下步骤排查: 一、基础环境检查 1. 确认CPU架构匹配 - 执行 `uname -m` 验证宿主机架构 - 若宿主机是x86_64架构,必须添加`-enable-kvm`参数: ```bash qemu-system-aarch64 -enable-kvm -machine virt -cpu host ... ``` 2. KVM加速检测 - 运行检测命令: ```bash sudo kvm-ok | grep 'KVM acceleration' ``` - 检查/dev/kvm权限: ```bash ls -l /dev/kvm && groups | grep kvm ``` 二、固件与镜像验证 1. UEFI固件检查 - Ubuntu/Debian: ```bash dpkg -L qemu-efi | grep aarch64 ``` - RHEL/CentOS: ```bash rpm -ql edk2-aarch64 ``` 2. 镜像有效性验证 - 执行QEMU镜像检测: ```bash qemu-img check your-disk-image.qcow2 ``` 三、调试启动流程 1. 最小化启动命令示例: ```bash qemu-system-aarch64 \ -M virt \ -cpu cortex-a57 \ -m 4096 \ -bios /usr/share/edk2/aarch64/QEMU_EFI.fd \ -drive file=ubuntu-22.04-server-cloudimg-arm64.img,if=none,id=drive0 \ -device virtio-blk-device,drive=drive0 \ -nographic \ -serial mon:stdio ``` 2. 关键调试参数: ```bash -d int,cpu_reset -D qemu_debug.log # 记录详细日志 -monitor telnet:localhost:4444,server,nowait # 启用远程监控 ``` 四、常见问题解决方案 1. 图形界面卡住时: ```bash -device virtio-gpu-pci \ -display gtk,gl=on ``` 2. 网络设备异常时: ```bash -netdev user,id=net0 \ -device virtio-net-device,netdev=net0 ``` 五、性能优化建议 1. 启用多核CPU: ```bash -smp 4,cores=2,threads=2,sockets=1 ``` 2. 使用virtio设备: ```bash -drive file=disk.img,if=virtio,cache=writeback ``` 排查完毕后,可通过以下命令测试基础功能: ```bash qemu-system-aarch64 -machine virt -cpu cortex-a57 -smp 4 -m 4096 \ -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ -drive if=pflash,format=raw,file=/usr/share/qemu-efi-aarch64/QEMU_VARS.fd \ -nographic -device virtio-rng-pci ``` 建议通过`dmesg | grep -i kvm`查看内核日志,确认KVM模块加载情况。若问题仍未解决,可提供完整的启动命令和日志文件进行深度分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

认真的柯南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值