RKDevTool跨平台烧录实战:Windows、Linux与MacOS全攻略
2026/9/19 11:21:33 网站建设 项目流程

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下的烧录流程是最标准的,我把它拆成几个步骤:

  1. 打开RKDevTool,确认设备已识别。状态栏显示“发现一个LOADER设备”或“发现一个MASKROM设备”。
  2. 加载配置文件。点击“加载配置”按钮,选择SDK包里提供的.cfg文件,或者手动在表格里添加分区项。配置文件里定义了每个分区的名称、起始地址、镜像路径。
  3. 勾选需要烧录的分区。如果只烧某个分区(比如只更新kernel),就只勾那一行;全量烧录就全勾。
  4. 点击“执行”。工具会先下载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 获取与编译RKDevTool

Linux下没有官方编译好的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

然后进入源码目录,执行qmakemake。编译出来的可执行文件通常在bin/目录下。如果不想编译GUI,也可以用命令行版本的upgrade_tool,功能上差不多,适合脚本化操作。

注意:不同SDK版本的源码结构可能不一样,有的用qmake,有的用cmake。编译前先看README,别上来就make,容易报一堆错。

3.2 udev规则与权限配置

Linux下最大的坑是权限。普通用户默认没有权限访问USB设备,RKDevTool会提示“打开设备失败”。解决办法是添加udev规则。创建一个文件/etc/udev/rules.d/99-rockchip.rules,内容如下:

SUBSYSTEM=="usb", ATTR{idVendor}=="2207", MODE="0666", GROUP="plugdev"

2207是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_tool

4. MacOS平台:最折腾但可行的方案

4.1 环境准备与依赖安装

MacOS下跑RKDevTool是最麻烦的,因为官方完全没有支持。但社区有人移植过,核心思路是编译Linux版本的源码,解决MacOS下的libusb兼容问题。首先需要安装Homebrew,然后装依赖:

brew install libusb qt@5

Qt5是GUI版本需要的,如果只用命令行版upgrade_tool,可以不装Qt。编译过程和Linux类似,但MacOS的clang编译器对某些Linux特有的头文件不兼容,可能需要打补丁。社区有现成的补丁文件,搜一下“rkdevtool macos patch”能找到。

注意:MacOS的System Integrity Protection(SIP)可能会阻止未签名的kext加载。如果用的是Apple Silicon(M1/M2/M3)的Mac,还需要处理ARM架构的兼容问题。Intel Mac相对简单一些。

4.2 USB驱动与设备识别

MacOS下识别Rockchip设备,不需要额外装驱动,系统自带的USB驱动就能枚举。但问题是,MacOS对USB设备的访问权限管理比较严格,普通用户可能没有权限直接操作。解决办法是用sudo运行,或者配置一个launchd守护进程来授权。

我试过在MacBook Pro(Intel)上直接跑编译好的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组sudo
GUI官方GUI编译Qt版编译Qt版(不稳定)
命令行upgrade_toolupgrade_tool
脚本化
稳定性
上手难度

5.2 统一的操作逻辑

不管哪个平台,烧录的核心逻辑是一样的:设备进入Loader或Maskrom模式 → PC端工具通过USB发送指令 → 下载Loader(Maskrom模式)→ 烧录分区镜像 → 校验 → 重启。理解了这套逻辑,换平台只是换了个工具入口,底层原理不变。

我一般建议新手从Windows入手,因为官方工具最成熟,遇到问题搜到的解决方案也最多。等熟悉了烧录流程,再尝试Linux或MacOS。Linux适合需要自动化、批量烧录的场景;MacOS适合主力机是Mac、不想开虚拟机的开发者。

5.3 跨平台注意事项

  • USB线材:三个平台都对线材敏感,劣质线会导致识别不稳定。建议用设备原装线或品牌数据线。
  • 供电:烧录时设备功耗较大,尤其是eMMC写入时。USB口供电不足会导致烧录失败,必要时用带供电的Hub。
  • 版本匹配:RKDevTool/upgrade_tool的版本要和设备Loader版本匹配,不匹配会报各种奇怪的错误。
  • 固件完整性:烧录前校验镜像的MD5,避免因镜像损坏导致烧录后不启动。

6. 常见问题与排查技巧实录

6.1 设备识别类问题

现象:工具提示“没有发现设备”。排查思路

  1. 检查USB线是否支持数据传输(换一根线试试)。
  2. 检查设备是否真的进入了Loader/Maskrom模式(看设备指示灯或串口输出)。
  3. Windows下检查设备管理器是否有黄色感叹号;Linux下检查lsusb是否能看到2207:xxxx;MacOS下检查system_profiler SPUSBDataType
  4. 换USB口,优先用主板直出的口,避免前面板或Hub。

现象:设备识别到了,但打开失败。排查思路

  1. Linux下检查udev规则和用户组。
  2. MacOS下尝试sudo运行。
  3. Windows下检查是否有其他程序占用了USB设备(比如另一个烧录工具)。

6.2 烧录过程类问题

现象:烧录进度条卡住不动。排查思路

  1. 看日志窗口的最后一行,通常有错误提示。
  2. 如果是“下载Boot失败”,检查Loader版本。
  3. 如果是“写Flash失败”,检查存储芯片是否损坏或供电是否充足。
  4. 尝试降低USB速度(有些工具支持USB 2.0模式)。

现象:烧录成功但设备不启动。排查思路

  1. 检查分区表是否正确,尤其是起始地址和分区大小。
  2. 检查镜像是否完整,重新下载或重新编译。
  3. 检查设备是否真的重启了(有些设备烧录后需要手动断电重启)。

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校验一下镜像文件,确认下载或编译的固件是完整的。我遇到过好几次因为镜像下载不完整导致烧录后设备不启动的情况,白白浪费了半天时间排查。校验一下,几秒钟的事,能省很多麻烦。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询