该文章基于触觉智能Purple Pi OH2开发板讲解和调试
存储排障的关键是"识别 → 读写 → 容量/分区"三步:设备能不能被内核认到(mmc/ufs/mtd)、读写正不正常、容量和分区对不对。本板同时带 SD 卡(&sdmmc)与 &ufs 两种主流介质,本文按介质类型展开。
排障共性是"先看 dmesg 里识别没识别、再看读写、再看容量"。eMMC/SD 看 mmc 日志与 mmcblk*,UFS 看 ufshcd 日志,Flash 看 mtd 节点。
一、eMMC / SD:识别与读写错误
本板 SD 卡走 &sdmmc(pinctrl sdmmc0_clk/cmd/det/bus4),驱动是 Rockchip 的 rk_sdmmc_ops.c(CONFIG_MMC_DW_ROCKCHIP=y)。
| 现象 | 根因 | 处理 |
|---|---|---|
| 卡插上不识别 / 无 mmcblk | 检测脚(det)/供电/时钟/pinctrl 没配好 | dmesg | grep -i mmc;查 dts 的 det/bus/clk 与 vqmmc |
| 识别但读写报错/掉盘 | 卡坏/供电不稳/时序/IO 电压域 | 换卡验证;查 vqmmc-supply(IO 域,见 02.05);看 mmc 错误计数 |
| eMMC 容量不对/读一半错 | eMMC 版本/时序/校验 | 官方 Storage FAQ 有容量/时序专项 |
官方 FAQ_Storage_CN.pdf 覆盖 eMMC/SD 的高频问题(识别、时序、容量、写保护等),是首查清单。
二、UFS 排障
本板 UFS 走 &ufs,内核 ufshcd-pltfrm(CONFIG_SCSI_UFSHCD=y)。UFS 比 eMMC 复杂(多命令队列、电压更敏感),排障看 dmesg | grep -i ufs:
- 识别不了 :先看 ufshcd 初始化日志卡在哪(时钟/复位/供电/链路);
- 读写异常 :UFS 对电源(vcc/vccq)很敏感,供电异常会表现成偶发读写失败;
- 容量 :UFS 识别后看 lsblk 容量是否与标称一致,容量减半/异常常见于供电或时序。
三、SPI-NOR / SPI-NAND 与 MTD
SPI Flash(NOR/NAND)走 MTD 子系统:NOR 在 drivers/mtd/spi-nor/,NAND 在 drivers/mtd/nand/spi/。排障要点:
| 现象 | 根因 | 处理 |
|---|---|---|
| Flash 不识别 / 无 mtd 节点 | SPI 时钟/片选/读 ID 失败、颗粒不在支持列表 | dmesg | grep -i spi;查支持列表(官方 AVL) |
| 擦写失败/校验错 | 时序/供电/颗粒坏块 | 用 flashcp/nandtest 定位;查官方 Flash 开源方案文档 |
四、双存储 / 扩容
存储"不够用/挂不上"多与分区相关:rootfs 是 grow 分区吃剩余空间,想扩容先缩 userdata/oem;多存储(eMMC+SD、UFS+SATA)通过 /etc/fstab 或 PARTLABEL 挂载。官方 Dual_Storage_CN.pdf 讲双存储方案,扩容/分区见篇章一的分区排障。
存储排障按介质走:eMMC/SD 看 mmc 日志与 mmcblk(含 vqmmc IO 域)→ UFS 看 ufshcd 初始化(供电敏感)→ SPI Flash 看 mtd 与支持列表 → 容量/挂载问题回分区排障。官方 Storage FAQ 是首查清单。
五、RK3576 板端实测记录
以下在 Purple Pi OH2 / IDO EVB7609(RK3576)+ Debian Bookworm 上通过 adb 直连执行:
| 验证项 | 命令(adb shell …) | 实测结果 |
|---|---|---|
| eMMC 识别 | lsblk | mmcblk0 = 57.6G,8 个分区(rootfs=/、/userdata、/oem) |
| mmc 控制器 | ls /sys/class/mmc_host/ | mmc0 / mmc1 / mmc2 三个 |
| UFS | lsblk;ls /sys/bus/platform/devices/ | grep -i ufs | 仅供电调节器节点(vcc-ufs-s0 等),无 UFS 设备枚举(本板未贴 UFS) |
| MTD Flash | ls /dev/mtd* | 无(本板未接 SPI-NOR/NAND) |
注意:UFS/MTD 在本板是"dts 已配置但无器件"——遇到这类"配置对但没设备"的情况,先确认板上是否真的贴了对应介质,再查驱动日志。
官方文档依据:
docs/cn/Common/NVM/Rockchip_Developer_FAQ_Storage_CN.pdfdocs/cn/Common/NVM/Rockchip_Developer_Guide_Dual_Storage_CN.pdfdocs/cn/Common/NVM/Rockchip_Developer_Guide_UFS_CN.pdfdocs/cn/Common/NVM/Rockchip_Developer_Guide_Linux_Flash_Open_Source_Solution_CN.pdfdocs/cn/Common/MMC/Rockchip_Developer_Guide_SDMMC_SDIO_eMMC_CN.pdfdocs/cn/Common/TOOL/Rockchip_Introduction_Partition_CN.pdf
SDK 源码/配置依据:
kernel-6.1/drivers/mmc/host/rk_sdmmc_ops.cdrivers/ufs/host/ufshcd-pltfrm.cdrivers/mtd/spi-nor/drivers/mtd/nand/spi/kernel-6.1/arch/arm64/boot/dts/rockchip/ido-evb7609-v1a.dtsi(&sdmmc、&ufs 节点与 pinctrl)kernel-6.1/arch/arm64/configs/rockchip_linux_rk3576_defconfig(CONFIG_MMC_DW_ROCKCHIP=y、CONFIG_SCSI_UFSHCD=y)device/rockchip/.chips/rk3576/parameter.txt







