【RK3506实战-03】Linux eMMC 实战全攻略

📅 2026/8/3 12:02:14 👁️ 阅读次数 📝 编程学习
【RK3506实战-03】Linux eMMC 实战全攻略

前言

RK3506 是工业级高性价比三核 A7 平台,广泛用于网关、工控、物联网终端。eMMC 作为板载默认存储,相比 SD 卡更稳定、速度更快、适合量产。本文从零开始,完整实战:环境搭建 → 内核 / DTS 配置 → eMMC 分区规划 → Windows/Linux 双平台烧录 → 启动验证 → 性能测试 → 常见问题 → 量产备份。全程可直接复现,适合作为 CSDN 高分实战博文。


一、开发环境准备

1.1 硬件平台

  • 主控:RK3506(3×A7 + M0)
  • 存储:板载 4GB/8GB/16GB eMMC 5.1
  • 调试:USB 转串口、双 USB 线、DC 电源

1.2 Ubuntu 依赖安装(20.04 / 22.04)

sudo apt update sudo apt install -y git repo gcc-arm-linux-gnueabihf \ device-tree-compiler libncurses5-dev bison flex \ libssl-dev bc lzop zip unzip p7zip-full

1.3 RK3506 SDK 说明

本文基于瑞芯微官方 / Firefly / 触觉智能 RK3506 Linux SDK 通用流程。

# 以 repo 方式为例 repo init -u git://xxx/rk3506/manifest.git -b linux repo sync -j8

二、内核 eMMC 驱动配置(核心)

2.1 内核 menuconfig 开启 MMC/eMMC

cd kernel make firefly_rk3506_linux_defconfig make menuconfig

开启如下配置:

Device Drivers ---> <*> MMC/SD/SDIO card support ---> <*> Rockchip SD/MMC Host Controller support <*> Rockchip SDIO eMMC 5.1 support [*] Enable HS200 [*] Enable HS400 [*] Support for eMMC HW Reset

2.2 设备树 DTS 配置(关键)

路径:arch/arm64/boot/dts/rockchip/rk3506-xxx.dts

&sdmmc { bus-width = <8>; non-removable; cap-mmc-highspeed; mmc-hs200-1_8v; mmc-hs400-1_8v; disable-wp; max-frequency = <200000000>; status = "okay"; };

要点:

  • bus-width = <8>:eMMC 必须 8bit
  • non-removable:板载存储不可热插拔
  • mmc-hs400-1_8v:开启高速模式

2.3 编译内核与设备树

./build.sh kernel ./build.sh dtbo

生成:

  • boot.img
  • kernel.img
  • resource.img
  • rootfs.ext4

三、eMMC 分区规划(parameter.txt)

RK3506 启动依赖 GPT 分区表,必须规范,否则无法启动。

典型分区表示例:

FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3506 MAGIC: 0x52414B50 TYPE: GPT CMDLINE: console=ttyS0,115200 root=/dev/mmcblk0p3 rw rootwait PARTITION_LIST: uboot 0x4000 0x2000 boot 0x10000 0x40000 rootfs 0x40000 0x0

分区说明:

表格

分区名起始 LBA大小用途
uboot0x40004MBSPL + U-Boot
boot0x1000064MBKernel + DTB
rootfs0x40000剩余根文件系统

四、Windows 下 eMMC 烧录(RKDevTool 实战)

4.1 工具准备

  • RKDevTool v3.32 及以上
  • DriverAssitant 驱动安装工具

4.2 进入烧录模式

方式 1:MaskRom 模式(全新 / 救砖)

  1. 断电
  2. 按住MaskRom 键
  3. 上电 → 松开按键
  4. RKDevTool 显示:发现一个 MASKROM 设备

方式 2:Loader 模式(已有 U-Boot)

  1. 按住 Recovery 键
  2. 上电 → 松开
  3. 显示 LOADER 设备

4.3 完整镜像烧录

  1. 切换到【升级固件】
  2. 选择update.img
  3. 存储选择:eMMC
  4. 点击【升级】

4.4 单独分区烧录(开发高效)

  1. 切换到【下载镜像】
  2. 添加镜像:
    • uboot → uboot.img
    • boot → boot.img
    • rootfs → rootfs.ext4
  3. 点击【执行】

五、Linux 命令行烧录(rkdeveloptool)

适合无 GUI 服务器、自动化烧录。

sudo apt install rkdeveloptool # 查看设备 rkdeveloptool ld # 烧录完整镜像 rkdeveloptool write-flash update.img # 单独烧录分区 rkdeveloptool write-partition boot boot.img rkdeveloptool write-partition rootfs rootfs.ext4 # 重启 rkdeveloptool reboot

六、eMMC 启动验证

6.1 启动拨码开关

将启动模式设置为eMMC 启动(一般为 ON)。

6.2 串口日志关键信息

mmc0: new HS400 MMC card at address 0001 mmcblk0: mmc0:0001 8G eMMC 7.3 GiB mmcblk0boot0: mmc0:0001 8G eMMC 4 MiB mmcblk0boot1: mmc0:0001 8G eMMC 4 MiB mmcblk0: p1 p2 p3

看到/dev/mmcblk0即识别成功。

6.3 查看分区

fdisk -l /dev/mmcblk0

6.4 eMMC 性能测试

# 写入测试 dd if=/dev/zero of=/test bs=1M count=1000 conv=fsync # 读取测试 dd if=/test of=/dev/null bs=1M count=1000

正常 HS400 模式:

  • 读:160MB/s~220MB/s
  • 写:60MB/s~90MB/s

6.5 查看 eMMC 寿命

mmc extcsd read /dev/mmcblk0 | grep LIFE

输出0x01表示健康。


七、常见问题与排错(高分文必备)

7.1 设备无法识别

  • 换 USB 2.0 接口
  • 重装驱动
  • 重新进入 MaskRom

7.2 烧录成功但无法启动

  • DTS 中sdmmc未使能
  • 分区表 LBA 冲突
  • 启动拨码未切到 eMMC
  • Kernel 未开启 MMC 支持

7.3 eMMC 读写速度慢

  • 未开启 HS200/HS400
  • DTSbus-width不是 8
  • eMMC 剩余空间不足

7.4 系统挂载只读

  • eMMC 坏块
  • 文件系统异常
  • 电源不稳定

八、量产实战:eMMC 备份与批量烧录

8.1 从开发板备份完整镜像

用 SD 卡启动系统后执行:

dd if=/dev/mmcblk0 of=/mnt/udisk/rk3506_emmc.img bs=4M conv=fsync

8.2 压缩镜像

xz -z rk3506_emmc.img

8.3 批量烧录方案

  1. SD 卡自动量产烧录
  2. RK 多口量产工具
  3. 工厂自动化夹具

九、总结

本文完整覆盖RK3506 Linux eMMC 全流程实战

  • 内核驱动配置
  • DTS 设备树适配
  • eMMC 分区规划
  • Windows/Linux 双平台烧录
  • 启动验证、性能测试、寿命查看
  • 量产备份与常见问题
后续预告
下一篇文章:【RK3506实战-04】RK3506 Linux U 盘调试全攻略:从识别到优化,嵌入式场景必看
原创不易,如果本文对你有帮助,欢迎点赞、收藏、关注三连!有任何问题都可以在评论区留言,我会及时回复。