qemu搭建arm64环境

安装交叉编译工具链

1
2
sudo apt install gcc-aarch64-linux-gnu
sudo apt install libncurses5-dev build-essential git bison flex libssl-dev

查看版本,如图所示:

安装qemu

可以从源码安装,也可以直接从仓库安装

1
2
3
4
5
6
wget https://download.qemu.org/qemu-9.2.4.tar.xz
tar -xvJf qemu-9.2.4.tar.xz
cd qemu-9.2.4
./configure
make -j 8
sudo make install

安装qemu依赖

1
2
3
4
5
6
7
sudo apt-get install ninja-build libglib2.0-dev libpixman-1-dev zlib1g-dev \
libfdt-dev libusb-1.0-0-dev libaio-dev libbluetooth-dev libbrlapi-dev \
libbz2-dev libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev libncurses5-dev \
libnfs-dev libpulse-dev libsasl2-dev libsdl2-dev libseccomp-dev libsnappy-dev \
libssh-dev libvde-dev libvdeplug-dev libvte-2.91-dev libxen-dev liblzo2-dev \
libspice-server-dev libusbredirhost-dev libusbredirparser-dev libx11-dev \
libxml2-dev libzstd-dev python3-pip python3-venv pkg-config

安装完成后查看版本

制作根文件系统

下载busybox源码

1
2
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
tar jxvf busybox-1.36.1.tar.bz2

指定编译工具链

1
2
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

编译busybox

1
2
3
4
5
6
make defconfig
make menuconfig
Settings --->
[*] Build static binary (no shared libs)
make -j 8
make install

创建需要的目录

1
2
cd _install/
mkdir -p dev lib sys proc tmp var home root mnt etc/init.d
添加etc/profile
1
2
3
4
5
6
7
8
9
10
11
12
13
#vim etc/profile

#!/bin/sh
export HOSTNAME=user
export USER=root
export HOME=/home
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
mknod dev/console c 5 1
mknod dev/tty1 c 4 1
mknod dev/mull c 1 3
添加/etc/inittab
1
2
3
4
5
6
#vim etc/inittab

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
添加etc/fstab
1
2
3
4
5
6
7
8
9
#vim etc/fstab

#<file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0
添加etc/init.d/rcS
1
2
3
4
5
6
7
8
9
10
11
#vim etc/init.d/rcS

mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

给rcS添加权限

1
chmod 777 etc/init.d/rcS
添加lib库内容
1
2
cd lib
cp /usr/aarch64-linux-gnu/lib/*.so* -a .

具体可参考根文件系统构建

制作基于ram的内存文件系统

cpio工具制作initramfs内存文件系统

1
2
cd _install
find . | cpio -o -H newc | gzip > ../initramfs.cpio.gz

制作基于硬盘的文件系统

1
2
3
4
5
6
7
8
9
10
11
# 生成1G的空镜像文件
dd if=/dev/zero of=initrd.img bs=1M count=1024
# 设定镜像文件系统格式
mkfs.ext4 initrd.img
# 挂在镜像到一个空文件夹
mkdir fs
sudo mount -t ext4 initrd.img fs
# 把rootfs内容拷贝到镜像文件夹fs
cp -a rootfs/* fs/.
# 搞定了,卸载镜像
sudo umount fs

输入qemu命令启动内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#基于ramfs运行qemu
qemu-system-aarch64 \
-machine virt,virtualization=true,gic-version=3 \
-nographic \
-m 1024M \
-cpu cortex-a57 \
-smp 4 \
-kernel arch/arm64/boot/Image \
-initrd initramfs.cpio.gz \
-append "root=/dev/ram console=ttyAMA0 rdinit=/linuxrc loglevel=8"

#基于磁盘文件系统运行qemu
qemu-system-aarch64 \
-machine virt,virtualization=true,gic-version=3 \
-nographic \
-m 1024M \
-cpu cortex-a57 \
-smp 4 \
-kernel arch/arm64/boot/Image \
-drive file=initrd.img,format=raw,if=virtio \
-append "root=/dev/vda console=ttyAMA0 loglevel=8"

随后退出qemu可以按ctrl+A X

界面启动方式

1
sudo apt install libvirt0 libvirt-daemon qemu-efi-x86 qemu-system-x86 virt-manager bridge-utils libvirt-clients python3-libvirt uml-utilities virtinst 

然后在终端直接运行

1
virt-manager

qemu搭建arm64环境
https://tomwithkernel.github.io/虚拟机/qemu环境搭建/
作者
Tom
发布于
2025年6月23日
更新于
2025年7月1日
许可协议