在X64位Windows系统上安装 arm64架构的Linux虚拟机

因为公司一个项目甲方是国企,要用arm64架构的CPU,但国企效率又很低,迟迟不提供测试机器,又让研究技术可行性。尝试用Docker buildx也没有成功,于是想到用虚拟机来做。

网上查了下Windows环境下虚拟机软件,Vmware、VirtualBox、Hyper-V都不支持在X86_64的CPU下虚拟出Arm64的CPU,有的就只支持Intel和AMD的CPU。在Linux下的qemu倒是可以实现这样的虚拟。也没在linux中装过虚拟机,当时有些担心,把这个方案放在最后尝试,主要参照这篇文章去做:
https://blog.csdn.net/chenxiangneu/article/details/78955462

但我是先在Windows系统用上用VMWare安装一个类似CentOS的虚拟机,然后再在虚拟机中安装Qemu,编译Qemu可能还需要一些其他的软件文章中没有提到的,需要什么就安装什么了,比如ninja,用yum search 命令检索,再用yum install 命令安装就可以了,编译需要一点时间。

VmWare第一层虚拟网络使用的桥接模式,安装第二层虚拟机也算顺利,而且在第二层虚拟机内也能上网了,但是在ssh工具远程访问不到。后来看到了https://wzt.ac.cn/2019/09/10/QEMU-networking/这篇文章,按照内容执行命令把网络也配置好了,但每次都要启动虚拟机都要执行这些命令,可以做成一个shell 脚本:

#!/bin/bash
#ens33改为宿主机中能上网的网卡名,注意替换
ifconfig ens33 down    # 首先关闭宿主机网卡接口
brctl addbr br0                     # 添加一座名为 br0 的网桥
brctl addif br0 ens33        # 在 br0 中添加一个接口
brctl stp br0 off                   # 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1                   # 设置 br0 的转发延迟
brctl sethello br0 1                # 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up     # 启用 br0 接口
ifconfig ens33  0.0.0.0 promisc up    # 启用网卡接口
dhclient br0                        # 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0                      # 查看虚拟网桥列表
brctl showstp br0                   # 查看 br0 的各接口信息

tunctl -t tap0 -u root              # 创建一个 tap0 接口,只允许 root 用户访问
brctl addif br0 tap0                # 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up    # 启用 tap0 接口
brctl showstp br0                   # 显示 br0 的各个接口

#启动虚拟机,注意相关文件的路径
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic  -device virtio-scsi-device  -drive if=none,file=虚拟磁盘名.img,id=hd0 -device virtio-blk-device,drive=hd0  -net nic -net tap,ifname=tap0,script=no,downscript=no

启动虚拟机之后,用ifconfig命令查看IP地址,再用SSH工具来连接这个IP地址,就可以做你想做的事了。尝试了下载arm64的docker镜像和构建arm64镜像都成功了。

你可能感兴趣的:(在X64位Windows系统上安装 arm64架构的Linux虚拟机)