4. 构建并启动Buildroot根文件系统
任务目标
为RK3399平台使用Buildroot构建一个最小根文件系统,生成可用于烧录的镜像文件,并启动进入可交互的shell。本案例聚焦于Buildroot的配置、编译及产物验证,不涉及U-Boot和Kernel的构建。
环境依赖
- 主机系统:Ubuntu 18.04/20.04 x86_64
- 交叉编译工具链:由Buildroot自动下载并生成(无需手动安装)
- 必要软件包:
build-essential、git、wget、unzip、libncurses5-dev - RK3399目标板(或使用QEMU模拟验证)
Buildroot配置与构建
选择Buildroot 2023.02 LTS版本,该版本对RK3399有较完善的默认配置支持。核心配置要点:
- Target options → Target Architecture =
AArch64 (little endian) - Target options → Target Architecture Variant =
cortex-a72 - Toolchain → Toolchain type =
Buildroot toolchain(自动生成交叉编译器) - System configuration → Enable root login with password = 设置root密码(如
root) - Target packages → 不额外选择任何包,保持最小系统
- Filesystem images → 勾选
ext2/3/4和tar the root filesystem
完整实现代码
# 1. 下载并解压Buildroot
wget https://buildroot.org/downloads/buildroot-2023.02.tar.gz
tar -xzf buildroot-2023.02.tar.gz
cd buildroot-2023.02
# 2. 创建RK3399最小系统配置
make defconfig BR2_DEFCONFIG=rockchip_rk3399_defconfig
# 3. 调整关键配置项(使用menuconfig手动修改,或直接写入config片段)
# 以下为最小必要配置,写入configs/rk3399_minimal_defconfig
cat > configs/rk3399_minimal_defconfig << 'EOF'
# 继承RK3399基础配置
include rockchip_rk3399_defconfig
# 最小化系统:移除默认包含的调试工具和示例
# BR2_PACKAGE_UTIL_LINUX_BINARIES is not set
# BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
# 确保生成ext4镜像
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="128M"
# 设置root密码(登录用)
BR2_TARGET_GENERIC_ROOT_PASSWD="root"
# 关闭固件和内核编译(本案例仅构建根文件系统)
# BR2_LINUX_KERNEL is not set
# BR2_TARGET_UBOOT is not set
EOF
# 4. 使用最小配置构建
make rk3399_minimal_defconfig
make -j$(nproc)
# 5. 构建产物检查
ls -lh output/images/
# 预期看到 rootfs.ext2 和 rootfs.tar 两个文件
烧录与启动验证
将生成的rootfs.ext2烧录到SD卡或eMMC的根文件系统分区。以SD卡为例:
# 假设SD卡设备为/dev/sdb,请务必确认设备名
sudo dd if=output/images/rootfs.ext2 of=/dev/sdb1 bs=4M conv=fsync
启动验证有两种方式:
- 硬件验证:将SD卡插入RK3399开发板,连接串口(波特率1500000),上电后观察启动日志,最终应出现
login:提示符,输入用户名root和密码root进入shell。 - QEMU软件验证(无硬件时):
# 安装QEMU(主机执行)
sudo apt install qemu-system-arm
# 用QEMU启动ext2镜像(需配合RK3399的dtb和内核,此处仅验证文件系统完整性)
qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 4 -m 2G \
-kernel /path/to/Image \
-drive file=output/images/rootfs.ext2,format=raw,if=virtio \
-append "root=/dev/vda rw console=ttyAMA0" -nographic
验证方法与判定标准
- 镜像完整性:
output/images/目录下存在rootfs.ext2文件,大小约128MB。 - 文件系统可挂载:主机执行
sudo mount -o loop output/images/rootfs.ext2 /mnt,能成功挂载且/mnt/bin/sh存在。 - 启动进入shell:硬件或QEMU启动后,出现登录提示符,使用root/root登录后能执行
ls、cat /proc/cmdline等基础命令。
常见问题
- 编译报错缺少依赖:执行
sudo apt install -y build-essential git wget unzip libncurses5-dev后重试。 - ext2镜像无法挂载:确认宿主机支持ext2文件系统,或改用
rootfs.tar解压到已格式化的ext4分区。 - 登录时密码错误:检查配置中
BR2_TARGET_GENERIC_ROOT_PASSWD是否生效,重新执行make后再烧录。