背景
我们常用虚拟机来创建各类不同的操作系统用于工作和学习,如Windows、CentOS、Ubuntu等等,大部分都是x86架构的,但如果是做嵌入式开发,通常都使用ARM架构的操作系统,这些操作系统往往需要特定的硬件设备,这就给我们带来了不小的成本,但其实我们也可以使用虚拟机来创建ARM架构的操作系统,只需要一台我们平常用的PC机就行了,这给我们做嵌入式开发带来许多便利。
基础环境
配置中文字符集
查看当前系统字符集
> locale
en_US.UTF-8
...
> echo {LANG
en_US.UTF-8
安装中文字符集
# 安装中文语言包
> sudo yum install glibc-common langpacks-zh_CN
# 修改locale.conf文件
> vim /etc/locale.conf
LANG=zh_CN.utf8
# 使配置生效
> source /etc/locale.conf
安装qemu
qemu-kvm
安装kvm相关组件
> sudo yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer
启动libvirtd
> sudo systemctl start libvirtd
创建两个目录放系统镜像和虚拟机硬盘
> mkdir /apps/iso
> mkdir /apps/images
桥接设备关联网卡
> virsh iface-bridge eth0 br0
进入图形化管理界面
> virt-manager
qemu-system-aarch64
如果在宿主机上只安装了qemu-kvm的话,宿主机上只能运行x86构架的虚拟机,并不能将arm指令翻译成x86指令运行。所有还需要安装qemu-system-aarch64,它提供了arm架构虚拟机在x86架构上的运行支持。
安装依赖
> sudo yum install gcc make zlib-devel glib2-devel pixman-devel
安装python3
python需要3.7以上的版本,我们通过pyenv来安装
# 安装pyenv
> curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
# 设置环境变量
> vim ~/.bashrc
export PYENV_ROOT="{HOME/.pyenv"
export PATH="{PYENV_ROOT/bin:{PATH"
eval "{(pyenv init -)"
eval "{(pyenv virtualenv-init -)"
# 使环境变量生效
> source ~/.bashrc
# 列出所有可用版本
> pyenv install --list
# 安装python
> pyenv install 3.9.18
# 版本控制
> pyenv versions
* system
3.9.18 (set by /home/kvm/.pyenv/version)
> pyenv global 3.9.18
> python3
Python 3.9.18 (main, Nov 7 2023, 10:40:12)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
安装qemu-system-aarch64
# 下载
> wget https://download.qemu.org/qemu-8.1.2.tar.xz
# 解压
> tar xvJf qemu-2.11.0.tar.xz
# 编译
> cd qemu-8.1.2
> ./configure –-target-list=aarch64-softmmu
> make -j4
> sudo make install
安装UEFI固件
UEFI用于引导启动
# 下载
> wget https://www.kraxel.org/repos/jenkins/edk2/edk2.git-aarch64-0-20220719.209.gf0064ac3af.EOL.no.nore.updates.noarch.rpm
# 安装
> dnf install edk2.git-aarch64-0-20220719.209.gf0064ac3af.EOL.no.nore.updates.noarch.rpm
# 修改libvirt配置
> vim /etc/libvirt/qemu.conf
nvram = [
"/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"
]
# 重启libvirtd
> systemctl restart libvirtd
安装虚拟机
安装ARM架构的OpenEuler系统
官网下载:https://www.openeuler.org/zh/download/
架构:AArch64
场景:边缘计算
镜像:openEuler-22.03-LTS-SP2-edge-aarch64-dvd.iso
架构:AArch64
场景:虚拟机镜像
镜像:openEuler-23.09-aarch64.qcow2.xz
创建卷
> qemu-img create -f qcow2 openeuler-aarch64.img 50G
创建虚拟机
选择从ISO创建,并选择aarch64架构
选择ISO镜像
选择已创建的卷
设置CPU和内存
命名:openeuler-aarch64
启动
远程登录
> ssh root@192.168.1.4
password: openEuler12#{
Welcome to 6.4.0-10.1.0.20.oe2309.aarch64
问题汇总
创建虚拟机无法选择架构
根据需要安装不同架构的qemu-system,比如arm架构需要安装qemu-system-aarch64
创建虚拟机选择架构后提示:Did not find any UEFI binary path for arch 'aarch64'
缺少UEFI固件,arm架构的系统需要UEFI来引导
创建虚拟机报错:qemu-system-aarch64 Permission deny
# 修改libvirt配置
> vim /etc/libvirt/qemu.conf
user = 'root'
group = 'root'
# 重启libvirtd
> systemctl restart libvirtd
# 关闭Selinux
> setenforce 0
创建虚拟机报错:device requires 67108864 bytes, block backend provides 2097152 bytes
UEFI固件需要64M大小:QEMU_EFI.fd、QEMU_VARS.fd
# 固件安装位置
> cd /usr/share/edk2.git/aarch64/
# 查看固件信息
> qemu-img info QEMU_EFI.fd
image: QEMU_EFI.fd
file format: raw
virtual size: 2 MiB (2097152 bytes)
disk size: 2 MiB
Child node '/file':
filename: QEMU_EFI.fd
protocol type: file
file length: 2 MiB (2097152 bytes)
disk size: 2 MiB
# 调整固件大小
> qemu-img resize -f raw QEMU_EFI.fd 64M
# QEMU_VARS.fd也同样需要处理一下
> qemu-img resize -f raw QEMU_VARS.fd 64M