这里解释下,这里介绍两类主要开发场景:一类是应用程序,另外一类是专用的系统(当选像华为单纯做芯片的这种,这个不属于这里说的这两类的开发,这个今天先不聊,如果大家感兴趣,可以找时间聊下做芯片到底做啥)。
现在生活中arm架构的环境越来越多。以个人或者家庭网络里面来说,手机arm架构占了大半,家里的电视、投影、电视盒子、路由器、摄像头,基本都是arm架构的。还有一部分基于Arm的开发板构建的家庭NAS。
对于一般用户来说,这些设备开机就用就行了。但对一个IT从业者,喜欢瞎折腾,喜欢闲搞机的我来说,就想今天刷下固件,明天跑个容器,哪天在跑个脚本什么的(典型的吃的太饱的那种)。
对个人开发者来说,更多场景是第一种——应用程序开发,折腾一些应用程序到arm环境上来运行。
所以有一个Arm环境的开发环境或者构建环境就很有必要了。
这个开发环境怎么来:
前面两种,都花钱就完了,就不多介绍了。这里说下第三种,用虚拟化的方式来模拟。
采用虚拟化,模拟整个主机系统,利用其它VMM(虚拟化管理系统,如kvm,Xen等)来使用硬件提供的虚拟化支持,创建一个全功能arm虚拟机

简单来说,整个系统中有一个中间商(VMM),对应用程序来说,我看到的就是一个Arm环境,这些程序在运行的时到硬件层面,会被这种中间商接手,将其指令翻译成x86架构的指令去执行。这个动作多了一层,性能是有损耗的(传说中的中间商赚差价)
不过虚拟化模拟也有一定的限制:因为它是纯软件的模拟,只适合不关注外部硬件的应用。
接下来,结合pve介绍怎么用虚拟化构建一个Arm的开发环境。
apt install qemu-efi-aarch64
apt install pve-edk2-firmware-aarch64

虚拟机的这里,scsi控制器,选择VirtIO SCSI,Bios选择OVMF, 这里不要创建efi启动盘

下面的磁盘大小,cpu,内存,根据实际情况,自行调整。网卡这里需要选择半虚拟化。

创建完成后,信息如下


然后添加一个新的,光驱点击添加,选择CD/DVD,然后总线设备选择scsi,介质选择刚刚下载好的arm的驱动。



/etc/pve/qemu-server/虚拟机id.conf文件 ,我这里虚拟机id 是105, 则编辑/etc/pve/qemu-server/105.conf, 编辑之前例行先备份. 原来的文件内容如下:bios: ovmf
boot: order=scsi0;scsi1;net0
cores: 1
cpu: x86-64-v2-AES
efidisk0: local-lvm:vm-105-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
memory: 2048
meta: creation-qemu=8.1.5,ctime=1731638714
name: armvm
net0: virtio=BC:24:11:01:16:7F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-105-disk-1,size=32G
scsi1: local:iso/debian-12.8.0-arm64-netinst.iso,media=cdrom,size=538924K
scsihw: virtio-scsi-pci
smbios1: uuid=a8b3d976-c3cc-44d1-8e9e-fff140f075f8
sockets: 1
vmgenid: 909038c6-86fe-44e1-8e3b-5243e48e1481
修改处:
1)注释掉vmgenid
2)删除或者注释cpu: x86-64-v2-AES 行
3)增加一行:arch: aarch64
4)efi磁盘的size,如果是4M,改成64M 修改后如下:
bios: ovmf
boot: order=scsi0;scsi1;net0
cores: 1
arch: aarch64
#cpu: x86-64-v2-AES
efidisk0: local-lvm:vm-105-disk-0,efitype=4m,pre-enrolled-keys=1,size=64M
memory: 2048
meta: creation-qemu=8.1.5,ctime=1731638714
name: armvm
net0: virtio=BC:24:11:01:16:7F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-105-disk-1,size=32G
scsi1: local:iso/debian-12.8.0-arm64-netinst.iso,media=cdrom,size=538924K
scsihw: virtio-scsi-pci
smbios1: uuid=a8b3d976-c3cc-44d1-8e9e-fff140f075f8
sockets: 1
#vmgenid: 909038c6-86fe-44e1-8e3b-5243e48e1481

这个安装过程不是无人值守的,需要手动选择时区,磁盘分区,输入密码等。安装过程会比较慢,等着完成即可。

至此一个arm64位的环境就模拟完成了。
以上基本能够模拟一个完整的,纯软的arm开发环境。注意需要使用efi引导,还有对网卡,硬盘的特色要求,参考上面的文章基本都能够顺利完成。我上一篇文章分享我的IPTV电视直播源自动更新工具提到的是基于x86打包的,很多同学问arm的镜像,我就是基于这个环境来打包了。
参考: Proxmox VE(PVE)7.x 安装ARM虚拟机,对比N1性能测试
参考:一步步教你:在x86平台,如何用Qemu来模拟ARM系统