现在不少拿到RK3588开发板的朋友,第一件事就是想把系统跑起来。但很多人的习惯是直接往eMMC里烧,Windows下用瑞芯微的RKDevTool,一把就过了,确实省事。可问题在于,eMMC烧录有几个场景很被动:你手上只有SD卡版本的固件、板子上的eMMC已经被玩坏了、或者你想先评估一个系统、不想动了板载存储里的原有环境。这种时候,用SD卡做启动盘就是最灵活的路子。瑞芯微官方出的SDDiskTool,就是专门干这个的,V1.69这个版本我用了很久,稳定,功能也够用。这篇就把整个流程拆开揉碎了讲,从原理到操作,再到排查,一篇走完。
1. 烧写之前的几个关键概念,先搞清楚
实操之前,我建议先把几个最基础的概念捋一遍。不然你照着步骤做完了,出了问题根本不知道去哪排查。
1.1 SD卡启动和eMMC烧录的本质区别
SD卡启动盘,本质上就是让RK3588的BootROM在上电后,按照预置的启动顺序去SD卡上找引导程序,然后加载系统。在这个场景里,SD卡承担的角色和eMMC几乎一模一样:存放引导loader、分区表、内核镜像和根文件系统。
区别在于,eMMC是焊在板子上的,用的是SDIO或者专用控制器接口,而SD卡是可插拔的,走的是SDIO接口。RK3588的BootROM启动顺序里,SD卡是排在比较靠前位置的,具体顺序一般是:eMMC、SD卡、USB等等(不同板子可能不一样,但这不重要,重要的是你要知道SD卡是合法的启动介质之一)。
好多人有个误解,以为用SDDiskTool制作启动盘,就是把一个完整的固件镜像直接"复制"到SD卡里。这个想法是错的。烧写SD卡的过程,是SDDiskTool读取镜像文件的分区表信息,然后把img文件里的每个分区内容,按偏移地址写入到SD卡上。如果只是复制粘贴,分区表不对、引导loader没在正确位置、系统根本起不来。
1.2 为什么选SDDiskTool V1.69,而不是其他工具
网上有人问能不能用Win32DiskImager之类的通用工具写镜像。可以,但有一个前提:你的镜像必须是完整镜像,而且烧写方式和硬件BootROM期望的方式匹配。大多数瑞芯微官方发布的SD卡升级固件,用通用工具也能写,但一旦遇到SD卡启动的BIF格式、或者需要临时量产工具的特殊加载方式,通用工具就不灵了。
SDDiskTool是瑞芯微官方的烧录工具,专门用于SD卡启动盘的制作。V1.69我在Win10和Win11上都试过,工作正常。相比早期版本,它在SD卡容量识别、大容量卡(64GB以上)格式化、以及部分新批次SD卡控制器的兼容性上都有改进。如果你手上有V1.69,直接用,没必要追新。这个工具本身不需要安装,解压就能用,非常符合硬件工程师的习惯。
1.3 你需要准备的镜像文件类型
用SDDiskTool烧写,镜像文件有两类,得先分清楚。
一类是完整升级镜像,通常叫update.img或者xxx_update.img。这类镜像包含完整的bootloader、参数分区、boot、rootfs等所有内容,烧写时SDDiskTool会按照镜像内部的布局整体写入,适合"我要整卡作为启动介质"的场景。
另一类是分区镜像,比如单独的boot.img、recovery.img、rootfs.img。如果你只想更新内核或者文件系统,可以只选一个分区镜像,SDDiskTool会把该镜像写到SD卡对应的分区位置。不过对于新手,不建议一上来就玩这种拆开烧的方式,用完整的update.img最稳妥,不容易出错。
提示:拿到固件包后,先确认有
update.img或者xxx_update.img。如果只有一大堆单分区img,虽然也能用,但你需要知道各个分区在SD卡上的偏移地址,这个可以去瑞芯微的parameter文件里查。新手直接找完整升级包更省心。
2. SDDiskTool V1.69操作界面的完整解读
工具打开后,界面不是特别复杂,但功能分区你得心里有数。我第一次用的时候,也是对着界面愣了几秒,后来摸清了几个关键区域,就好办了。
2.1 主界面布局与功能分区
SDDiskTool V1.69的主界面大致可以分为这么几块:
- 选择磁盘区:顶部会列出当前电脑上识别到的所有可移动磁盘,这里就会显示你的SD卡。注意看清容量和盘符,千万别选错,不然把你移动硬盘烧了就麻烦大了。
- SD卡引导固件选择区:这里有两个选项,一个是"烧写SD卡引导固件"模式,另一个是"量产SD卡"模式。制作启动盘,我们用的是前者。
- 升级固件配置区:最核心的区域,你要在这里勾选"SD卡引导固件",然后点"升级固件"按钮去选择img文件。
- SD容量调整区:这个很关键,后面细说。你可以选择SD卡容量在烧写后是否需要被调整。
- 烧写日志区:界面下方的大白框,记录所有操作日志,包括读写扇区数量、耗时等。出现错误时,这里的日志就是你排查的第一手资料。
2.2 三个烧写模式的区别和应用场景
SDDiskTool烧写模式不止一种,很多人把所有模式当成一回事,结果烧出来的卡要么起不来,要么不是自己想要的效果。
- SD卡引导固件模式:这种模式会把镜像写到SD卡上,同时保留或重建SD卡的引导能力。启动时SoC会尝试从SD卡的Boot区载入引导程序。制作"SD卡启动盘"选这个。
- 烧写SD卡模式:有些工具版本叫法不同,但意思基本是"普通烧录",把镜像按偏移写入SD卡,不额外处理引导标志。如果你的SD卡本身没有引导功能,这个模式下烧出来的卡大概率无法启动。
- 量产模式:用于流水线生产,支持一次性烧写多张SD卡,并且可以设置烧写后的校验策略。个人开发用不到。
我自己的经验是,不管是哪种模式,如果你只是拿着官方发布的完整固件,选"SD卡引导固件"模式,勾选"升级固件",然后点"开始"就行了。其他选项保持默认。
3. 保姆级实操:从零制作一张可启动的SD卡
接下来进入正题。我以手上这块RK3588开发板为例,完整走一遍制作流程。每一步我都会写清楚操作要点,以及为什么要这么做。
3.1 第一步:驱动安装与工具解压
先把SDDiskTool V1.69从官方渠道(通常是瑞芯微开发者社区或板卡厂商提供的资料包)下载下来。它是zip压缩包,解压到任意目录,注意路径里不要带中文。这算是个小细节,某些烧录工具对中文路径有兼容问题,SDDiskTool虽然没这么脆弱,但保守点不是坏事。
Windows系统下,把SD卡通过读卡器插到电脑上。大部分SD卡会被识别为一个普通U盘。这里有个非常值得注意的点:SDDiskTool行业里通常在Windows驱动层面需要安装Rockusb驱动,但SD卡烧录并不依赖那个。你只需要确保Windows正确识别SD卡即可。设备管理器里能看到对应的磁盘设备就行。
如果插上SD卡没有任何反应,先检查读卡器。USB3.0读卡器在烧写大镜像时速度优势明显,如果用的是那种十几块钱的普通读卡器,烧写时间会明显变长,而且可能中途出错。我个人建议用支持UHS-I的读卡器,稳定优先。
3.2 第二步:SD卡的准备与格式化
你可能会说,SDCardTool烧写的时候不是有格式化选项吗?为什么还要手动格式化?
因为SDDiskTool的格式化逻辑在某些情况下不一定能处理卡上已有的分区表残留。尤其是你之前用SD卡跑过树莓派系统或者Android系统,卡上有隐藏分区、保留分区或者GPT分区表,工具在重写MBR时偶尔会卡住或报错。手动格式化一次,可以确保卡处在一个干净状态。
操作流程:
- 打开Windows自带的磁盘管理(右键“此电脑” -> “管理” -> “磁盘管理”)。
- 找到你的SD卡,右键删除所有分区,让整张卡变成未分配状态。
- 右键新建简单卷,文件系统选FAT32,分配单元大小保持默认即可,卷标随意。
- 格式完之后,右键弹出SD卡,再重新插入一次,确保刷新。
有两点需要提一下:
- 如果你用的是64GB以上的SD卡,Windows的常规格式化界面默认不提供FAT32选项(因为微软对FAT32的容量限制比较奇葩)。没关系,用第三方工具如DiskGenius或者傲梅分区助手,强制格式化为FAT32即可。从实际测试来看,SDDiskTool对NTFS和exFAT的支持并不完美,FAT32是最稳妥的选择。
- 如果你只想快速开干,也可以跳过手动格式化,直接让SDDiskTool去处理。我之所以先格式化,纯粹是为了降低失败率,属于"多花一分钟,后面省一小时"的保守思路。
3.3 第三步:配置SDDiskTool烧写参数
双击运行SDDiskTool.exe,界面出来后,下面几步按顺序来:
在磁盘列表区域,确认你的SD卡已经被正确识别。看容量就能判断。如果你的SD卡是32GB的,界面上显示31.8GB左右,暗合正常。
选择"烧写SD卡引导固件"选项。
勾选"SD卡引导固件",然后点击右侧的"升级固件"按钮,选择你下载好的
update.img文件。检查"SD容量"设置。这里有一个隐藏坑:工具会按百分比给你几个档位,比如100%、50%等。如果你希望在SD卡启动后,剩余空间可以用来存放数据,这里的选择会影响分区表里用户数据分区的大小。一般选100%即可,整张卡都给系统使用。
点击"开始"按钮,工具开始烧写。
烧写过程中,日志区会滚动显示写入进度。不同镜像大小耗时不同,一个2GB左右的update.img,用USB3.0读卡器大概两三分钟,USB2.0可能要十分钟以上。期间千万不要拔卡,也不要打开其他重负载程序,以免系统IO卡死。
3.4 第四步:烧写完成的验证
烧写完成后,工具会提示"烧写成功"或类似字样。这时候别急着拔卡。右键SD卡盘符,选择弹出或安全移除硬件,等系统完全释放SD卡后,再拔出。
插卡启动前,我还建议做一次验证,虽然不强制,但能提前排除80%的问题:
打开Windows的磁盘管理,看SD卡的分区状态。正常情况下,SD卡会被识别为多个分区:一个几百MB的FAT分区(可能带"EBR"标志),一个Linux文件系统分区,还有一个大的数据分区。如果只看到一个孤零零的FAT32分区,那有可能烧写没完全生效。
3.5 第五步:插入RK3588开发板并启动
将烧好的SD卡插入开发板的SD卡槽。注意,开发板上的SD卡槽有大卡槽(TF卡也通过卡套插)和直接TF卡槽之分,插入时听到咔哒声才算到位。
上电之前,最好先确认一下板子的启动介质选择。有的开发板侧边有拨码开关或者按键,用于选择从SD卡还是eMMC启动。我们这块开发板默认会自动检测SD卡优先,也就是说,只要SD卡上有可启动的系统,它就会优先从SD卡跑起来。如果你的板子不是这种自动策略,先查一下原理图或者用户手册,拨到SD卡启动那一档。
连接串口线(如果你有)可以实时观察启动日志,没有串口就看HDMI输出。第一次启动会比正常开机慢一些,因为系统要解压包、初始化分区。稳定起见,等LED灯闪烁规律或者出现系统画面后,再判断成败。
4. 制作过程中的常见坑,我已经替你踩过一遍
这里整理几个我实际遇到过的、或者和不少开发者交流时收集到的典型问题,集中排查用。
4.1 烧写时报"磁盘写保护"或"扇区读写错误"
这个问题的出现场景概率最高的有几种:一是SD卡安装了写保护锁(就是卡侧面那个塑料小滑块),二是SD卡内部寄存器被锁死,三是读卡器兼容性问题。
- 如果是卡身上的物理锁,拨回去就行。
- 如果是内部寄存器锁死,这个就比较麻烦了。某些SD卡在异常断电、烧写中断后,内部控制器会进入一种保护状态,Windows里怎么格式化都提示成功,但一写入就报错。遇到这种情况,先用SD Card Formatter工具执行一次"Overwrite format"(覆盖格式化),大部分卡能救回来。救不回来的,直接换卡,别耽误时间。
- 读卡器质量问题也会触发写保护误报。换一个读卡器再试,成本最低。
另外,SDDiskTool对某些国产杂牌SD卡的兼容性并不好。不是说不能用,而是遇到问题概率大。能选的话,优先用三星、闪迪、铠侠这几个牌子的卡。
4.2 烧写成功,但开发板启动后卡在logo或黑屏
这个问题的排查思路要从启动流程入手。
RK3588的启动流程大致是:BootROM -> Loader -> 参数分区 -> 内核 -> 根文件系统。卡在logo,说明Loader和内核已经加载成功了,问题多半出在根文件系统挂载环节;直接黑屏,则可能是Loader本身没有正确加载。
常见原因和应对:
- 镜像与板卡硬件版本不匹配。这是最容易忽略的。同一个RK3588芯片,各家板卡的硬件设计不同,DDR初始化参数、外设配置、显示接口都可能不同。你用了A厂商的固件,烧到B厂商的板卡上,十有八九起不来。解决思路:用板卡厂商提供的固件,不要直接用通用公版固件。
- SD卡速度等级不达标。RK3588系统起来后,SD卡的读写IO频繁,如果用的是Class4这种老卡,或者杂牌扩容卡,数据读取错误率会飙升,引起内核崩溃或挂载失败。换一张Class10以上的卡,问题就好很多。
- 启动时需要按下某个组合键或跳线。少数开发板虽然支持SD卡启动,但需要手动切换到SD卡启动模式。查手册确认。
4.3 启动成功后,磁盘空间显示只有几百MB
这个也是很多人会遇到的典型问题。烧完系统后,进入系统发现可用空间特别小,df -h一看,根分区只有几百兆,而SD卡明明还有大量空间。
这和烧写时的"SD容量"设置有关。如果你在SDDiskTool里把容量调成了比如50%,那么系统分区表里给根文件系统分配的空间就只按50%的容量来算。想用整张卡,需要烧写时选100%,或者烧完以后自己用parted或者growpart扩展分区。
如果你已经烧好了,不想重新来一遍,也可以在系统里执行扩容:
# 查看当前分区情况 df -h # 用growpart扩展根文件系统所在分区,比如/dev/mmcblk0p7 sudo growpart /dev/mmcblk0 7 # 让文件系统扩展 sudo resize2fs /dev/mmcblk0p7不同固件的根文件系统分区号不一样,执行前先用lsblk看清楚了再操作。
4.4 SD卡烧写速度和失败率排查
烧写速度直接受读卡器影响。同一个镜像,USB2.0读卡器可能要十几分钟,换USB3.0的能压到几分钟。SDDiskTool烧写失败时的报错,很大一部分也出在低速读卡器上:写入超时、校验错误。你如果频繁烧写失败,优先排查读卡器,而不是怀疑镜像和工具。
注意:在烧写过程中,尽量关闭杀毒软件或暂时禁用实时防护。某些杀毒软件会把写入的bootloader代码识别为未知程序,实时扫描占用IO,严重的还会隔离文件,导致烧写出来的SD卡缺胳膊少腿。这问题我碰到过一次,排查了半天,最后发现是被隔离了。
5. 进阶技巧与日常经验
上述流程做到能启动系统,日常使用也就够了。但既然你用RK3588做开发,免不了要系统定制、要反复调试,这几种进阶玩法你可以留着备用。
5.1 如何快速在SD卡和eMMC系统之间切换
我的习惯是,系统的核心调试版本放SD卡,稳定的发布版本放eMMC。这样来回切换时,只需要拔插SD卡,不用重刷任何内部存储。上电时板子检测到SD卡就从SD卡启动,拔掉SD卡就回到eMMC里上一次烧好的系统。
交叉验证不同系统也特别方便。比如这个版本的内核在eMMC上表现正常,我想试试新内核的效果,就直接把新内核做成SD卡启动盘来跑,不影响eMMC里的正式环境。
5.2 自己打包一个SD卡镜像的常见路线
有些玩得深的读者,不满足于厂商给的成品镜像,想自己从头定制一个。
两个直接路线:
- 用瑞芯微的SDK编译产出镜像。在Linux主机上编译完,输出
update.img后,Windows下用SDDiskTool烧写到SD卡。这套流程最标准。 - 直接拷贝运行中的系统到SD卡。这个方法在开发调试阶段特别好用:先把eMMC上自己调好的一套系统完整打包,解包到SD卡上对应分区。需要注意的是,拷贝完成后要检查SD卡上的
/etc/fstab,确保挂载分区名和设备名是对的,否则开机会卡在等待设备超时。
5.3 一些好用的配套工具
- SD Card Formatter:SD联盟官方出的卡格式化工具,比Windows自带的格式化功能更强,也更能处理卡内部状态异常的情况。
- DiskGenius:想手动查看SD卡分区细节、备份分区表,这个工具效率很高。我一般用它在烧写前后做对比,确认分区结构和偏移量没有被打乱。
- Win32DiskImager:如果只是临时烧一个不带SD引导要求的单分区镜像,图形化操作比命令行方便。
我个人现在的固定搭配是:SD Card Formatter先清理卡,再进SDDiskTool烧写,最后插板子跑。三个环节各司其职,踩坑几率最小。
6. 最后再说几句掏心窝的话
瑞芯微这套工具链,说实话是国产芯片厂商里做得比较成熟的。SDDiskTool这个工具,看起来界面朴素,却是烧写任务里最可靠的一环。我见过不少人在这一步纠结太久,反而忽略了真正的核心问题,比如硬件版本不匹配、电源供电不足导致SD卡读写异常。
我自己用过一次杂牌SD卡,插在RK3588板子上,系统起来之后跑应用莫名其妙死机,看内核日志全是IO error。换了张三星EVO Plus之后,一切恢复正常。后来我仔细查过,那张杂牌卡表面标着"32GB",实际可用连16GB都不到,典型的扩容卡。这种事情上省下的几十块钱,最后耽误的时间远远不止这个数。
还有一点想提醒刚开始接触RK3588开发的朋友:SD卡启动盘并不是一个生产环境的方案。SD卡本身的读写寿命、速度上限,都比eMMC差一个档次。它的价值在于开发调试的灵活性,以及在不破坏现有系统的前提下试用新固件。等把系统调稳了,还是老老实实烧进eMMC再发布。这个取舍,开发早期就要想清楚。
如果你在制作SD卡启动盘的过程中遇到了其他没提到的报错,欢迎带着报错日志去瑞芯微官方开发者社区搜一圈,大部分问题都能找到对应解决方案。自己先看日志,判断是在引导阶段挂掉,还是在内核阶段挂掉,定位范围后查资料效率会高很多。