跳到主要内容

100ASK T113S3 Pro Buildroot 根文件系统适配

本章目标

生成能够从 ubi0:rootfs 启动的 Buildroot 系统,并同时提供构建 Linux RAM installer 所需的 BusyBox、MTD 和 UBI 工具。

输入文件

configs/dshanpi_t113s3pro_nand_defconfig
board/dshanpi/t113s3pro/linux.fragment
board/dshanpi/t113s3pro/rootfs_overlay/
board/dshanpi/t113s3pro/make-fel-installer-initramfs.sh
board/dshanpi/t113s3pro/installer-init

Buildroot 板级配置

架构和系统身份

BR2_arm=y
BR2_cortex_a7=y
BR2_ARM_FPU_VFPV4=y
BR2_TARGET_GENERIC_HOSTNAME="t113s3pro-mainline"
BR2_TARGET_GENERIC_GETTY_PORT="ttyS3"

根文件系统格式

BR2_TARGET_ROOTFS_UBIFS=y
BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000
BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x800
BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=1900
BR2_TARGET_ROOTFS_UBIFS_RT_ZLIB=y

BR2_TARGET_ROOTFS_UBI=y
BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x20000
BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048

参数对应已验证 NAND:

参数
最小 I/O2048 字节
PEB131072 字节
LEB126976 字节
子页2048 字节
最大 LEB1900
压缩zlib

更换 NAND 后必须重新计算,不得只修改 DTS 容量。

用户空间组件

常规系统启用:

  • BusyBox;
  • eudev 动态设备节点;
  • mtd-utils
  • ethtool
  • iproute2
  • UART3 getty;
  • DHCP 网络配置。

rootfs overlay 中:

  • /init 转交 /sbin/init,兼容经过验证的启动参数;
  • /etc/profile.d/mainline-release.sh 登录时输出主线系统身份和 uname
  • /etc/network/interfaces 启用 loopback 和 eth0 DHCP。

生成 UBIFS 和 UBI

Buildroot 先生成:

out/mainline/t113s3pro/images/rootfs.ubifs

封装脚本再使用 ubinize 创建仅包含一个动态卷的 sys.ubi

[rootfs]
mode=ubi
image=rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize

因此三个对象必须区分:

MTD 分区名:sys
UBI 设备: ubi0
UBI 卷名: rootfs

构建 RAM installer 用户空间

make-fel-installer-initramfs.sh 从 Buildroot target 中复制:

  • BusyBox 及必要 applet;
  • glibc loader、libc 和 libresolv;
  • flash_erasenandwritenanddump
  • ubiformatubiattachubidetachubinfo
  • 板级 installer-init
  • payload 地址、长度和 SHA-256。

生成结果为:

fel-base-initramfs.cpio.gz

它是独立 RAM 环境,不是最终 UBIFS rootfs。

编译验证

test -s out/mainline/t113s3pro/images/rootfs.ubifs
test -s out/t113s3pro-mainline-fel/sys.ubi
test -s out/t113s3pro-mainline-fel/fel-base-initramfs.cpio.gz

test -x out/mainline/t113s3pro/target/sbin/init
test -x out/mainline/t113s3pro/target/usr/sbin/ubiformat
test -x out/mainline/t113s3pro/target/usr/sbin/nandwrite

板端启动后检查:

mount | grep 'ubi0:rootfs'
ubinfo -a
test -x /sbin/init
cat /etc/hostname

预期输出

DshanPi T113S3 Pro - mainline Buildroot
t113s3pro-mainline login:

失败处理

现象优先检查
找不到 /sbin/initrootfs overlay、Buildroot init 选择
没有 ttyS3 登录getty port、UART3 console、设备节点
安装器缺少命令Buildroot BR2_PACKAGE_MTD 子选项
ubiformat 失败PEB、页大小、OOB/ECC 和坏块状态
UBIFS 挂载失败LEB、min I/O、卷名和内核 UBIFS 配置

回滚和证据

根文件系统生成失败不会写板。保存 Buildroot .configrootfs.ubifssys.ubi 的哈希。已经写入后若 /sbin/init 检查失败,安装器会进入 UART3 emergency shell,不应继续自动重启。