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

启动验证有两种方式:

  1. 硬件验证:将SD卡插入RK3399开发板,连接串口(波特率1500000),上电后观察启动日志,最终应出现login:提示符,输入用户名root和密码root进入shell。
  2. 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后再烧录。