
1. 跨平台烧录工具选型与整体思路拆解搞嵌入式开发的人手里大概率都碰过瑞芯微Rockchip系列的主控板。从早期的RK3288到如今遍地开花的RK3568、RK3588这类芯片在平板、电视盒子、工控机、边缘计算网关里出镜率极高。板子拿到手第一件事就是烧录固件——而绕不开的工具就是RKDevTool。这玩意儿官方只给了Windows版本但实际开发环境里Linux和MacOS用户占了相当大的比例。我身边不少朋友为了烧录一个固件专门装虚拟机、借Windows电脑折腾得够呛。这篇内容就是把我自己在三个平台上反复折腾RKDevTool的经验整理出来讲清楚哪些操作是统一的、哪些地方有差异、怎么用最省事的方式完成烧录。先说清楚RKDevTool到底是个什么东西。它是瑞芯微官方提供的一套PC端烧录工具通过USB与设备端的Loader模式或Maskrom模式通信把固件分区镜像写入板载存储eMMC、NAND、SPI Flash等。核心功能包括固件升级、分区表烧录、单分区烧录、读取Flash信息、擦除Flash等。它依赖的是Rockchip自家的USB协议底层通过libusb与设备通信。Windows版本是官方编译好的可执行程序Linux和MacOS则需要自己编译或者找社区移植版本。为什么会有跨平台的需求原因很直接做Linux内核开发的人主力机就是Linux做iOS或前端的人手里只有MacBook。让他们为了烧录一个固件去开Windows虚拟机效率太低。而且烧录往往不是一次性的调试阶段可能要反复烧几十次每次切系统就是折磨。所以把RKDevTool跑在自己的主力系统上是一个很实际的需求。整体思路是这样的Windows平台直接用官方exe这是最省事的路径Linux平台可以通过编译源码或者使用社区维护的版本配合udev规则解决权限问题MacOS平台最麻烦需要处理USB驱动和编译依赖但也不是没有可行方案。三个平台的核心烧录逻辑完全一致——都是通过USB发送Rockchip协议指令差异主要在于驱动层、权限管理和工具入口。注意RKDevTool的版本要和设备的Loader版本匹配。我遇到过用旧版工具烧新固件进度条卡在“下载Boot失败”的情况换了对应版本就正常了。建议从官方SDK包里提取配套的RKDevTool而不是随便下载一个。另外要区分两个概念Loader模式和Maskrom模式。Loader模式是设备正常启动后进入的烧录模式依赖设备端已有的Loader程序Maskrom模式是设备强制进入的底层模式不依赖任何固件适合板子变砖后救砖。两种模式在三个平台上的进入方式基本一致按住Recovery键上电、短接Flash引脚等但识别和驱动安装有差异。2. Windows平台官方工具的标准玩法与隐藏细节2.1 驱动安装与设备识别Windows下用RKDevTool第一步永远是装驱动。官方提供的DriverAssitant驱动助手是必须装的它包含了Rockchip USB设备的驱动。安装过程很简单双击运行点“驱动安装”等提示成功就行。但这里有个坑Windows 10和Windows 11对未签名驱动的态度不一样。DriverAssitant里的驱动是签过名的正常情况没问题但如果你之前装过其他版本的Rockchip驱动可能会冲突。我遇到过一次设备管理器里能看到“Rockusb Device”但带黄色感叹号RKDevTool死活识别不到设备。解决办法是先在设备管理器里卸载所有Rockchip相关的设备勾选“删除驱动程序软件”然后重新运行DriverAssitant安装再插设备。顺序很重要——先装驱动再插设备让Windows自动匹配。设备进入Loader模式后RKDevTool的状态栏会显示“发现一个LOADER设备”进入Maskrom模式则显示“发现一个MASKROM设备”。如果显示“没有发现设备”先检查USB线是不是数据线有些线只能充电再检查驱动。2.2 固件烧录的完整流程Windows下的烧录流程是最标准的我把它拆成几个步骤打开RKDevTool确认设备已识别。状态栏显示“发现一个LOADER设备”或“发现一个MASKROM设备”。加载配置文件。点击“加载配置”按钮选择SDK包里提供的.cfg文件或者手动在表格里添加分区项。配置文件里定义了每个分区的名称、起始地址、镜像路径。勾选需要烧录的分区。如果只烧某个分区比如只更新kernel就只勾那一行全量烧录就全勾。点击“执行”。工具会先下载Loader如果是Maskrom模式然后依次烧录各个分区。进度条走完显示“成功”即可。这里有个细节地址列的数值是十六进制单位是扇区512字节。比如0x00000000是起始地址0x00008000表示偏移32KB。手动添加分区时地址不能重叠否则会报错。我一般直接用SDK里的cfg文件避免手算出错。实操心得烧录大固件比如几个GB的rootfs时USB 2.0接口会非常慢建议插在USB 3.0口上。另外烧录过程中不要碰设备尤其是Maskrom模式下USB松动会导致烧录中断严重的会让设备变砖。2.3 常见问题与排查Windows下最常见的问题就三个驱动识别不到、烧录中途失败、烧录后设备不启动。驱动问题前面说了重装驱动换USB口基本能解决。烧录中途失败先看日志窗口的报错信息。如果是“下载Boot失败”多半是Loader版本不匹配如果是“写Flash失败”可能是存储芯片有坏块或者供电不足。烧录后不启动检查分区表是否正确、镜像是否完整。还有一个隐藏坑Windows的USB选择性暂停。在电源管理里如果开启了“USB选择性暂停设置”系统可能会在烧录过程中挂起USB设备。建议在控制面板的电源选项里把这个功能关掉尤其是用笔记本烧录的时候。3. Linux平台编译、权限与命令行的组合拳3.1 获取与编译RKDevToolLinux下没有官方编译好的RKDevTool需要自己从源码编译。源码在瑞芯微的SDK里有也可以从社区的GitHub仓库找到。编译依赖几个库libusb-1.0、libudev、qt5如果编译GUI版本。以Ubuntu为例先装依赖sudo apt-get install libusb-1.0-0-dev libudev-dev qtbase5-dev qt5-qmake build-essential然后进入源码目录执行qmake和make。编译出来的可执行文件通常在bin/目录下。如果不想编译GUI也可以用命令行版本的upgrade_tool功能上差不多适合脚本化操作。注意不同SDK版本的源码结构可能不一样有的用qmake有的用cmake。编译前先看README别上来就make容易报一堆错。3.2 udev规则与权限配置Linux下最大的坑是权限。普通用户默认没有权限访问USB设备RKDevTool会提示“打开设备失败”。解决办法是添加udev规则。创建一个文件/etc/udev/rules.d/99-rockchip.rules内容如下SUBSYSTEMusb, ATTR{idVendor}2207, MODE0666, GROUPplugdev2207是Rockchip的USB厂商ID。保存后执行sudo udevadm control --reload-rules sudo udevadm trigger然后把当前用户加入plugdev组sudo usermod -aG plugdev $USER重新登录生效。这样普通用户就能直接访问设备了不用每次sudo。我试过不配udev规则直接sudo运行RKDevTool也能识别设备但GUI程序用sudo跑会有显示问题X11授权而且不安全。配好udev规则是一劳永逸的做法。3.3 命令行烧录与脚本化Linux平台最大的优势是可以脚本化。upgrade_tool支持命令行参数比如sudo upgrade_tool uf update.img # 全量升级 sudo upgrade_tool di -k kernel.img # 烧录单个分区 sudo upgrade_tool rd # 读取Flash信息这些命令可以写进shell脚本配合CI/CD做自动化烧录。我在产线测试环境里就是这么干的设备插入后自动识别、自动烧录、自动校验全程不需要人工干预。实操心得Linux下如果设备识别不稳定先检查dmesg输出看USB枚举是否正常。有时候是USB Hub供电不足换个直连口就好了。另外upgrade_tool的版本要和设备Loader匹配否则会报“不支持的命令”。3.4 常见问题速查问题现象可能原因解决方法打开设备失败权限不足配置udev规则加入plugdev组识别不到设备USB线或口问题换数据线换USB口检查dmesg烧录中途断开供电不足用带供电的Hub或直连主板编译报错依赖缺失按README装齐依赖库命令不识别版本不匹配换用SDK配套的upgrade_tool4. MacOS平台最折腾但可行的方案4.1 环境准备与依赖安装MacOS下跑RKDevTool是最麻烦的因为官方完全没有支持。但社区有人移植过核心思路是编译Linux版本的源码解决MacOS下的libusb兼容问题。首先需要安装Homebrew然后装依赖brew install libusb qt5Qt5是GUI版本需要的如果只用命令行版upgrade_tool可以不装Qt。编译过程和Linux类似但MacOS的clang编译器对某些Linux特有的头文件不兼容可能需要打补丁。社区有现成的补丁文件搜一下“rkdevtool macos patch”能找到。注意MacOS的System Integrity ProtectionSIP可能会阻止未签名的kext加载。如果用的是Apple SiliconM1/M2/M3的Mac还需要处理ARM架构的兼容问题。Intel Mac相对简单一些。4.2 USB驱动与设备识别MacOS下识别Rockchip设备不需要额外装驱动系统自带的USB驱动就能枚举。但问题是MacOS对USB设备的访问权限管理比较严格普通用户可能没有权限直接操作。解决办法是用sudo运行或者配置一个launchd守护进程来授权。我试过在MacBook ProIntel上直接跑编译好的upgrade_tool插上设备后system_profiler SPUSBDataType能看到“Rockusb Device”但工具提示“无法打开设备”。用sudo运行就正常了。所以MacOS下暂时只能接受sudo运行或者自己写一个授权脚本。4.3 烧录实操与性能表现MacOS下的烧录流程和Linux命令行版一致用upgrade_tool执行。实测下来烧录速度比Windows稍慢可能是USB驱动栈的差异。但稳定性还可以烧了几十次没出过中途断开的问题。有个细节MacOS下如果设备进入Maskrom模式有时候需要重新插拔一次才能识别。我猜测是USB枚举的时序问题不影响使用但第一次遇到会有点懵。实操心得MacOS下建议用命令行版GUI版在MacOS上的兼容性不稳定容易闪退。另外如果用的是USB-C转USB-A的转接头尽量选质量好的劣质转接头会导致识别不稳定。4.4 替代方案与虚拟机如果实在搞不定MacOS原生编译还有一个退路用虚拟机跑Linux然后在Linux里烧录。USB设备可以直通给虚拟机性能损失不大。我用Parallels Desktop试过把Rockchip设备直通给Ubuntu虚拟机upgrade_tool识别和烧录都正常。VMware Fusion和VirtualBox也支持USB直通配置稍微麻烦一点。这个方案的缺点是占资源但胜在稳定可靠。如果你只是偶尔烧录一次不想折腾编译虚拟机是最省心的选择。5. 三平台差异对比与统一操作逻辑5.1 核心差异对照表维度WindowsLinuxMacOS官方支持官方exe源码编译无驱动DriverAssitantudev规则系统自带权限管理员plugdev组sudoGUI官方GUI编译Qt版编译Qt版不稳定命令行无upgrade_toolupgrade_tool脚本化弱强中稳定性高高中上手难度低中高5.2 统一的操作逻辑不管哪个平台烧录的核心逻辑是一样的设备进入Loader或Maskrom模式 → PC端工具通过USB发送指令 → 下载LoaderMaskrom模式→ 烧录分区镜像 → 校验 → 重启。理解了这套逻辑换平台只是换了个工具入口底层原理不变。我一般建议新手从Windows入手因为官方工具最成熟遇到问题搜到的解决方案也最多。等熟悉了烧录流程再尝试Linux或MacOS。Linux适合需要自动化、批量烧录的场景MacOS适合主力机是Mac、不想开虚拟机的开发者。5.3 跨平台注意事项USB线材三个平台都对线材敏感劣质线会导致识别不稳定。建议用设备原装线或品牌数据线。供电烧录时设备功耗较大尤其是eMMC写入时。USB口供电不足会导致烧录失败必要时用带供电的Hub。版本匹配RKDevTool/upgrade_tool的版本要和设备Loader版本匹配不匹配会报各种奇怪的错误。固件完整性烧录前校验镜像的MD5避免因镜像损坏导致烧录后不启动。6. 常见问题与排查技巧实录6.1 设备识别类问题现象工具提示“没有发现设备”。排查思路检查USB线是否支持数据传输换一根线试试。检查设备是否真的进入了Loader/Maskrom模式看设备指示灯或串口输出。Windows下检查设备管理器是否有黄色感叹号Linux下检查lsusb是否能看到2207:xxxxMacOS下检查system_profiler SPUSBDataType。换USB口优先用主板直出的口避免前面板或Hub。现象设备识别到了但打开失败。排查思路Linux下检查udev规则和用户组。MacOS下尝试sudo运行。Windows下检查是否有其他程序占用了USB设备比如另一个烧录工具。6.2 烧录过程类问题现象烧录进度条卡住不动。排查思路看日志窗口的最后一行通常有错误提示。如果是“下载Boot失败”检查Loader版本。如果是“写Flash失败”检查存储芯片是否损坏或供电是否充足。尝试降低USB速度有些工具支持USB 2.0模式。现象烧录成功但设备不启动。排查思路检查分区表是否正确尤其是起始地址和分区大小。检查镜像是否完整重新下载或重新编译。检查设备是否真的重启了有些设备烧录后需要手动断电重启。6.3 独家避坑技巧备份原厂固件拿到新板子第一件事先用RKDevTool的“读取Flash”功能把原厂固件备份出来。万一烧坏了还能恢复。保留多个版本的RKDevTool不同版本的SDK可能配套不同版本的烧录工具建议按SDK版本分类存放用的时候直接拿对应的。用短USB线长线信号衰减大容易导致识别不稳定。我一般用30cm以内的线。烧录前关掉杀毒软件Windows下某些杀毒软件会拦截USB写入操作导致烧录失败。记录每次烧录的参数尤其是手动添加分区的时候把地址、大小、镜像路径记下来下次直接复用。7. 个人经验总结与后续扩展折腾完三个平台的烧录我最大的体会是Windows省心但不够灵活Linux灵活但需要折腾MacOS折腾但能用。如果你的工作流是批量烧录、自动化测试Linux是唯一的选择如果只是偶尔烧录、调试开发Windows最省事如果主力机是Mac且不想开虚拟机那就只能接受MacOS下的不完美。后续如果要做产线级烧录可以考虑用Linux upgrade_tool shell脚本搭建自动化烧录站配合治具和扫码枪实现“扫码-烧录-校验-贴标”一条龙。这个方案我在小批量产线上验证过效率比手动烧录高好几倍。另外RKDevTool的源码是开放的如果你有Qt开发经验可以自己改一改比如加个批量烧录的界面、加个日志自动保存功能。社区里已经有人做了类似的事情搜一搜能找到不少轮子。最后分享一个小技巧不管哪个平台烧录前先用md5sum校验一下镜像文件确认下载或编译的固件是完整的。我遇到过好几次因为镜像下载不完整导致烧录后设备不启动的情况白白浪费了半天时间排查。校验一下几秒钟的事能省很多麻烦。