【rk3506】分区管理及分区数据读取 📅 2026/7/13 16:13:23 前言本文是一篇关于Rockchip RK3506平台分区管理与调试的技术笔记。在嵌入式 Linux 系统开发中理解设备的存储分区布局是进行固件定制、系统升级和故障排查的基础。RK3506 作为一款广泛应用于物联网、智能硬件等领域的 SoC其分区表定义了 bootloader、内核、根文件系统等关键组件的存储位置与大小。目标读者本文主要面向嵌入式 Linux 开发者、系统移植工程师、固件开发人员以及对 Rockchip 平台底层存储结构感兴趣的爱好者。假设读者已具备基本的 Linux 命令行操作能力和嵌入式开发环境。本文将涵盖以下主要内容分区表解析展示并解读 RK3506 的典型分区表文件parameter-128M.txt说明各分区的作用与参数含义。查看 misc 分区内容介绍如何使用mtd工具读取 misc 分区并查看其头部信息用于验证分区状态或进行恢复操作。通过本文您将能够快速掌握 RK3506 存储分区的基本结构并为后续的固件修改、系统调试或自定义升级流程打下基础。分区表$catdevice/rockchip/.chips/rk3506/parameter-128M.txt FIRMWARE_VER:8.1 MACHINE_MODEL:RK3506 MACHINE_ID:007 MANUFACTURER: RK3506 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 3506 CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1TYPE: GPT GROW_ALIGN: 0 CMDLINE:mtdparts:0x000030000x00002000(uboot),0x000008000x00005000(misc),0x000028000x00005800(logo),0x000050000x00008000(boot),0x000200000x0000D000(rootfs),-0x0002D000(userdata:grow)uuid:rootfs614e0000-0000-4b53-8000-1d28000054a9分区布局示意图根据parameter-128M.txt中CMDLINE行的定义RK3506 的 128MB Flash 被划分为以下分区。下图展示了各分区的名称、起始偏移地址、大小以及它们在 Flash 中的相对位置关系偏移与大小均为十六进制单位为字节128MB Flash (0x00000000 - 0x08000000)uboot偏移: 0x00002000大小: 0x00003000 (12KB)misc偏移: 0x00005000大小: 0x00000800 (2KB)logo偏移: 0x00005800大小: 0x00002800 (10KB)boot偏移: 0x00008000大小: 0x00005000 (20KB)rootfs偏移: 0x0000D000大小: 0x00020000 (128KB)userdata偏移: 0x0002D000大小: 剩余空间 (grow)分区说明uboot存放 U-Boot 引导程序从 0x2000 开始占用 12KB。misc用于存储恢复、擦除计数等杂项信息紧接 uboot 之后占用 2KB。logo存放开机 logo 图像占用 10KB。boot存放内核镜像与设备树占用 20KB。rootfs根文件系统占用 128KB。userdata用户数据分区从 0x2D000 开始占用剩余所有 Flash 空间可动态增长。提示图中箭头仅表示分区在 Flash 中的先后顺序并非数据流。所有偏移地址均相对于 Flash 起始地址0x00000000计算。参数详解parameter-128M.txt文件中的参数定义了固件版本、硬件标识、分区表格式等关键信息。下表对CMDLINE行之前的各参数进行详细说明参数含义典型值/说明FIRMWARE_VER固件版本号例如8.1表示 U-Boot 或 Loader 的版本。MACHINE_MODEL机器型号例如RK3506标识 SoC 平台型号。MACHINE_ID机器 ID例如007用于区分同一平台的不同硬件变体。MANUFACTURER制造商信息例如RK3506通常与机器型号相同或为厂商名称。MAGIC分区表魔数0x5041524BASCII “PARK”用于校验分区表头部。ATAGATAG 地址0x00200800表示 ARM 标签列表ATAG在内存中的起始地址。MACHINE机器编号3506与 SoC 型号对应。CHECK_MASK校验掩码0x80用于控制分区表的校验方式如 CRC 校验。PWR_HLD电源保持配置0,0,A,0,1定义电源管理相关的 GPIO 或引脚状态具体含义依平台而定。TYPE分区表类型GPT表示使用 GUID 分区表格式另一种常见值为GPT或MBR。GROW_ALIGN增长对齐0表示分区大小是否按特定边界对齐0 通常表示不启用自动增长对齐。CMDLINE内核命令行参数定义 MTD 分区布局格式为mtdparts控制器:分区1,分区2,...每个分区由大小偏移(名称)描述。注意CMDLINE之后的行如uuid:rootfs...用于指定根文件系统的 UUID不属于本表解析范围。查看misc分区内容mtd read misc 0x6000000 0x78000 0x800 md.b 0x6000000 8命令详解1.mtd read misc 0x6000000 0x78000 0x800作用将 misc 分区的数据读取到内存中。参数含义misc要读取的 MTD 分区名称对应分区表中的misc分区。0x6000000目标内存地址RAM 地址读取的数据将被复制到此地址。0x78000源偏移地址Flash 偏移表示从 misc 分区起始位置开始的偏移量十六进制。0x800要读取的数据长度字节数十六进制 0x800 十进制 2048 字节2KB。步骤说明确认系统中存在/dev/mtdX设备节点通常misc分区对应/dev/mtd1或类似。执行该命令后系统会将 misc 分区从偏移 0x78000 开始的 2KB 数据复制到内存地址 0x6000000 处。该操作需要内核支持 MTD 子系统且当前用户对/dev/mtdX有读取权限。2.md.b 0x6000000 8作用以字节格式显示指定内存地址的内容。参数含义md.bmemory display字节格式命令常见于 U-Boot 或某些嵌入式 Linux 调试工具。0x6000000要显示的内存起始地址即上一条命令读取数据的目标地址。8要显示的字节数此处为 8 个字节。步骤说明执行上一条mtd read命令后misc 分区数据已加载到内存 0x6000000。本命令从该地址开始以十六进制字节格式显示前 8 个字节的内容。输出通常为一行或多行十六进制值每行显示 16 字节取决于工具此处只显示前 8 字节。输出示例与解析执行上述两条命令后可能会看到类似如下的输出# mtd read misc 0x6000000 0x78000 0x800# 该命令通常无输出仅执行读取操作# md.b 0x6000000 86000000: 01 00 00 00 00 00 00 00........输出解析显示格式为地址: 字节1 字节2 ... 字节8 ASCII 表示。示例输出中前 8 个字节为01 00 00 00 00 00 00 00。典型 misc 分区头部信息含义以 Rockchip 平台常见布局为例字节 00x01可能表示恢复标志位recovery flag。0x00正常启动模式。0x01恢复模式Recovery Mode指示系统下次启动应进入恢复模式如用于系统更新或工厂复位。0x02擦除用户数据Erase Userdata标志。0x03擦除所有数据Erase All标志。字节 1-7通常为保留字段全零或用于存储其他状态信息如启动计数、OTA 状态等。注意misc 分区的具体格式和标志位定义可能因平台、芯片型号或 U-Boot 版本而异。上述解析仅为常见示例实际开发中请参考对应平台的 U-Boot 源码或文档如drivers/misc/rockchip_misc.c等。操作总结mtd read将 Flash 中 misc 分区的数据读取到 RAM。md.b查看 RAM 中该数据的原始字节常用于检查恢复标志、启动计数等关键状态信息。通过解析这些字节可以判断设备当前的启动模式或执行特定恢复操作。实战操作步骤以下是从连接设备到执行命令、查看结果并退出的完整操作流程适用于在 RK3506 开发板或设备上进行实际操作。1. 连接设备与进入 U-Boot 命令行步骤硬件连接使用 USB 转串口线连接开发板的调试串口通常为 UART0TX/RX/GND到 PC。打开串口终端在 PC 上打开串口终端工具如minicom、picocom、PuTTY或screen。# 示例使用 picocomLinux/macOS$ picocom-b1500000/dev/ttyUSB0波特率通常为 1500000Rockchip 平台常见值具体请参考板级文档。数据位8停止位1校验位无重启设备并中断启动给设备上电或按复位键在启动初期U-Boot 启动倒计时期间快速按下键盘任意键如空格键中断自动启动进入 U-Boot 命令行。预期输出U-Boot2023.04(Jun152024-16:30:45 0800)Model: Rockchip RK3506 Evaluation Board DRAM:128MiB MMC: mmcff000000:0In: serial Out: serial Err: serial Net: No ethernet found. Hit any key to stop autoboot:3# 此时按下任意键# 进入 U-Boot 命令行提示符注意事项串口设备名如/dev/ttyUSB0可能因系统而异请使用ls /dev/ttyUSB*或dmesg | grep tty确认。如果无法中断启动请检查串口连接、波特率设置或确认 U-Boot 的bootdelay参数是否足够长。2. 确认 MTD 分区信息步骤在 U-Boot 命令行中先查看当前 MTD 分区布局确认misc分区的编号和偏移。mtd list预期输出示例List of MTD devices: * nand0 - type: NAND flash - block size: 0x20000 bytes - min I/O: 0x800 bytes - OOB size:64bytes - OOB available:16bytes - ECC strength:8bits - ECC step size:512bytes - bitflip threshold:0- 0x000000000000-0x000008000000:nand0- 0x000000000000-0x000000030000:uboot- 0x000000030000-0x000000038000:misc# 注意这里的偏移和大小- 0x000000038000-0x000000060000:logo- 0x000000060000-0x0000000b0000:boot- 0x0000000b0000-0x0000002b0000:rootfs- 0x0000002b0000-0x000008000000:userdata注意事项输出中的偏移地址如0x000000030000是绝对 Flash 地址而mtd read命令需要的是分区内偏移。根据分区表misc分区起始于 Flash 地址0x5000因此分区内偏移0x78000对应的绝对 Flash 地址为0x5000 0x78000 0x7D000。实际操作时请根据mtd list显示的misc分区起始地址计算分区内偏移。3. 执行 mtd read 命令读取 misc 分区步骤在 U-Boot 命令行中执行读取命令将 misc 分区从偏移0x78000开始的 2KB 数据读取到内存地址0x6000000。mtdreadmisc 0x6000000 0x78000 0x800预期输出# 成功执行时通常无输出或仅显示读取的字节数如 2048 bytes read2048bytesread注意事项确保内存地址0x6000000处于可用 RAM 区域且不会与其他关键数据冲突。该地址在 RK3506 的典型 RAM 布局中通常是安全的位于 SDRAM 低端。如果提示Device misc not found请使用mtd list确认分区名称是否正确有时可能是misc0x5000等形式。4. 使用 md.b 查看内存内容步骤读取成功后使用md.b命令查看内存0x6000000处的前 8 个字节。md.b 0x60000008预期输出6000000: 01 00 00 00 00 00 00 00........输出说明6000000:内存起始地址。01 00 00 00 00 00 00 00前 8 个字节的十六进制值。........对应字节的 ASCII 字符表示非打印字符显示为.。5. 解析结果与后续操作步骤根据输出解析 misc 分区头部信息字节 00x01表示设备处于恢复模式Recovery Mode下次启动可能会进入恢复系统如用于刷机或工厂复位。字节 1-70x00保留字段通常为 0。可选操作修改恢复标志如需清除恢复标志恢复正常启动可将字节 0 写为0x00然后写回 misc 分区。# 1. 修改内存中的值mw.b 0x6000000 0x001# 2. 写回 misc 分区谨慎操作mtdwritemisc 0x6000000 0x78000 0x800查看更多数据如需查看完整 2KB 数据可增加md.b的字节数。md.b 0x6000000 0x8006. 退出 U-Boot 并重启步骤完成调试后退出 U-Boot 命令行并继续启动系统。boot# 或 run bootcmd继续正常启动流程或reset# 重启设备注意事项如果修改了 misc 分区内容并写回请确保写入的数据格式正确否则可能导致设备无法正常启动。在生产环境中操作 misc 分区前建议先备份原始数据。不同版本的 U-Boot 命令语法可能略有差异请以实际环境为准。完整操作流程示例# 1. 连接串口中断启动进入 U-Boot# 2. 查看 MTD 分区mtd list...# 3. 读取 misc 分区mtdreadmisc 0x6000000 0x78000 0x8002048bytesread# 4. 查看前 8 字节md.b 0x600000086000000: 01 00 00 00 00 00 00 00........# 5. 解析恢复模式标志# 6. 退出并重启boot通过以上步骤您可以完整地在 RK3506 设备上执行 misc 分区的读取与查看操作并理解每一步的输出与含义。