QEMU是一个强大的模拟器,可以模拟各种CPU裸机,也可以模拟包括CPU在内的一些系统级组件。QEMU和KVM结合,还可以在主机上运行性能接近主机的虚拟机。
本文记录了我在Ubuntu 18.04上用QEMU搭建ARM64+Ubuntu20.04虚拟机的过程。
1. 安装aarch64交叉编译环境
sudo apt install gcc-aarch64-linux-gnu
Ubuntu18.04上安装的arm64编译器版本为7.5.0
2. 编译Linux内核
下载Linux kernel 5.10.146代码
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.146.tar.xz
tar xf linux-5.10.146.tar.xz
cd linux-5.10.146
make ARCH=arm64 defconfig O=../build/ CROSS_COMPILE=aarch64-linux-gnu-
make ARCH=arm64 Image O=../build/ CROSS_COMPILE=aarch64-linux-gnu-
产生的内核文件位于../build/arch/arm64/boot/Image
3. 编译QEMU
由于Ubuntu18.04上安装的QEMU版本过低,运行5.10.146的内核会出现以下错误
rom: requested regions overlap (rom bootloader. free=0x0000000041e5c200, addr=0x0000000040000000)
qemu-system-aarch64: rom check and register reset failed
因此只能考虑编译最新的QEMU,我下载了最新的QEMU 7.1.0
git clone https://gitlab.com/qemu-project/qemu.git
mkdir build
./configure
make -j16
sudo make install
qemu最新版本会默认安装到/usr/local/bin,其中需要用到的是/usr/local/bin/qemu-system-aarch64
4. 执行QEMU
我们选择QEMU支持的ARM平台中的virt平台,它不对应任何实际的板子,主要的外设都是用virtio设备模拟,但是对于研究Linux内核和Ubuntu系统,virt平台已经足够使用
执行以下命令,可以看到刚才编译的5.10.146 arm64内核可以在virt上启动起来,但是由于没有设置rootfs,所以最后内核会panic
qemu-system-aarch64 -ke