在x86架构的CentOS 7上通过qemu运行ARM架构虚拟机。
注意
截至目前,本文内容总的来说仍存在问题,目前仍在更新,请酌情参考。之后会重写一篇系统性介绍QEMU各架构的编译与用法。跳过glib那块的话(纯文本-nographic
)是可以跑通的。
准备阶段
目前新版本的QEMU所需要的编译链和依赖项在CentOS7版本中可能没有或版本较旧无法使用,以下均为我在实际环境中执行后所得结果,除非有特殊标记,否则所有步骤都不能跳过且尽量按照本文顺序执行。
安装基础依赖
- 实用工具:
1
yum install -y net-tools wget git bzip2 make texinfo
- 开发工具和依赖项:
1
2
3
4
5
6yum groupinstall 'Development Tools' -y
yum groupinstall "Virtualization Host" -y
yum install -y kvm qemu virt-viewer virt-manager libvirt libvirt-python python-virtinst
yum install libguestfs-tools -y
yum install virt-install.noarch -y
yum install python2 zlib-devel glib2-devel pixman-devel -y - 设置
libvirtd
:将当前用户添加到1
2systemctl enable libvirtd
systemctl start libvirtdlibvirt
组:1
usermod -aG libvirt $(whoami)
- 安装其他依赖:
1
yum install virt-install virt-viewer virt-manager -y
修改QEMU的配置文件
打开/etc/libvirt/qemu.conf
,找到如下user
和group
行,并取消注释:
1 | # Some examples of valid values are: |
修改保存后重启一下主机。
安装EFI
我这里替换成了清华源。
1 | yum install -y http://mirrors4.tuna.tsinghua.edu.cn/centos-altarch/7/os/aarch64/Packages/AAVMF-20180508-6.gitee3198e672e2.el7.noarch.rpm |
编译Ninja
- 将Ninja的仓库从Github上拉取下来:
1
2git clone https://github.com/ninja-build/ninja.git && cd ninja
git checkout release - 执行编译
1
./configure.py --bootstrap
- 将Ninja丢到
/usr/bin/
:1
cp ninja /usr/bin/
- 在外部执行
ninja -h
验证是否有正确返回。
安装GCC
这里我们一步到位直接上GCC 9.3。
1 | yum -y install centos-release-scl |
这里通过scl
设置完后只是一次性的,重新登录console或重启后失效,如果需要长久使用需要将source /opt/rh/devtoolset-9/enable
写入/etc/profile
。
额外提一嘴:也可以自己编译GCC然后
make install
,不过参考“在一台Intel Xeon 2.30GHz的48核128GB内存机器上花费228分钟(将近4个小时,不包括make install
的时间),编译GCC-8.3.0的GCC版本为4.8.5(64位)。”,时间不充裕的话就算了吧。
看一下版本:
1 | [root@localhost ~]# gcc -v |
编译 Python 3.7
QEMU 7.2.0版本编译要求Python版本高于或等于3.6即可,这里选择安装3.7版本。
- 安装依赖:
1
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel
- 下载Python 3.7源码:
1
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz -O Python-3.7.0.tgz
- 解压:
1
2tar -zxvf Python-3.7.0.tgz
cd Python-3.7.0/ - 编译:
1
2
3./configure --enable-optimizations
make -j8
make install
Python 3.7编译速度还可以,8c8g的机子二十分钟以内能编译完。
编译glib
如果需要启用dbus_display
特性则需要glib 2.64及以上版本,如果不需要该特性此步可以跳过。截至我做实验的时候glib的最新版本为2.76.1,本文以此版本为例。
- 下载m4源码:
1
wget http://mirrors.kernel.org/gnu/m4/m4-latest.tar.gz -O m4-latest.tar.gz
- 编译m4:验证m4安装好:
1
2
3cd m4-1.4.19/
./configure -prefix=/usr/local
make&&make install1
m4 --version
- 下载autoconf源码:
源码地址:Index of /gnu/autoconf。1
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz -O autoconf-2.71.tar.gz --no-check-certificate
- 编译autoconf:
1
2
3cd autoconf-2.71/
./configure -prefix=/usr/local
make -j4 && make install - 下载libffi源码:
1
git clone https://github.com/libffi/libffi.git
- 编译libffi:
1
2
3
4cd libffi/
./autogen.sh
./configure
make && make install - 把libffi加入系统环境变量
打开/etc/profile
,添加如下内容:应用环境变量:1
2
3
4# libffi
export LIBFFI_CFLAGS=/usr/local/include
export LIBFFI_LIBS=/usr/local/lib64/libffi.la
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH1
source /etc/profile
- 安装meson:
因为从源安装的meson大概率不是最新版本,所以不如直接从pip安装。刚才我们已经装好Python 3.7了,因此直接从pip安装即可。1
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple meson
- 下载glib源码:
glib源码仓库,下载直接复制链接即可,会自动301到镜像源。1
wget https://download.gnome.org/sources/glib/2.76/glib-2.76.1.tar.xz -O glib-2.76.1.tar.xz --no-check-certificate
- 解压:
1
2tar -Jxvf glib-2.76.1.tar.xz
cd glib-2.76.1/ - 修改配置文件
如果与Github的连接有问题的话,需要修改一下subprojects
下面的的仓库地址以正确拉取。 - 编译:
1
meson build
这块没写完,未完待续哈。
编译QEMU
这里以QEMU 7.2.0版本为例。
- 下载QEMU源码:
1
wget https://download.qemu.org/qemu-7.2.0.tar.bz2 -O qemu-7.2.0.tar.bz2 --no-check-certificate
- 解压:
1
2tar -jxvf qemu-7.2.0.tar.bz2
cd qemu-7.2.0/ - 编译:
1
2
3./configure --target-list=aarch64-softmmu --prefix=/usr
make -j8
make install
运行虚拟机
目前来说是通过文本模式运行操作系统,不过我还是想通过图形化运行,之后会研究。
以文本模式运行
1 | qemu-system-aarch64 \ |