ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

RK3588开发板从Windows重装Linux系统:烧录全流程与避坑指南

RK3588开发板从Windows重装Linux系统:烧录全流程与避坑指南 很多玩RK3588开发板的朋友都有过这种经历板子出厂预装的是Windows on ARM或者某个精简版安卓用起来总觉得别扭。特别是一些做嵌入式Linux开发的拿到板子第一件事就想把它重装成Ubuntu环境但真到了要烧录系统这一步各种驱动、工具、模式切换的问题能把人绕晕。这篇文章就是把我自己折腾RK3588从Windows重装到Linux的完整过程记录下来包括底层的原理、每一步的操作细节还有我踩过的一些坑希望能帮后来的人省点时间。这篇文章适合谁看两类人。一类是刚入手RK3588开发板、对系统烧录还不太熟的新手按着步骤做基本能顺利跑起来另一类是已经在Linux下做嵌入式开发、想快速切换系统环境的老手可以直接跳到烧录配置和AB分区处理的部分看。1. 内容整体设计与思路拆解1.1 为什么RK3588重装系统不能只靠拷贝RK3588这个芯片是瑞芯微的旗舰级SoCCPU是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: mtdpartsrk29xxnand:0x000020000x00004000(uboot),0x000020000x00006000(misc),0x000100000x00008000(boot),0x000100000x00018000(recovery),0x000100000x00028000(backup),0x000400000x00038000(rootfs),0x000400000x00078000(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文件内容大致是SUBSYSTEMusb, ATTR{idVendor}2207, MODE0666保存后执行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工具图个直观两条腿走路最稳。板子这东西不怕折腾怕的是折腾之后没有沉淀。每次遇到问题养成记日志的习惯后面真的能省不少时间。
返回列表