前面介绍了QEMU启动arm64 Linux。rootfs构建比较精简,用来快速了解构建过程,不适合工程实际。
使用 Buildroot 生成根文件系统(Rootfs)是目前嵌入式开发中最主流、最高效的方式。相比手动用 BusyBox 搭建,Buildroot 能够自动下载源码、交叉编译、打包生成完整的根文件系统镜像,极大简化了移植工作。
如下是Buildroot一次构建rootfs和Linux。
安装依赖
Buildroot 编译过程需要一系列主机工具,以 Ubuntu/Debian 为例:
sudo apt-get updatesudo apt-get install -y build-essential git libncurses5-dev \bison flex gettext texinfo unzip wget cpio python3 \rsync bc file
下载并解压 Buildroot
wget https://buildroot.org/downloads/buildroot-2025.02.1.tar.gztar -xzf buildroot-2025.02.1.tar.gzcd buildroot-2025.02.1
加载 QEMU ARM64 默认配置
Buildroot 内置了多种开发板的预设配置(defconfig)。对于 QEMU 模拟 ARM64 的场景,直接使用内置的 qemu_aarch64_virt_defconfig 即可快速起步
make qemu_aarch64_virt_defconfig进入菜单进行自定义配置
make menuconfig进入图形化配置界面后,重点关注以下几个配置项:
Target options(目标架构)
Target Architecture → AArch64 (little endian)Target Architecture Variant → Cortex-A53(或根据需求选择)
Toolchain(工具链)
Toolchain type:默认选择 Buildroot toolchain(自动构建工具链)。默认即可。
External toolchain(使用已安装的交叉编译器)。如果使用外部工具链,需要指定工具链路径、GCC 版本、内核头文件版本、C 库类型(glibc/uClibc/musl)等。
System configuration(系统配置)
默认root登录无密码。
[*] Enable root login with password x x() Root password () Root password
修改kernel和gnu下载源,加速下载。
Build options --->
Mirrors and Download locations --->
BR2_KERNEL_MIRROR="https://mirrors.hust.edu.cn/kernel.org"
BR2_GNU_MIRROR="https://mirrors.tuna.tsinghua.edu.cn/gnu"
Kernel(内核)
默认是6.12.9版本。
Filesystem images(文件系统格式)
默认rootfs是ext4文件系统,适合通过 -drive 挂载虚拟磁盘。
[*] ext2/3/4 root filesystem可以再选择输出格式cpio:勾选 cpio the root filesystem,用于生成 initramfs 格式,适合通过 -initrd 参数加载。
[*] cpio the root filesystem (for use as an initial RAM filesystem) 开始编译
make -j$(nproc)编译过程可能需要较长时间(首次编译通常 30 分钟到数小时不等,有些资源从GitHub下载很慢),Buildroot 会自动完成以下工作:
下载 Linux 内核、BusyBox 等源码包。
使用交叉编译工具链编译所有组件,生成根文件系统镜像和内核。
查看输出结果,
编译完成后,所有产物都在 output/images/ 目录下:
ls output/images/典型输出文件包括:
Image | |
rootfs.ext4 | |
rootfs.cpiorootfs.cpio.gz | |
start-qemu.sh |
使用 QEMU 启动
直接运行 Buildroot 生成的启动脚本,启动 ext4 磁盘镜像和内核。
cd output/images/# 根据需要修改 start-qemu.sh 中的参数后执行./start-qemu.sh
使用 cpio/initramfs 镜像,启动命令如下,
qemu-system-aarch64 \-M virt -cpu cortex-a53 -nographic -smp 2 \-kernel output/images/Image \-initrd output/images/rootfs.cpio \-append "root=/dev/ram0 rootfstype=ramfs rw console=ttyAMA0"
启动后输入 root 作为用户名,打印如下
...EXT4-fs (vda): orphan cleanup on readonly fsEXT4-fs (vda): mounted filesystem 69ddeb90-903b-4503-902f-649096b65d8b ro with ordered data mode. Quota mode: disabled.VFS: Mounted root (ext4 filesystem) readonlyon device 254:0.devtmpfs: mountedFreeing unused kernel memory: 1152KRun /sbin/init as init processEXT4-fs (vda): re-mounted 69ddeb90-903b-4503-902f-649096b65d8b r/w. Quota mode: disabled.Saving 256 bits of creditable seed for next bootStarting syslogd: OKStarting klogd: OKRunning sysctl: OKStarting network: udhcpc: started, v1.37.0udhcpc: broadcasting discoverudhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2udhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400deleting routersadding dns 10.0.2.3OKStarting crond: OKWelcome to Buildrootbuildroot login: root#