首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用PVE虚拟化在x86环境下模拟一个Arm开发环境

如何用PVE虚拟化在x86环境下模拟一个Arm开发环境

作者头像
用户1160092
发布2024-11-18 20:32:17
发布2024-11-18 20:32:17
3.7K0
举报
文章被收录于专栏:MUM笔记MUM笔记

什么是Arm开发

这里解释下,这里介绍两类主要开发场景:一类是应用程序,另外一类是专用的系统(当选像华为单纯做芯片的这种,这个不属于这里说的这两类的开发,这个今天先不聊,如果大家感兴趣,可以找时间聊下做芯片到底做啥)。

  • 第一种应用程序,比较好理解,参考前段时间微信和华为鸿蒙系统的事,微信基于原来的android和ios开发好了,但是这个软件不能平滑移植到鸿蒙系统(新的硬件+软件环境),需要额外花时间进行移植。
  • 第二个种,专用系统,其实我们路由器就是一个典型的专有系统,需要特殊的硬件支持(多网卡,小的RAM),需要专门的内核,专门的系统来支持。这类在当前的物联网环境非常常见,我的各种边缘传感器,都是这样的,如AI智能摄像头。

为什么需要自己构建一个开发环境

现在生活中arm架构的环境越来越多。以个人或者家庭网络里面来说,手机arm架构占了大半,家里的电视、投影、电视盒子、路由器、摄像头,基本都是arm架构的。还有一部分基于Arm的开发板构建的家庭NAS。

对于一般用户来说,这些设备开机就用就行了。但对一个IT从业者,喜欢瞎折腾,喜欢闲搞机的我来说,就想今天刷下固件,明天跑个容器,哪天在跑个脚本什么的(典型的吃的太饱的那种)。

对个人开发者来说,更多场景是第一种——应用程序开发,折腾一些应用程序到arm环境上来运行。

所以有一个Arm环境的开发环境或者构建环境就很有必要了。

这个开发环境怎么来:

  • 自己买板子,比如现在的什么树莓派一类的。
  • 买云服务器。现在主要的云服务商都提供arm的实例,非常方便。
  • 虚拟化。采用已有的x86环境,用虚拟化技术来模拟一个Arm的环境。

前面两种,都花钱就完了,就不多介绍了。这里说下第三种,用虚拟化的方式来模拟。

虚拟化实现的原理

采用虚拟化,模拟整个主机系统,利用其它VMM(虚拟化管理系统,如kvm,Xen等)来使用硬件提供的虚拟化支持,创建一个全功能arm虚拟机

简单来说,整个系统中有一个中间商(VMM),对应用程序来说,我看到的就是一个Arm环境,这些程序在运行的时到硬件层面,会被这种中间商接手,将其指令翻译成x86架构的指令去执行。这个动作多了一层,性能是有损耗的(传说中的中间商赚差价)

不过虚拟化模拟也有一定的限制:因为它是纯软件的模拟,只适合不关注外部硬件的应用。

接下来,结合pve介绍怎么用虚拟化构建一个Arm的开发环境。

环境物料信息

  • N100 主机
  • PVE 8
  • debain arm 镜像:下载地址

具体步骤

  1. 提前下载好arm的操作系统镜像。并在pve上安装arm的基本模拟软件
代码语言:javascript
复制
apt install qemu-efi-aarch64
apt install pve-edk2-firmware-aarch64
  1. 创建虚拟机 操作系统部分,选择“不使用任何介质”

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

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

创建完成后,信息如下

  1. 修改光驱CD/DVD 先移除已有的CD/DVD,原来的是ide接口的的,需要换成scsi接口

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

  1. 添加efi启动盘 添加,选择efi启动盘,选择盘存储的位置即可。
  1. 调整启动顺序 将scsi0(硬盘),scsi1 (光驱)调整到前面,网卡(pxe)调整到最后。保证从光驱开始启动
  1. 修改虚拟机的配置文件 ssh登录到pve命令行,编辑/etc/pve/qemu-server/虚拟机id.conf文件 ,我这里虚拟机id 是105, 则编辑/etc/pve/qemu-server/105.conf, 编辑之前例行先备份. 原来的文件内容如下:
代码语言:javascript
复制
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 修改后如下:

代码语言:javascript
复制
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
  1. 启动虚拟机,开始装系统

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

  1. 等待安装完成,进入系统

至此一个arm64位的环境就模拟完成了。

  1. 后置工作 安装你需要的编译开发环境,docker,php,node等,就可以开始你的程序移植工作了。

总结

以上基本能够模拟一个完整的,纯软的arm开发环境。注意需要使用efi引导,还有对网卡,硬盘的特色要求,参考上面的文章基本都能够顺利完成。我上一篇文章分享我的IPTV电视直播源自动更新工具提到的是基于x86打包的,很多同学问arm的镜像,我就是基于这个环境来打包了。

参考: Proxmox VE(PVE)7.x 安装ARM虚拟机,对比N1性能测试

参考:一步步教你:在x86平台,如何用Qemu来模拟ARM系统

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MUM笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Arm开发
  • 为什么需要自己构建一个开发环境
  • 虚拟化实现的原理
  • 环境物料信息
  • 具体步骤
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档