跳到主要内容

100ASK T113S3 Pro 主线 Linux 适配

本章目标

让 Linux 6.18.8 在 RAM 安装和 SPI NAND 冷启动两种场景下使用同一套板级硬件描述,并完成串口、MTD、UBI/UBIFS 和基础外设初始化。

输入文件

board/dshanpi/t113s3pro/
├── linux.fragment
├── linux-dts/allwinner/sun8i-t113s-dshanpi-t113s3pro.dts
├── fel-payload-reserved-memory.dtso
└── patches/linux/0001-spinand-gate-dshanpi-legacy-ee-oob-migration.patch

设备树适配

1. 板级身份与内存

model = "DshanPi T113S3 Pro (mainline)";
compatible = "dshanpi,t113s3pro", "allwinner,sun8i-t113s";

memory@40000000 {
device_type = "memory";
reg = <0x40000000 0x08000000>;
};

0x08000000 为 128 MiB。安装器 payload 使用高地址保留内存,不能与内核、DTB 或 initramfs 重叠。

2. UART3

aliases {
serial3 = &uart3;
};

chosen {
stdout-path = "serial3:115200n8";
};

内核命令行使用:

earlycon=uart8250,mmio32,0x02500c00 console=ttyS3,115200

只有 Starting kernel ... 而没有后续日志时,首先核对 earlycon 地址、stdout-path、UART3 pinctrl 和 FIT 中的 DTB。

3. SPI NAND 和固定分区

Linux DTS 为 SPI0 配置 PC2-PC7,并声明 spi-nand。正式分区名称依次为:

spl -> uboot -> secure-storage -> boot -> sys

ubi.mtd 接受的是 MTD 分区名 sysrootfs 是 UBI 卷名,不能写成 ubi.mtd=rootfs

4. 以太网

RTL8201F 使用 RMII:

PHY address: 0
reset GPIO: PE10, active low
TX delay: 300 ps
RX delay: 0 ps

设备枚举不等于网络通过,最终验收还需要链路建立、DHCP 或静态地址以及实际收发。

5. USB 和 SD 卡

  • USB OTG 配置为 peripheral;
  • EHCI1/OHCI1 用于 USB Host;
  • MMC0 使用 PF6 检卡、4-bit 总线。

这些功能属于冷启动后的外设验收,不应阻塞最小启动链验证。

内核配置

linux.fragment 至少启用:

CONFIG_MTD_SPI_NAND=y
CONFIG_MTD_UBI=y
CONFIG_UBIFS_FS=y
CONFIG_SPI_SUN6I=y
CONFIG_STMMAC_ETH=y
CONFIG_DWMAC_SUN8I=y
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y

安装器还依赖完整的 MTD/UBI 用户空间工具,详见Buildroot 根文件系统适配

旧 OOB 数据迁移补丁

历史 DshanPi 镜像会在 W25N02KV 部分擦除块的空闲 OOB 区写入 ee ee。主线 SPI NAND core 会把非 ff 标记判断为坏块,导致出现 1953 个“坏块”。

迁移补丁只在以下条件全部满足时把精确的 ee ee 模式视为可擦除旧元数据:

  • 芯片 ID 为 ef aa 22
  • 安装器 DT 显式包含 dshanpi,legacy-ee-bbm
  • 标记恰好为 ee ee

其他任何非 ff 标记仍按坏块保护。该属性只通过安装器 overlay 添加,不进入日常运行 DTS。

RAM 安装器专用保留内存

安装器 overlay 声明:

fel-payload@44800000 {
reg = <0x44800000 0x01800000>;
};

这 24 MiB 区域由 OpenixCLI 放置压缩 payload,Linux 启动后从 /dev/mem 恢复。常规冷启动 DTB 不需要该保留区。

编译和验证

完整构建后检查:

test -s out/mainline/t113s3pro/images/zImage
test -s out/mainline/t113s3pro/images/allwinner/sun8i-t113s-dshanpi-t113s3pro.dtb

grep -E 'CONFIG_(MTD_SPI_NAND|MTD_UBI|UBIFS_FS)=y' \
out/mainline/t113s3pro/build/linux-6.18.8/.config

RAM 启动后保存:

uname -srvm
cat /proc/device-tree/model; echo
cat /proc/mtd
dmesg | grep -Ei 'ttyS3|spi-nand|mtd|ubi|ubifs|stmmac'

预期输出

Linux version 6.18.8
DshanPi T113S3 Pro (mainline)
spi-nand ... ef aa 22
ubi0: attached mtd4 (name "sys", size 242 MiB)
VFS: Mounted root (ubifs filesystem)

失败处理

现象处理顺序
无内核串口日志earlycon -> console -> pinctrl -> FIT DTB
没有 SPI NANDSPI0 pinctrl -> CS -> 芯片 ID -> 供电
坏块数为 1953只在安装器 DT 中核对旧 OOB 迁移属性
cannot open mtd rootfs改为 ubi.mtd=sys
UBI attach 失败NAND 几何、OOB/ECC、PEB/VID 参数
网卡枚举但不通PHY reset、RMII 时钟、延时和实际收发

回滚

Linux DTS 或配置错误时,优先从 RAM 修改和验证,不直接写 NAND。若已经写入但冷启动失败,重新进入 FEL 使用上一套硬件验证哈希或 Tina 恢复路径恢复板卡。