没有arm64板子的临时解决办法。

其实手头上是有个四核A53的树莓派3B的,但raspbian只有32位版且另有他用不方便换系统。而其他的板子SoC都是32位的(全志A20,H8,BCM2835,BCM2836等),只好先用模拟器装arm64版的ubuntu16.04对付一下。

安装QEMU

1
sudo apt install -y qemu qemu-utils cloud-utils

下载镜像和UEFI固件

1
2
wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-arm64-uefi1.img
wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd

配置虚拟机

复制本机rsa公钥。

1
cat ~/.ssh/id_rsa.pub

创建并编辑配置文件。

1
vi cloud.txt

填入以下内容:

1
2
3
4
5
6
7
8
#cloud-config
users:
- name: yourname
ssh-authorized-keys:
- ssh-rsa AAAAB...
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash

其中name为用户名,ssh-rsa为刚才复制的公钥,设置该用户使用sudo时无需输入密码。

备份原始镜像(可选)

1
cp ubuntu-16.04-server-cloudimg-arm64-uefi1.img ubuntu-16.04-server-cloudimg-arm64-uefi1.img.orig

启动虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
qemu-system-aarch64 \
-smp 2 \
-m 2048 \
-M virt \
-cpu cortex-a57 \
-bios QEMU_EFI.fd \
-nographic \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file=ubuntu-16.04-server-cloudimg-arm64-uefi1.img \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=user0 \
-netdev user,id=user0 \
-redir tcp:2222::22

参数解释

  • -smp 2 - 双核
  • -m 2048 - 2G内存
  • -M virt - 模拟通用QEMU ARM机器
  • -cpu cortex-a57 - 模拟的CPU型号,这里选择最常见的A57,其他型号可通过qemu-system-aarch64 -M virt -cpu help查询
  • -bios QEMU_EFI.fd - BIOS固件
  • -nographic - 无显示,故启动时的警告和花屏不用管,用ssh
  • -device virtio-blk-device,drive=image - 创建名为”image”的虚拟块设备
  • -drive if=none,id=image,file=ubuntu-16.04-server-cloudimg-arm64-uefi1.img - 用刚才的”image”设备和cloudimg镜像创建驱动器
  • -device virtio-blk-device,drive=cloud - 创建名为”cloud”的虚拟块设备
  • -drive if=none,id=cloud,file=cloud.img - 用刚才的”cloud”设备和配置好的cloud.img镜像创建驱动器
  • -device virtio-net-device,netdev=user0 - 创建名为”user0”的虚拟网络设备
  • -netdev user,id=user0 - 创建名为”user0”的用户模式网络栈
  • -redir tcp:2222::22 - 将虚拟机的22端口映射到本机的2222端口
    注:第一次启动时间会长一些。

ssh连接虚拟机

1
ssh -p 2222 yourname@localhost

debug

error: no such device: root

其实不按键盘也能正常启动,是ubuntu镜像的bug,可通过sudo update-grub解决。

perl: warning: Please check that your locale settings

1
sudo nano /etc/default/locale

添加以下内容:

1
2
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8

unable to resolve host ubuntu

1
sudo nano /etc/hosts

在localhost后面添加ubuntu。

1
127.0.0.1 localhost ubuntu

扩展虚拟机磁盘空间

默认镜像的2G比较小,在host用qemu-img加多10G。

1
qemu-img resize ubuntu-16.04-server-cloudimg-arm64-uefi1.img +10G

参考资料

How to Run Ubuntu 16.04 Aarch64 (64-bit ARM) Cloud Images on Your Intel/AMD Linux Computer with QEMU
qemu-system-aarch64 -h