qemu 启动 arm64 版本 archlinux
目录
qemu 启动 arm64 版本 archlinux
下载 archlinux 镜像和 Linux 内核
- 下载 archlinux 镜像
ArchLinuxARM-aarch64-latest.tar.gz
命令行下载
# 使用 wget 命令下载
wget https://mirrors.aliyun.com/archlinuxarm/os/ArchLinuxARM-aarch64-latest.tar.gz
# 使用 curl 命令下载
curl -# -O https://mirrors.aliyun.com/archlinuxarm/os/ArchLinuxARM-aarch64-latest.tar.gz- 下载 Linux 内核
这里使用的是 v5.15.99 版本 Linux 内核。
命令行下载
# 使用 wget 命令下载
wget https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.15.99.tar.xz
# 使用 curl 命令下载
curl -# -O https://mirrors.aliyun.com/linux-kernel/v5.x/linux-5.15.99.tar.xz编译 Linux 内核
需要使用 arm64 架构的编译工具链。如果是 x86_64 平台,则需要安装 arm64 架构的交叉编译工具链。这里是 aarch64 平台,直接使用 gcc 编译即可。
# 使用默认配置 .config
make defconfig
# 使用图形化配置 .config
make menuconfig
# 编译内核
make -j$(nproc)这里使用默认 .config 配置文件就可以,不用修改。编译完成之后可以看到 arch/arm64/boot/Image 文件。
制作根文件系统镜像
- 首先创建一个 4G 的文件,用于制作根文件系统镜像。
# 使用 dd 命令创建文件
sudo dd if=/dev/zero of=rootfs.img bs=1M count=4096
# 或者使用 qemu-img 命令创建文件
qemu-img create -f raw rootfs.img 4G- 使用
mkfs.ext4命令创建 ext4 文件系统。
mkfs.ext4 rootfs.img- 使用
mount命令挂载根文件系统镜像。
mkdir rootfs
sudo mount -t ext4 rootfs.img rootfs- 使用
bsdtar命令将 archlinux 镜像解压到根文件系统镜像中。
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C rootfs- 添加
etc/inittab文件,用于启动内核。
echo "::askfirst:-/bin/bash" | sudo tee rootfs/etc/inittab > /dev/null- 使用
umount命令卸载根文件系统镜像。
sudo umount rootfs或者直接使用脚本创建根文件系统镜像,qemu-archlinux.sh 脚本内容如下:
#!/bin/bash
if [[ ! -f $(pwd)/ArchLinuxARM-aarch64-latest.tar.gz ]]; then
wget https://mirrors.aliyun.com/archlinuxarm/os/ArchLinuxARM-aarch64-latest.tar.gz
fi
if [[ -d rootfs ]]; then
sudo rm -rf rootfs
rm -rf rootfs.img start.sh stop.sh
fi
mkdir rootfs
qemu-img create rootfs.img 4G
mkfs.ext4 rootfs.img
sudo mount -t ext4 rootfs.img rootfs
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C rootfs/
echo "::askfirst:-/bin/bash" | sudo tee rootfs/etc/inittab > /dev/null
sudo umount rootfs
echo "sudo qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 2 -m 2G -nographic -kernel \$(pwd)/Image -drive file=\$(pwd)/rootfs.img,format=raw -append \"root=/dev/vda rw console=ttyAMA0 \"" > start.sh
echo "sudo kill -9 \$(pidof qemu-system-aarch64)" > stop.sh
chmod a+x start.sh stop.sh
echo "rootfs.img creation completed, please execute start.sh to run!"现在当前目录下应该有以下文件:
ArchLinuxARM-aarch64-latest.tar.gz Image qemu-archlinux.sh rootfs rootfs.img start.sh stop.sh使用 qemu 启动 archlinux
使用命令行启动
sudo qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 2 -m 2G -nographic -kernel Image -drive file=rootfs.img,format=raw -append "root=/dev/vda rw console=ttyAMA0"命令行参数解析:
-M virt: 使用 virt 架构-cpu cortex-a72: 使用 cortex-a72 架构-smp 2: 使用 2 个 CPU 核心-m 2G: 使用 2G 内存-nographic: 不显示图形界面-kernel Image: 使用 Image 内核-drive file=rootfs.img,format=raw: 使用 rootfs.img 根文件系统镜像-append "root=/dev/vda rw console=ttyAMA0": 启动参数,root=/dev/vda 表示根文件系统在 /dev/vda 设备中,rw 表示读写模式,console=ttyAMA0 表示输出到 ttyAMA0 设备
或者使用脚本启动
./start.sh当启动成功之后,会显示 archlinux 的登陆界面。
Welcome to Arch Linux ARM!
Arch Linux ARM 5.15.99 (ttyAMA0)
alarm login:archlinux 默认有 root 用户和 alarm 用户。
# root
User: root
Password: root
# alarm
User: alarm
Password: alarm