rk emmc/sd 引导分析

【RK3588】Android系统SD卡启动全攻略:从配置到实战 本文详细解析了RK3588平台实现Android系统SD卡启动的完整流程与核心原理。针对开发调试中频繁烧写eMMC效率低下的痛点,文章深入剖析了BootROM的启动顺序逻辑,并提供了修改Android SDK中PRODUCT_BOOT_DEVICE配置、重新编译系统镜像以及制作SD启动卡(支持Windows/Linux双平台)的实战步骤。重点强调了确保SD卡启动成功的关键前提是清空板载eMMC或SPI Flash中的可启动固件,并给出了常见问题的排查思路,为开发者提供了灵活高效的开发调试方案。 阅读详情

没找到 rk 官方的说明文档, 以下主要通过分析 u-boot, rkflashtool 以及写有引导的 emmc 得来. 文末提供 rkflash-boot 工具代码, 用于烧写引导, 在 rk3128, rk3288 上验证过.

1.  引导流程:

bootrom (CPU) ->
从 emmc 上加载 idblock0 ->
根据 idblock0 加载 emmc 上的 ddr 初始化代码->
根据 idblock0 加载u-boot代码

2.  存储结构:
idblock0 存储于第 64 个扇区, ddr 初始化代码和 u-boot 的扇区偏移量存储于 idblock0, ddr 初始化代码一般存储于 idblock3 后面. 如图


3.  idblock0 定义:

1
2
3
4
5
6
7
8
9
10
11
typedef   PACKED1  struct   _Sector0Info {    /* 总共512Bytes */
     UINT      fwSig;
     UCHAR     reserved[4];
     UINT      uiRc4Flag;   /* ddr and loader bin rc4 flaf - 1:  no rc4, 0: rc4 */
     USHORT    usBootCode1Offset;
     USHORT    usBootCode2Offset;
     UCHAR     reserved1[490];
     USHORT    usFlashDataSize;     /* 扇区为单位 */
     USHORT    usFlashBootSize;
     UCHAR     reserved2[2];
}PACKED2 Sector0Info;

(以上参考 u-boot/board/rockchip/common/rkloader/idblock.h)

其中 fwSig 为签名, 必须为  0x0ff0aa55
uiRc4Flag 为 ddr-init 和 u-boot 的加密标志, 一般为 0;
usBootCode1Offset 和 usBootCode2Offset 为 ddr-init 的扇区偏移地址, 一般为 4;
usFlashDataSize 为 ddr-init 占用的扇区数, 必须 4 对齐;
usFlashBootSize 为 ddr-init 和 u-boot 一共占用的扇区数, 必须 4 对齐.
u-boot 的偏移量为 usBootCode1Offset + usFlashDataSize.

idblock0 存储到 emmc/sd 前需要先经 rc4 加密, 密码为 7c4e0304550509072d2c7b38170d1711
可参考 u-boot 函数 P_RC4(), 该函数位于  u-boot/board/rockchip/common/platform/rc4_enc.c


4.  其它 idblock:
其它 idblock 定义可参考 u-boot/board/rockchip/common/rkloader/idblock.h
其中idblock3 存储了设备的序列号和 mac 地址.
其它 idblock 在 u-boot 阶段读取解析, 不需要 rc4 加密, 这些数据不写也可以正常引导至 u-boot.


5. usb 秒写 u-boot.bin:

    rkflash-boot 根据 rkflashtool 修改, 用于烧写 u-boot. 可秒写 u-boot.bin , 方便调试.

    代码:

    https://download.youkuaiyun.com/download/mxm12/10415566

    用法:

         rkflash-boot u-boot.bin [ddrinit] [usbplug]

    maskrom 方式时, 需要参数 ddrinit, usbplug 文件路径

    loader 方式时, 只需要传 u-boot.bin 路径


   为什么 upgrade_tool 下载引导很慢?

   因为 upgrade_tool 多写了 4 次引导 , 不只是 64 扇区, 还包括 64 + n* 1024 (n = 1~4) 号扇区.












 

OpenHarmony RK3568 SD卡刷eMMC单分区实战指南 在嵌入式系统开发中,启动介质与存储分区管理是底层工程的关键环节。eMMC作为主流存储载体,其烧录方式直接影响调试效率与量产稳定性。传统USB直刷依赖Loader模式,一旦引导损坏或分区表异常,设备将无法枚举,此时通过SD卡启动作业系统进行体外修复,成为救砖与批量化生产的常用方案。单分区烧录不同于整包刷写,它需要精确定位分区偏移、理解parameter表结构,并处理设备树匹配、存储超时等隐患。本文基于RK3568平台,梳理从SD启动卡制作到eMMC分区写入的完整链路,结合设备树选择、-110错误排查等高频问题 阅读详情

相关推荐

RK3562嵌入式Linux系统部署实战:从SD卡启动到eMMC固化

在嵌入式Linux开发中,系统部署是将编译好的内核、文件系统等镜像可靠写入目标硬件存储的关键环节,其核心在于理解存储设备的启动原理与烧录技术。系统启动通常依赖于Bootloader(如U-Boot)初始化硬件,并加载内核与根文件系统,而不同的存储介质(如SD卡、eMMC)在访问速度、可靠性和产品化程度上各有侧重。掌握系统部署技术,能显著提升开发调试效率,并保障量产产品的稳定性,是连接软件编译与硬件运行的重要桥梁。本文聚焦于RK3562这一主流嵌入式平台,通过对比SD启动卡与升级卡的应用差异,详解如何利用SD

weixin_33713503的博客 421

Linux分区记录

命令:cat /proc/mtd dev:     size              erasesize    name mtd0:   00007000   00010000   "vendor" mtd1:   00030000   00010000   "IDBlock" mtd2:   00600000   00010000   "kernel" mtd3:   0090000...

ZHI11235813的博客 919

RK3576 Android SD启动排错:3个常见失败场景与eMMC空片验证方法

本文深入解析RK3576平台Android SD启动的三大常见故障场景,包括eMMC非空片冲突、DTS配置错误及镜像工具链版本问题,并提供详细的eMMC空片验证方法和解决方案。通过实战案例和底层原理剖析,帮助开发者快速定位并解决SD启动失败问题,提升系统可靠性。

weixin_33725126的博客 494

(ROC-RK3568-PC) 裸机22_rk3568 uefi 编译

项目地址:https://github.com/jaredmcneill/quartz64_uefi 环境 win10+WSL

weixin_37556843的博客 3355

RK3568开发板Raspbian系统从SD卡迁移至eMMC存储完整指南

嵌入式Linux系统部署中,存储介质的选择直接影响系统稳定性和性能。SD卡因读写速度和可靠性限制,在频繁IO操作场景下可能成为瓶颈;而eMMC作为板载存储解决方案,具有更高带宽和耐用性。通过理解嵌入式设备启动流程和存储分区原理,开发者可以将系统从临时启动介质迁移到永久存储。本文以瑞芯微RK3568平台为例,详细解析使用rkdeveloptool工具链和rsync命令,将Raspbian系统从SD卡完整移植到eMMC的技术方案,涵盖U-Boot引导程序烧录、分区结构调整和文件系统克隆等关键步骤,为边缘计算节点

weixin_34279579的博客 333

RK3588开发板镜像烧写实战:从SD卡到eMMC,为YOLOv5s NPU部署铺路

嵌入式开发中,系统镜像是硬件与算法之间的桥梁。以RK3588芯片为代表的边缘计算平台,凭借6 TOPS NPU算力,成为YOLOv5s等目标检测模型端侧部署的理想载体。烧写系统看似基础,却决定后续环境搭建与模型推理的稳定性。原理上,开发板支持SD卡与eMMC两种引导介质,前者适合快速验证,后者利于正式部署;工具链涵盖balenaEtcher与瑞芯微RKDevTool。技术价值在于通过合理的分区和驱动准备,释放NPU的完整性能。在智能摄像头、边缘计算盒子等场景中,可靠的镜像烧写是模型实时推理的前提。本文基于R

weixin_33841503的博客 911

庖丁解牛-Resnet50 深度剖析,细致讲解,深入理解

庖丁解牛-ResNet-50深度剖析 请看50-layer这一列 是本文介绍的层的结构: resnet-50 有四组大block, 每组分别是3, 4, 6, 3个小block, 每个小block里面有三个卷积, 另外这个网络的最开始有一个单独的卷积层, 因此是:(3+4+6+3)*3+1=49 最后又一个全连接层,因而一共50层 如下图,每个大block里面的 第一个都是IN !==OUT情况,左侧支线,.........

计算机视觉 8万+

RK3568开发板OpenHarmony刷机实战:从SD卡启动到eMMC烧录全流程

在嵌入式系统开发中,启动引导与固件烧录是绕不开的基础环节。BootROM从固定扇区加载U-Boot,U-Boot再引导内核与根文件系统,这一链路决定了设备能否从外部存储介质正常启动。对于RK3568平台而言,OpenHarmony系统移植与验证常需在SD卡快速迭代与eMMC产品化落地之间切换。理解SD卡启动的偏移地址、eMMC烧录的Loader模式、单分区布局的简化设计,以及设备树选型对DDR初始化和外设探测的影响,是降低刷机门槛的关键。该流程适用于开发板固件验证、系统移植调试及量产前的镜像确认场景。文章围

weixin_34234829的博客 353

Rockchip RK3399平台EMMC驱动能力修改方法

RK3399 EMMC的驱动能力可以通过如下代码修改: 上面代码中的可以根据实际需求改为下面的其他阻抗值: 驱动阻抗越小驱动能力越大

weixin_43245753的博客 2417

OpenHarmony刷机全流程详解:RK3568从SD卡启动到eMMC烧录实战

在嵌入式开发中,刷机是连接硬件与系统的关键环节,本质是操作启动链路:从BootROM加载引导程序,到内核接管,再到根文件系统挂载。对于RK3568这类Rockchip平台,OpenHarmony的镜像布局与安卓、Linux发行版不同,其多分区结构常让开发者踩坑,而单分区方案将系统打包为统一镜像,简化烧录过程,适合SD卡调试。理解启动原理后,开发者可灵活选择SD卡刷机或eMMC烧录:前者便于试错与版本切换,后者适合固化交付。本文结合实战经验,从工具选择、驱动安装、设备树匹配到常见报错排查,系统梳理了一条可复用

weixin_31476015的博客 230

RK3562嵌入式Linux系统固化:从SD卡启动到eMMC部署全流程详解

在嵌入式系统开发中,系统部署与固化是产品化过程中的关键环节。其核心原理在于理解计算机的启动流程:从Boot ROM加载引导程序(如U-Boot),再由引导程序加载Linux内核与设备树,最终挂载根文件系统。这一过程的技术价值在于将灵活的开发环境(如SD卡)转化为稳定可靠的产品运行环境(如eMMC),从而提升系统的抗干扰能力与长期运行稳定性。在嵌入式Linux、工业控制、边缘计算等应用场景中,系统固化能有效避免因存储介质接触不良或意外移除导致的系统故障。本文以瑞芯微RK3562平台为例,深入解析如何通过制作启

weixin_26969269的博客 589

Rockchip | Rockusb工具

​ 1 介绍 Rockusb是Rockchip提供的一个供应商特定的USB类工具,用于Rockchip SoCs的固件下载。 2 进入到Rockusb模式 对于Rockchip SoCs,有以下几点可进入到Rockusb模式。 maskrom 模式, 片上SoC无固件, 目标板子会运行maskrom rockusb驱动程序。 usbplug 模式。 miniLoader rockusb 模式, 目标板子运行miniloader rockusb驱动程序。 uboot rockusb模式。 2.1 Mask

Systemcall名屋 7116

Rockchip RK3588 - uboot引导方式介绍

early_init_dt_scan_chosen用于扫描chosen节点,并把bootargs属性值拷贝到boot_command_line中,如果内核定义了CONFIG_CMDLINE这个宏,则把配置的命令行参数也拷贝到boot_command_line;其中uboot传递的bootargs参数优先级高于设备树中定义的bootargs,如果是uboot传递的bootargs,在内核启动阶段就会调用fdt_chosen函数将环境变量中的bootargs参数写进dtb数据中;

weixin_48721556的博客 2953

RK3562单板机系统使用与开发手册:基础操作、升级部署与工具链配置(一)

本文为创龙科技RK3562 单板机 Linux 系统使用指南,核心包含系统配置、升级部署与组件安装三大模块。内容涉及静态 IP 配置、恢复出厂设置、OTA/U 盘升级,以及 Python、Docker、OpenCV 等常用组件的安装方法。文档适配 Windows 与 Ubuntu 开发环境,步骤规范、实操性强。创龙科技通过标准化流程,帮助开发者快速掌握系统运维与功能拓展技能,适用于嵌入式开发与工业控制场景。

创龙,嵌入式一体化解决方案商 460

RK3588开发板SD卡唯一启动项配置指南:BootROM、U-Boot与eMMC/SPI NOR处理

在嵌入式开发中,RK3588平台的启动流程涉及BootROM、SPI NOR、eMMC与SD卡等多个存储介质的优先级竞争。理解启动链路与U-Boot环境变量的交互机制,是控制开发板引导行为的核心前提。BootROM按固化的顺序探测启动设备,默认情况下SPI NOR和eMMC会优先于SD卡被加载,这导致开发者难以用SD卡覆盖系统进行快速迭代。通过硬件跳线强制BootROM选择SD卡、修改U-Boot环境变量固化boot_targets,或在MaskROM模式下擦除eMMC与SPI NOR数据,均能实现SD卡作

weixin_34021089的博客 325

rk3568 SD卡启动

SD卡启动系统,它可以让rk3568在没有硬盘或其他存储设备的情况下启动和运行操作系统。这使得rk3568变得与树梅派一样灵活切换系统,与此同时进行故障排查和修复,而不需要拆卸设备或者使用专业的烧录工具。SD卡启动还可以方便地备份和还原系统,以及进行系统升级和维护。

weixin_35723192的博客 3816

【RK3399】RK3399启动引导流程分析

主控芯片是,big.LITTLE大小核架构,双Cortex-A72大核(up to 2.0GHz) + 四Cortex-A53小核结构(up to 1.5GHz);Cortex-A72处理器是Armv8-A架构下的一款高性能、低功耗的处理器。主要特性HDR10/HLGUSB Type-C详细参数一般来说,SoC厂家都会做一个ROM在SoC的内部,这个ROM很小,里面固化了上电启动的代码(一经固化,永不能改,是芯片做的时候,做进去的);

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 4483

RK3128烧写教程

最全RK3128烧写工具+驱动+教程

下一篇: rk u-boot 优化多核 CPU 内存读写
mxm12
博客等级 码龄15年 18粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值