本文将介绍如何使用 QEMU 启动 aarch64 架构的 Ubuntu 操作系统以及宿主机上相关配置的操作方法。
安装 QEMU 安装启动 aarch64 ubuntu 所需的依赖程序:
1 2 3 4 sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager qemu sudo apt install qemu-system-aarch64 sudo apt install qemu-efi-aarch64 sudo apt install qemu-utils
创建镜像 1 2 3 4 5 6 7 8 9 10 dd if =/dev/zero of=flash1.img bs=1M count=64dd if =/dev/zero of=flash0.img bs=1M count=64dd if =/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=flash0.img conv=notruncwget http://ports.ubuntu.com/ubuntu-ports/dists/xenial-updates/main/installer-arm64/current/images/netboot/mini.iso qemu-img create ubuntu-image.img 20G
安装系统 1 2 3 4 5 6 qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 \ -netdev user,id =vnet,hostfwd=:127.0.0.1:0-:22 -device virtio-net-pci,netdev=vnet \ -drive file=ubuntu-image.img,if =none,id =drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 \ -drive file=mini.iso,if =none,id =drive1,cache=writeback -device virtio-blk,drive=drive1,bootindex=1 \ -drive file=flash0.img,format=raw,if =pflash -drive file=flash1.img,format=raw,if =pflash
启动镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 网络架构: +-----------------------------------------------------------------+ | Host | | +---------------------+ | | | | | | | br0: | | | | 192.168.199.32/24 +-----+ | | | | | | | +----+----------------+ | +-------------------------+ | | | | | Guest | | | | | | +---------------------+ | | | +----+----------------+ +--+---+ | | | | | | | | | | | | eth0: | | | | | enp3s0: | | tap0 | | | 192.168.199.33/24 | | | | | 192.168.199.30/24 | | +-----+ | | | | | | | | | +---------------------+ | | | +---------------------+ +------+ +-------------------------+ | +-----------------------------------------------------------------+ sudo ip link add name br0 type bridge sudo ip link set dev br0 down sudo ip addr flush dev br0 sudo ip addr add 192.168.199.32/24 dev br0 sudo ip link set dev br0 up sudo ip tuntap add name tap0 mode tap sudo ip link set dev tap0 up sudo ip link set enp3s0 master br0 sudo ip link set tap0 master br0 sudo qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 1G -cpu max -smp 4 \ -netdev tap,id =mynet0,ifname=tap0,script=no,downscript=no \ -device virtio-net-pci,netdev=mynet0,mac=$(qemu-mac-hasher.py ubuntu1604-arm64) \ -drive file=ubuntu-image.img,if =none,id =drive0,cache=writeback \ -device virtio-blk,drive=drive0,bootindex=0 \ -drive file=flash0.img,format=raw,if =pflash -drive file=flash1.img,format=raw,if =pflash \ -device virtio-rng-pci import sys import zlib crc = str(hex(zlib.crc32(sys.argv[1].encode("utf-8" ))))[-8:] print ("52:54:%s%s:%s%s:%s%s:%s%s" % tuple(crc))
网络优化 以上步骤完成后虚拟机可与宿主机所在网络的其他设备互连(包括宿主机),也可以通过指定的网关连接互联网,但是此时宿主机无法连接互联网,解决方法如下:
删除 enp3s0 接口的默认网关, 为 br0 添加默认网关:
1 2 sudo ip route del default dev enp3s0 sudo ip route add default via 192.168.199.1 dev br0