Say what you do and do what you say

0%

x86_64上安装aarch64架构的centos发行版

host上编译安装qemu

1
2
3
./configure --target-list=aarch64-softmmu
make
make install

在编译qemu需要安装glibc和glib2的等开发包,请安装相应的开发包。

下载 UEFI firmware

我们需要支持aarch64的UEFI固件,上面的rpm在x86_64上无法直接安装,可以通过下面的命令获取UEFI固件。

  • 解压uefi固件
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
$ rpm2cpio edk2-aarch64-20190308git89910a39dcfd-6.el8.noarch.rpm | cpio -div 
$ tree usr
usr
└── share
├── AAVMF
│   ├── AAVMF_CODE.fd -> ../edk2/aarch64/QEMU_EFI-silent-pflash.raw
│   ├── AAVMF_CODE.verbose.fd -> ../edk2/aarch64/QEMU_EFI-pflash.raw
│   └── AAVMF_VARS.fd -> ../edk2/aarch64/vars-template-pflash.raw
├── edk2
│   └── aarch64
│   ├── QEMU_EFI.fd
│   ├── QEMU_EFI-pflash.raw
│   ├── QEMU_EFI.silent.fd
│   ├── QEMU_EFI-silent-pflash.raw
│   ├── QEMU_VARS.fd
│   └── vars-template-pflash.raw
├── licenses
│   └── edk2-aarch64
│   ├── License.edk2.txt
│   ├── LICENSE.openssl
│   └── License.txt
└── qemu
└── firmware
├── 60-edk2-aarch64.json
└── 70-edk2-aarch64-verbose.json

8 directories, 14 files

使用上面解压出来的UEFI固件:QEMU_EFI.fd

运行虚拟机 安装centos发行版

1
qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=CentOS-7-aarch64-Everything-1908.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=centos-aarch64.img,id=hd0 -device virtio-blk-device,drive=hd0
  • 上面的命令没有给VM配置网络接口,仅仅用来安装操作系统!!
  • centos的安装完全是基于命令行界面的,按照提示安装就可以了

配置网络

网络参照这个文档,配置tap接口给aarch64虚拟机使用。

  • 配置接口
    如果由brctl命令则使用brctl命令。

    1
    2
    3
    4
    5
    brctl addbr br0
    ifconfig br0 up
    tunctl -t tap0 -u root # 创建一个 tap0 接口,只允许 root 用户访问
    brctl addif br0 tap0 # 在虚拟网桥中增加一个 tap0 接口
    ifconfig tap0 0.0.0.0 promisc up # 启用 tap0 接口

    如果没有brctl命令,可以使用ip命令代替。

    1
    2
    3
    4
    5
    ip tuntap add tap0 mode tap
    ip link set dev tap0 up
    ip link add br0 type bridge
    ip link set tap0 master br0
    ip link set eth0 master br0
  • VM使用网络接口

    1
    -net nic -net tap,ifname=tap0,script=no,downscript=no

    使用上面的参数让qemu使用tap接口作为vm的网络接口。
    完整的命令如下:

    1
    qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=centos-aarch64.img,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=CentOS-7-aarch64-Everything-1908.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -net nic -net tap,ifname=tap0,script=no,downscript=no

-boot c参数指定硬盘启动无效,原因不明,规避方法是启动中按esc进入UEFI的bootmgr选择硬盘启动。

配置ssh访问

登录aarch64 centos后,设置网络接口。这里VM使用的tap接口时桥接到外部网络的,配置地址后就可以访问。

总结

安装aarch64的centos后,登录发现虚拟机效率很低。

1
2
3
4
5
6
7
8
9
$ cat /proc/cpuinfo
processor : 0
BogoMIPS : 125.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 0

这里可见模拟cpu的BogoMIPS为125,即每秒125M指令,实际CPU的主频在250M左右。
host上cpu主频在2.2G,执行效率仅为10%,有着90%的性能损失。

参考

  1. Running VMs on Fedora/AArch64

  2. x86 平台安装arm虚拟机