通过QEMU在x86计算机上搭建arm64版ubuntu开发环境
没有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 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连接虚拟机
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
在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