返回所有文章
快速开始 / TSENGCHEN BLOG

RK3562-SPI-NAND-Quick_Start

08_QuickStart · RK3562-SPI-NAND-Quick_Start

08_QuickStart · 第 2 / 5 篇

保留原笔记正文与技术内容,仅脱敏敏感信息。配图按作者要求保留原样。

RK3562 EVB2 DDR4 V10 SPI NAND 配置说明

本文说明 RK3562 EVB2 DDR4 V10 由 eMMC 切换至 256MiB SPI NAND 后的启动链路、分区配置、Rootfs 配置和已应用的 Rootfs 裁剪项。

适用配置

项目配置
芯片RK3562
板型EVB2 DDR4 V10
存储介质256MiB SPI NAND
内核Linux 6.1
RootfsBuildroot UBI/UBIFS
根文件系统ubi0:rootfs

配置文件

模块文件用途
板级配置device/rockchip/.chips/rk3562/rockchip_rk3562_evb2_ddr4_v10_spi_nand_defconfig选择 U-Boot、Kernel DTS、Buildroot、parameter 和闪存容量
U-Boot 配置片段u-boot/configs/rk3562-spi-nand.config启用 SPI NAND、SFC 和 SPL MTD 启动支持
U-Boot DTSu-boot/arch/arm/dts/rk3562-evb2-ddr4-v10-spi-nand.dts配置 SPL 从 SPI NAND 启动
Kernel DTSkernel/arch/arm64/boot/dts/rockchip/rk3562-evb2-ddr4-v10-spi-nand-linux.dts配置 SFC、SPI NAND 和 UBIFS 根文件系统
Kernel Makefilekernel/arch/arm64/boot/dts/rockchip/Makefile添加 SPI NAND DTB 编译项
分区表device/rockchip/.chips/rk3562/parameter-spi-nand.txt定义 SPI NAND 分区
Buildroot 配置buildroot/configs/rockchip_rk3562_spi_nand_defconfig生成 UBI/UBIFS Rootfs 和选择软件包

板级配置

板级 defconfig 的关键项如下:

RK_ROOTFS_UBI=y
# RK_ROOTFS_DEBUG_INFO is not set
# RK_ROOTFS_PREBUILT_TOOLS is not set
# RK_ROOTFS_PREFER_PREBUILT_TOOLS is not set
RK_UBOOT_CFG_FRAGMENTS="rk3562-spi-nand"
RK_BUILDROOT_BASE_CFG="rk3562_spi_nand"
RK_WIFIBT_CHIP="AP6275S"
RK_UBOOT_SPL=y
RK_KERNEL_DTS_NAME="rk3562-evb2-ddr4-v10-spi-nand-linux"
RK_PARAMETER="parameter-spi-nand.txt"
RK_BOOT_COMPRESSED=y
RK_FLASH_SIZE=256

RK_FLASH_SIZE 与实际 SPI NAND 容量一致。关闭预编译工具包后,SDK 不会向 Rootfs 全量复制调试和测试程序。

U-Boot 启动配置

rk3562-spi-nand.config 指定 SPI NAND 启动设备并启用相关驱动:

CONFIG_DEFAULT_DEVICE_TREE="rk3562-evb2-ddr4-v10-spi-nand"
CONFIG_OF_LIST="rk3562-evb2-ddr4-v10-spi-nand"
CONFIG_ROCKCHIP_SFC_IOMUX=y
CONFIG_SPL_MTD_SUPPORT=y
CONFIG_MTD_BLK_U_BOOT_OFFS=0x4000
CONFIG_NAND=y
CONFIG_NAND_ROCKCHIP=y
CONFIG_MTD_SPI_NAND=y
CONFIG_ROCKCHIP_SFC=y

U-Boot DTS 中创建 chosen 节点,将 SPL 启动设备设为 SPI NAND,并启用 SFC:

/ {
	chosen {
		u-boot,spl-boot-order = &spi_nand;
	};
};

&sfc {
	u-boot,dm-spl;
	status = "okay";

	spi_nand: flash@0 {
		u-boot,dm-spl;
		compatible = "spi-nand";
		reg = <0>;
		spi-tx-bus-width = <1>;
		spi-rx-bus-width = <4>;
		spi-max-frequency = <50000000>;
	};
};

Kernel 设备树与根文件系统

SFC 控制器节点由芯片级 DTSI 提供,板级 DTS 负责使能控制器并定义实际挂载的 SPI NAND。

&chosen {
	bootargs = "earlycon=uart8250,mmio32,0xff210000 console=ttyFIQ0 ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs rw rootwait";
};

&sdhci {
	status = "disabled";
};

&sfc {
	status = "okay";

	spi_nand: flash@0 {
		compatible = "spi-nand";
		reg = <0>;
		spi-max-frequency = <50000000>;
		spi-tx-bus-width = <1>;
		spi-rx-bus-width = <4>;
	};
};

rootfs 是第 6 个 MTD 分区,索引为 5,因此 Kernel 参数使用 ubi.mtd=5。

SPI NAND 分区表

parameter-spi-nand.txt 的分区布局如下:

分区起始位置大小结束位置
Loader 保留0MiB8MiB8MiB
uboot8MiB4MiB12MiB
misc12MiB4MiB16MiB
boot16MiB32MiB48MiB
recovery48MiB34MiB82MiB
backup82MiB8MiB90MiB
rootfs90MiB144MiB234MiB
oem234MiB8MiB242MiB
userdata242MiB14MiB256MiB

分区均按 128KiB PEB 对齐,总容量为 256MiB。

Buildroot UBI/UBIFS 配置

Buildroot 配置启用 UBI/UBIFS 和 LZO 压缩:

#include "fs/ubifs.config"
BR2_TARGET_ROOTFS_UBI_UBIFS=y
BR2_TARGET_ROOTFS_UBIFS_RT_LZO=y
BR2_TARGET_ROOTFS_UBIFS_MAX_SIZE=128

当前生成的 rootfs.ubi 为 125.62MiB。Rootfs 分区为 144MiB,镜像余量为 18.38MiB(147 个 PEB)。

板级私有字体 Overlay

中文 Regular 字体只供 RK3562 EVB2 SPI NAND 使用,不能放入公共 board/rockchip/rk3562/fs-overlay/。SPI NAND defconfig 增加专用 overlay:

BR2_ROOTFS_OVERLAY+="board/rockchip/rk3562/evb2-ddr4-v10-spi-nand/fs-overlay"

字体文件路径如下:

buildroot/board/rockchip/rk3562/evb2-ddr4-v10-spi-nand/fs-overlay/usr/share/fonts/source-han-sans-cn/SourceHanSansCN-Regular.otf

该路径仅在选择 rockchip_rk3562_spi_nand_defconfig 时生效,不影响其他 RK3562 板型或 defconfig。

Rootfs 保留内容

类别内容
图形显示Mali、Weston、Wayland、Weston demo clients
本地音视频ALSA、GStreamer、MPP、RGA、本地硬件编解码
NPURKNN runtime(librknnrt.so)
无线AP6275S Wi-Fi、蓝牙驱动、固件和初始化工具
外接存储FAT、exFAT、NTFS、UBI/UBIFS
调试连接USB/TCP adbd
字体SPI NAND 专用 overlay 中的 SourceHanSansCN-Regular.otf

Rootfs 已裁剪内容

类别已移除内容
SDK 预编译工具全量预编译工具包
中文字体完整 Source Han CN 字体包,仅保留 Regular
NPURKNN 示例程序和模型
相机和测试Rockchip test、MPP test、ISP demo
调试工具GDB、GDBServer、perf、strace、ltrace
压测和跑分memtester、stressapptest、coremark、dhrystone
显示和分区诊断edid-decode、libdrm tests、gptfdisk、parted 等
GStreamer测试、调试和未使用的旧格式插件
SDK 调试信息内核 System.map、配置和 manifest

可选裁剪项

项目当前 target 占用条件
DejaVu 和 Liberation 字体约 13.5MiB应用不依赖对应字体或图标字体
eudev 硬件数据库约 17MiB验证 USB、键盘鼠标和热插拔
全量时区数据库约 3MiB仅保留 Asia/Shanghai
PulseAudio约 4MiB音频链路仅使用 ALSA
frecon约 2.8MiB不使用 Rockchip 图形控制台
Font Awesome约 1.4MiBUI 不使用该图标字体
hostapd约 1.2MiB不提供 Wi-Fi 热点
updateEngine约 0.8MiB不使用 OTA 升级
CA 证书约 0.8MiB无 HTTPS 或云服务依赖
GStreamer nvcodec约 0.7MiBNVIDIA 插件,RK3562 不使用

预留后处理脚本

以下脚本已保留,但当前未在 Buildroot defconfig 中启用:

buildroot/board/rockchip/rk3562/post-build-spi-nand.sh

当前配置没有 BR2_ROOTFS_POST_BUILD_SCRIPT 的 RK3562 追加项,因此构建不会执行该脚本。

该类脚本由 Buildroot 在软件包安装完成、生成 rootfs.ubi 前执行,处理对象是 target/ 目录。预留脚本删除以下项目:

类别项目
udev 硬件数据库/etc/udev/hwdb.bin、/etc/udev/hwdb.d/
udev helperv4l_id、ata_id、cdrom_id、collect
udev rule相机、光驱、磁带、Btrfs、传感器、FIDO、摇杆、触摸板相关规则

脚本保留 USB 存储、鼠标和通用输入、声卡、MTD、Wi-Fi/BT、USB Gadget 和 ADB 相关规则。

tiny.config 分析

文件位置:

buildroot/configs/rockchip/base/tiny.config

tiny.config 由四部分组成:

#include "base/common.config"
BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config"
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="board/rockchip/common/tinyrootfs/busybox.fragment"
BR2_ROOTFS_POST_BUILD_SCRIPT+="board/rockchip/common/tinyrootfs/post-build-tinyrootfs.sh"
BR2_TARGET_ROOTFS_ROMFS=y

busybox-minimal.config 包含 331 个启用项和 685 个关闭项。它保留 Hush shell、文件操作、挂载、IPv4 网络、wget、udhcpc、ps 和 dmesg 等基础能力;默认关闭 tar、gzip、xz、bzip2、awk、vi、模块管理、top、IPv6、ntpd 和 telnetd 等功能。

tinyrootfs/busybox.fragment 会重新启用 awk、vi、模块管理、fdisk、lspci、lsusb、top、IPv6 和部分网络命令。因此 Tiny Rootfs 的最终 BusyBox 不是极限最小配置。

当前 RK3562 配置使用标准 BusyBox 配置和 base/busybox.fragment。切换到 tiny.config 仅影响 BusyBox applet,不能缩减 Mali、Weston、MPP、RKNN runtime、字体和多媒体库等主要空间占用。

tiny.config 同时启用 Tiny Rootfs 的 udev 后处理脚本和 ROMFS 镜像。该 udev 脚本会删除 USB 存储、MTD、声卡、DRM 和输入设备相关项,不适用于当前保留本地音视频、显示、外接存储、Wi-Fi/BT 和 ADB 的 RK3562 UBI/UBIFS 配置。

当前固件包组成

本次生成的 update.img 约为 190MiB。镜像与 parameter 分区的对应关系如下:

镜像实际大小分区分区大小余量
MiniLoaderAll约 0.52MiBLoader 保留区8MiB充足
uboot.img4MiBuboot4MiB0
misc.img48KiBmisc4MiB充足
boot.img17.28MiBboot32MiB14.72MiB
recovery.img32.12MiBrecovery34MiB1.88MiB
rootfs.ubi125.62MiBrootfs144MiB18.38MiB
oem.img7.38MiBoem8MiB0.62MiB
userdata.img2.25MiBuserdata14MiB11.75MiB
backup未写入backup8MiB保留

编译完整固件

重新选择板级 defconfig 后执行完整编译:

cd /home/user/workspace/RK3588

./build.sh rockchip_rk3562_evb2_ddr4_v10_spi_nand_defconfig
./build.sh all
08_QuickStart · 文档目录
上一篇RK3506_RK3576_RS485_Quick_Start下一篇RK3576_CAN_Quick_Start