很多玩RK3588开发板的朋友,都有过这种经历:板子出厂预装的是Windows on ARM或者某个精简版安卓,用起来总觉得别扭。特别是一些做嵌入式Linux开发的,拿到板子第一件事就想把它重装成Ubuntu环境,但真到了要烧录系统这一步,各种驱动、工具、模式切换的问题能把人绕晕。这篇文章就是把我自己折腾RK3588从Windows重装到Linux的完整过程记录下来,包括底层的原理、每一步的操作细节,还有我踩过的一些坑,希望能帮后来的人省点时间。
这篇文章适合谁看?两类人。一类是刚入手RK3588开发板、对系统烧录还不太熟的新手,按着步骤做基本能顺利跑起来;另一类是已经在Linux下做嵌入式开发、想快速切换系统环境的老手,可以直接跳到烧录配置和AB分区处理的部分看。
1. 内容整体设计与思路拆解
1.1 为什么RK3588重装系统不能只靠拷贝
RK3588这个芯片是瑞芯微的旗舰级SoC,CPU是4核A76加4核A55的big.LITTLE架构,GPU是Mail-G610,还集成了6TOPS算力的NPU。这种级别的芯片,系统烧录和普通单片机完全不是一个思路。单片机烧个固件用串口或者JTAG就行,但RK3588跑的是一整套完整的操作系统,系统固件里包含了U-Boot引导、内核、设备树、根文件系统、还有各种Trust组件(ATF、TEE等),这些内容分布在eMMC或NVMe存储的不同分区里。
所以重装系统的核心,不是“拷贝文件”,而是“分区写入”。你要用一个烧录工具,把编译好的镜像文件按照地址表写入到存储介质的指定位置。Windows和Linux在这些环节上的差异,恰恰是很多人第一次重装时卡住的地方。
1.2 Windows和Linux烧录方案的选型考量
在动手之前,你要先想清楚自己最后打算用哪套工具链。瑞芯微官方提供的烧录工具主要有两个:Windows下的RKDevTool(也就是平时说的瑞芯微开发工具),以及Linux下的upgrade_tool(命令行工具)。如果你人就在Windows环境里,那直接用RKDevTool操作最方便;但如果你已经把开发环境切到了Ubuntu或Debian这类Linux系统,那就得用upgrade_tool。
我这次的情况比较特殊,板子拿到手时预装的是Windows系统,但我最终的目标是跑一个定制的Ubuntu 26系统,所以重装路线是“先在Windows下用RKDevTool擦除并写入新版固件,之后再用Linux下的upgrade_tool做后续开发调试”。如果你也是这种跨平台操作,我的建议是:第一次烧录尽量在Windows下完成,因为RKDevTool的界面更直观,驱动问题也更好排查,等系统真正跑起来了,再切换到Linux做日常开发。
注意:无论用哪个工具,烧录之前都要备份好板子上的重要数据。系统重装会擦除整个存储,这个操作不可逆。
2. 核心细节解析与实操要点
2.1 驱动安装:低格工具链的第一个拦路虎
我第一次接触RK3588烧录时,遇到的第一问题不是镜像不够好,而是Windows根本识别不到设备。板子通过USB连接到电脑后,设备管理器里出现的不是预期的“Rockusb Device”,而是一个带黄色感叹号的未知设备。这种情况十有八九是驱动没有正确安装。
RK3588的驱动分两种场景:一种是正常启动后的ADB驱动,用于连接Android或Linux系统调试;另一种是烧录模式下的Rockusb驱动,只有板子进入Loader或Maskrom模式时才会出现。烧录必须用Rockusb驱动,驱动文件在瑞芯微的DriverAssitant工具包里,安装时记得用管理员权限运行,安装完最好重启一次电脑,让驱动真正生效。
这里有个容易混淆的点:很多人第一次烧录时,板子其实是在正常系统里,插USB线后电脑识别到的设备名会让人误以为驱动装好了,但一旦进入Loader模式,设备会重新枚举一次,如果Rockusb驱动没装,照样无法烧录。所以正确顺序是:先装DriverAssitant驱动,再让板子进入烧录模式,最后连接USB观察设备状态。
2.2 烧录模式:Loader、Maskrom和Recovery的差别
RK3588进入烧录模式有三种常见途径,分别是Loader模式、Maskrom模式和Recovery模式。我实际操作下来,它们的适用场景完全不同。
Loader模式是正常开发中最常用的。板子启动后,U-Boot会检测到USB烧录请求,主动进入烧录状态。这种模式下你可以正常读写所有可分区,擦除和写入都不在话下。进入方法一般是在开机阶段按住BOOT键,或者通过adb命令执行reboot loader。
Maskrom模式则是救砖用的。当板子里的Bootloader损坏、Loader模式无法启动时,芯片内部的ROM代码会跑起来,等待USB烧录。进入Maskrom的方法是:拔掉电源和USB,按住设备上的Maskrom键(或者RECOVERY键加BOOT键),先插USB线,再上电,此时设备在设备管理器里会显示为“Rockusb Maskrom”。这种模式下的操作要特别小心,因为如果盲目擦除分区,可能会出现无法引导的情况,但反过来,这也是唯一能救回变砖板子的路径。
Recovery模式一般是系统自带的一个应急系统,虽然在关闭签名验证时可以刷机,但在Windows和Linux烧录流程中用得相对少。我的习惯是开发时优先用Loader模式,只有Loader坏了才动Maskrom。
3. 实操过程与核心环节实现
3.1 准备工作:确认固件、USB线和供电
正式烧录前,有几样东西一定要确认好,否则中途出问题会非常头疼。
固件方面,你要是用官方Linux SDK编译出来的镜像,通常会生成update.img或者拆开的各个分区镜像(uboot.img、boot.img、rootfs.img这类)。我这次用的是基于Ubuntu 26定制的固件,这个镜像是从合作方拿到的成品update.img,里面已经打包好了所有分区内容。如果是自己编译出来的镜像,烧录前一定要核对Config文件里的分区地址表,千万别用错。
USB线这块,看上去是小事,但坑特别大。RK3588的烧录口一般是一个Type-C口,有些板子也带USB 3.0 Host口。我之前试过用一根普通的数据线,结果插入后设备一直在枚举循环,后来换了根带屏蔽层的USB 3.0 Type-C线才稳定。别用那种只能充电的线,一定要能传输数据的,否则烧录到一半会断连。
供电也很关键。RK3588的功耗比较大,烧录过程中如果供电不足,会出现设备反复掉线的问题。我的建议是使用板卡自带的电源适配器,不要只用USB线供电,尤其是当你正在烧录系统时,电压跳动很容易把eMMC写坏。
3.2 分区概念与烧录地址的匹配
烧录不是一锤子买卖,你要理解分区地址表的含义。瑞芯微的固件默认会划分出很多个分区:uboot分区存放U-Boot引导程序,misc分区用于存放启动标志,boot分区存放内核和设备树,rootfs分区是根文件系统,还有recovery分区、backup分区等等。
官方固件一般提供了一个parameter.txt文件,里面就是十分明确的分区地址表,比如:
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00040000@0x00038000(rootfs),0x00040000@0x00078000(userdata),-@0x000B8000(media)这串参数的意思是,每个分区从哪里开始、占多大空间。在Windows的RKDevTool里,你会看到一个表格,右键点击每个分区条目,可以设置对应的镜像文件。假如你不小心把boot.img写进了rootfs分区,那大概率开机后系统起不来。
我实际操作时,直接选择“按地址烧写”,工具会自动读取update.img里的分区信息。但如果你是单独烧某个分区(比如只更新内核),你要手动选择正确的镜像文件和地址。我习惯在烧录前用十六进制工具或文本编辑器打开parameter.txt,和RKDevTool里的分区列表逐一对比,确认完全一致再点执行。
3.3 Windows下使用RKDevTool烧录
下面这段是我在Windows下烧录的完整操作流程,照着做基本不会错。
第一步,安装驱动。下载驱动助手DriverAssitant,解压后右键“以管理员身份运行”,安装完成后重启电脑。
第二步,打开RKDevTool。这个工具是免安装的,解压后直接运行RKDevTool.exe。注意,如果你用的是Windows 10以上系统,第一次打开时可能会有安全提示,选择“仍要运行”即可。
第三步,让板子进入Loader模式。先断开USB线,按住板子上的BOOT键不松手,然后插入USB线连接到电脑。此时设备管理器里应该会出现“Rockusb Device”或者“Rockusb Maskrom”。
第四步,在RKDevTool主界面中,确认识别到设备。如果界面右下角显示“发现一个设备”,就说明连接正常。然后在“升级固件”页面点击“固件”按钮,选择你的update.img文件。
第五步,点击“升级”按钮,工具会自动擦除旧系统并烧写新固件。这个过程一般需要3到5分钟,中间不能断电、不能断开USB线。
第六步,烧录完成后,设备会自动重启进入新系统。如果没重启,你手动断电后再上电即可。
我在这个环节遇到的一个典型情况是:点击“升级”后,工具提示“升级失败:下载Boot失败”,而且反复重试都一样。后来发现是BOOT键没按稳,板子实际上在正常系统启动后又插入了USB,导致设备进入的是ADB模式而不是Loader模式。重新按住BOOT键,再按一次升级,问题就解决了。
3.4 Linux下使用upgrade_tool烧录
等系统换成Linux之后,日常重新刷系统就离不开upgrade_tool了。它本质上和RKDevTool干的是同一件事,只是换成了命令行交互。
安装upgrade_tool之前,要先确保你有libusb相关的运行库。在Ubuntu下直接执行:
sudo apt-get install libusb-1.0-0-dev然后在瑞芯微提供的Linux SDK包里找到upgrade_tool,一般是个可执行文件。手动把它复制到/usr/local/bin目录下,顺便加上可执行权限:
sudo cp upgrade_tool /usr/local/bin/ sudo chmod +x /usr/local/bin/upgrade_tool接下来,需要配置udev规则,让普通用户也能访问USB设备。创建/etc/udev/rules.d/70-rk3588.rules文件,内容大致是:
SUBSYSTEM=="usb", ATTR{idVendor}=="2207", MODE="0666"保存后执行:
sudo udevadm control --reload-rules sudo udevadm trigger然后让设备进入Loader模式(方法和Windows下一样),插上USB线,在终端里执行:
upgrade_tool l这条命令会列出当前连接的设备,如果看到类似“Device 0: Rockusb Device”的字样,说明设备已经识别。
烧录整个镜像时,命令是:
upgrade_tool uf update.img执行过程中终端会打印每个分区的烧写状态,比如:
Loading firmware... Support Type:RK3588 Sending loader... Success Upgrade firmware... ...等它跑到100%,提示“Upgrade firmware success”就是烧好了。我个人觉得,upgrade_tool的日志输出比Windows工具更透明,能看到每个步骤的状态,排查问题也方便。
4. 常见问题与排查技巧实录
4.1 设备识别不到
这个问题在Windows和Linux下都很常见,原因无非这么几个:
- 驱动问题:Windows下Rockusb驱动没装好,Linux下udev规则没生效。
- USB线问题:很多Type-C线只能充电,无法传输数据,或者线材质量太差,信号不稳定。
- 供电问题:板子供电不足,导致USB枚举失败。
排查逻辑很简单:先换一根确定好用的USB数据线;然后看设备管理器或lsusb的输出,确认设备是否被识别;如果还不能解决,就换一个USB口,最好是主板背面的直连口,不要经过HUB。
在Linux下,我常用的排查命令是:
lsusb如果看到类似“Bus 001 Device 002: ID 2207:350b”这样的输出,说明设备已经被系统识别,ID 2207就是瑞芯微的Vendor ID。如果没有这一行,检查一下udev规则和硬件连接。
4.2 烧录过程中断或卡住
烧录到一半卡住,一般有两种情况:一是USB连接不稳定,二是镜像文件本身损坏。
USB连接不稳定,优先检查线材和供电。我试过在烧录rootfs时,因为是大文件长时间传输,线材发热导致丢包,烧录直接中断。换一根高品质线材后问题就没了。
镜像文件损坏怎么办?比较一下文件哈希值,确保你下载或拷贝的update.img和源文件一致。在Linux下可以用:
md5sum update.img和官方提供的校验值对比一下。
如果你确认线材和镜像都没问题,但还是卡在同一位置,那要怀疑是不是eMMC有坏块。这种情况比较多地出现在长期使用的板子上,坏块集中在某个分区地址段,导致烧录反复失败。你可以尝试换到Maskrom模式再烧一次,如果还是不行,就只能降低eMMC频率或者联系硬件支持了。
4.3 烧录成功后无法启动
这个情况我遇到过好几次。烧录显示100%成功,但重新上电后板子黑屏,或者停在Logo界面不动。排查方向有这几个。
先看启动串口日志。RK3588的调试串口一般有固定的波特率(1500000),连接上串口后,重新上电看打印信息。如果日志停在“DDR”初始化阶段,说明内存配置可能有问题;如果停在“Load FDT”阶段,说明设备树或者内核镜像有问题。
再确认一下烧录的固件和板卡型号是否匹配。同一个RK3588芯片,不同板卡外设接口不一样,设备树也不一样。如果你用的是通用固件,但板子有特殊的外设(比如特定的MIPI屏、特定型号的eMMC),那就有可能出现启动卡住的情况。
另外,AB分区是目前很多新固件都在用的引导方案,它的设计目的是防止系统更新时变砖。AB分区下,系统分为A槽和B槽,每次更新会写入非活动槽,启动时再切换。如果你烧录的固件是支持AB分区的,而你又手动修改过分区表,把某个槽的分区覆盖了,那启动的时候系统会找不到正确的引导槽。遇到启动问题,先用upgrade_tool打印当前系统槽:
upgrade_tool g看看当前槽位,然后用命令切换到另一个槽位再试。
4.4 烧录后系统能启动,但部分外设异常
还有一种情况,系统能正常启动,但Wi-Fi、蓝牙或者某个传感器不工作,这种一般和驱动或设备树相关,不是烧录本身的问题。如果你是从Windows切换到Linux,尤其要注意驱动差异。比如很多RK3588板卡在Windows下用了不同的Wi-Fi芯片驱动,切到Linux后,如果内核没编入对应驱动,外设自然不工作。
这时候可以加载内核模块试试:
modprobe r8723bu或者查看dmesg日志:
dmesg | grep wifi定位到具体芯片型号后,再去找对应的内核模块和固件文件。
5. 实际操作中常见的几个认知误区
5.1 以为更新系统就等于重装系统
很多刚开始玩RK3588的朋友,以为更新系统和重装系统是一回事。其实这两者差别很大。更新系统一般是指通过OTA或者update_engine工具把系统从一个小版本升到另一个小版本,这个过程通常不需要重新烧录整个固件,只更新增量包就行。
但重装系统不一样,它是要把存储介质整个格式化,然后按分区表重新写入一套完整系统。所以重装系统之后,之前的数据、配置、应用都会丢失。如果你只是想修复系统的小问题,可以先试试系统自带的重置功能,不一定非要走烧录这条路。
5.2 认为烧录就是“把镜像文件拖进U盘然后插板子”
这个问题在新手里最容易被误解。RK3588不是树莓派,它的系统烧录不是简单地把镜像解压到SD卡或U盘里,而是需要专门工具把分区信息逐条写入eMMC或NVMe。因为存储布局是固定的,没有分区表,系统就无法引导。
打个比方,树莓派的系统烧录像是把一本书的每一页按顺序贴到书架上,不关心书架内部怎么分格;RK3588的烧录则像是在装修房子,你需要先规划好每个房间的位置和大小,然后把对应的家具放进正确的房间。所以“U盘刷机”这个思路在这个场景下是行不通的,你必须走烧录工具的通道。
5.3 觉得板子变砖了就只能寄修
不是所有启动问题都值得寄修。RK3588芯片本身有Maskrom模式,相当于一个“兜底恢复入口”,只要芯片没有物理损坏,基本都能通过Maskrom模式重新写入Bootloader和系统。
画个重点:Maskrom模式不依赖板子上的任何系统,只要供电正常、芯片能启动,就能通过USB和烧录工具通信。所以如果真的把系统搞坏了,别慌,先试一下进入Maskrom,重新烧录一个完整固件,大多数情况都能救回来。
6. 烧录后续:系统迁移与备份建议
6.1 把常用开发环境迁移到Linux
烧录完成后,最繁琐的一步反而变成了软件环境的迁移。你从Windows换到Linux后,很多工具链都不通用,比如Windows下的IDE、SVN工具、各种图形化烧录软件,在Linux下都有替代方案,但需要重新配置。
我的建议是分两步走。第一步,先装好基础开发工具:
sudo apt update sudo apt install build-essential git vim net-tools openssh-server第二步,再按需求装交叉编译工具链和调试工具。如果你是做嵌入式开发的,还要安装gcc-arm交叉编译版本、device tree编译工具等。网络上下载的很多资源不一定直接可用,要做好手动配置的准备。
6.2 做好系统备份,下次重装少受罪
烧录成功之后,我强烈建议你做一次整系统备份。RK3588这种板子,系统一旦稳定运行,备份一下可以省掉以后很多麻烦。
瑞芯微官方支持从开发板直接生成整盘备份镜像,命令大致是:
upgrade_tool rf backup.img这里的rf其实就是“read full”的意思,它会把当前设备存储全部读取出来,打包成一个镜像文件。以后万一系统又崩了,直接把这个镜像烧回去就行,省去重新配置环境的步骤。
不过多说一句,备份镜像的文件体积比较大,建议放在单独的大容量存储里。另外,备份时尽量保证板子供电稳定,避免读取过程中断导致备份不完整。
7. 结尾:说点实在的经验
我在RK3588上折腾系统重装不是一次两次了,踩过的坑可能比很多人想像的要多。经历多了之后,最大的体会是:烧录系统这件事,80%的问题其实都出在准备阶段,而不是烧录本身。驱动装好、线材可靠、固件匹配、供电稳定,这四件事做扎实了,整个流程会顺畅到你都不敢信。
还有一个小技巧,如果你手头既有Windows又有Linux环境,建议在Windows下保留一份RKDevTool,在Linux下也装好upgrade_tool。系统日常开发用Linux,救砖或紧急烧录时再用Windows工具图个直观,两条腿走路最稳。板子这东西不怕折腾,怕的是折腾之后没有沉淀。每次遇到问题,养成记日志的习惯,后面真的能省不少时间。