通过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 | wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-arm64-uefi1.img |
配置虚拟机
复制本机rsa公钥。
1 | cat ~/.ssh/id_rsa.pub |
创建并编辑配置文件。
1 | vi cloud.txt |
填入以下内容:
1 | #cloud-config |
其中name为用户名,ssh-rsa为刚才复制的公钥,设置该用户使用sudo时无需输入密码。
备份原始镜像(可选)
1 | cp ubuntu-16.04-server-cloudimg-arm64-uefi1.img ubuntu-16.04-server-cloudimg-arm64-uefi1.img.orig |
启动虚拟机
1 | qemu-system-aarch64 \ |
参数解释
-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 | LANGUAGE=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
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 名实合为!
评论