当前位置: 首页 > news >正文

RK3568 Linux驱动学习——SDK烧录

前言

Rockchip平台提供了多种镜像烧写方式,如在Windows下通过瑞芯微开发工具烧写、通过SD卡方式烧写、通过FactoryTool工具批量烧写(量产烧写工具、支持USB一拖多烧写)以及在Ubuntu下通过Linux_Upgrade_Tool工具烧写等等。总之,烧写镜像的方式有很多种,可以选择合适的烧写方式进行烧写,将镜像文件烧写至开发板。

烧写模式介绍

Rockehip平台硬件设备运行的几种模式如下表所示,只有当设备处于Maskrom以及Loader模式时(必须要通过USB线将开发板的OTG口连接到电脑),才能够烧写镜像,或对板上镜像进行更新操作。

模式是否支持烧录描述
Maskrom支持Flash在未烧录镜像时,芯片会引导进入Maskrom模式,可以进行初次镜像的烧写;开发调试过程中若遇到无法正常进入Loader模式的情况,也可进入Maskrom模式烧写镜像。
Loader支持Loader模式下可以进行镜像烧写、更新升级,可以通过烧写工具单独烧写某一个分区镜像文件,方便调试。
Recovery不支持通过引导recovery镜像进入recovery模式,recovery模式主要作用是升级、恢复出厂设置类操作。
Normal Boot不支持系统正常启动进入该模式,通过引导rootfs启动,加载rootfs根文件系统,大多数开发都是在这个模式下进行。

进入Maskrom烧写模式的方法:(先连接电源适配器和OTG)

  • 开发板未烧录过镜像,上电之后就会进入到Maskrom模式;
  • 开发板烧录过镜像,按住开发板上的UPDATE按键,然后开发发板上电或复位,系统将会进入到Maskrom模式;
  • 开发板烧录过镜像,按住开发板上的V-按键(音量-)按键,然后开发板上电或复位,系统将会进入到Maskrom模式;
  • 开发板烧录过镜像,在U-Boot命令行下,执行"rbrom"命令进入到Maskrom模式。

进入Loader烧写模式的方法:(先连接电源适配器和OTG)

  • 开发板烧录过镜像,按住V+按键(音量+)按键,然后开发板上电或复位,系统将会进入到Loader模式;
  • 开发板烧录过镜像,在U-Boot命令行下,执行"download"命令进入到Loader模式;
  • 开发板烧录过镜像,在Linux系统下,通过串口或ADB执行命令"reboot loader"重启进入到Loader模式;
  • 开发板烧录过镜像,上电或复位后开发板正常启动进入到系统后,瑞芯微开发工具(也就是RKDevTool工具)会显示"发现一个ADB设备",然后点击"切换"按钮,进入到Loade模式。

以上介绍了开发板如何进入到Maskrom或Loader烧写模式,只有进入Maskrom模式或Loader模式后才可进行烧录

Windows系统下烧写

首先将之前已经编译好的SDK镜像文件(~/rk3568_linux_sdk/rocdev/镜像)从Ubuntu拷贝到Windows下,可以将这个目录命名为rk3568_images,包括了boot.img、MiniLoaderAll.bin、misc.img、oem.img、parameter.txt(分区表文件,不是镜像)、recovery.img、rootfs.img、uboot.img、userdata.img,如下所示:

镜像文件

连接好开发板后,打开瑞芯微开发工具,然后按住UPDATE并按下RST按键来进入MASKROM模式

瑞芯微开发工具

分区表parameter.txt

看一下RK平台分区表文件parameter.txt,该文件是一个txt文件。parameter.txt文件描述了开发板的分区表信息,每个分区的名字、分区的起始地址以及分区的大小等信息,来看下它的内容:

 FIRMWARE_VER: 1.0<br>MACHINE_MODEL: RK3568<br>MACHINE_ID: 007<br>MANUFACTURER: RK3568<br>MAGIC: 0x5041524B<br>ATAG: 0x00200800<br>MACHINE: 0xffffffff<br>CHECK_MASK: 0x80<br>PWR_HLD: 0,0,A,0,1<br>TYPE: GPT<br>CMDLINE: <br>mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00020000@0x00028000(recovery),0x00010000@0x00048000(backup),0x00c00000@0x00058000(rootfs),0x00040000@0x00c58000(oem),-@0x00c98000(userdata:grow)<br>uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

parameter.txt文件中除了分区表信息之外,还包含其它标识,如FIRMWARE_VER、MACHINE_MODEL、MACHINE_ID、MAGIC 等,不做展开。主要来看一下mtdparts标识所定义的分区信息,如下:

rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00020000@0x00008000(boot),0x00020000@0x00028000(recovery),0x00010000@0x00048000(backup),0x00c00000@0x00058000(rootfs),0x00040000@0x00c58000(oem),-@0x00c98000(userdata:grow)

rk29xxnand是一个标识,为了兼容性,rockchip平台都是用rk29xxnand做标识

诸如0x00002000@0x00004000(uboot)、0x00002000@0x00006000(misc)等信息用于定义分区,@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字;所有数值的单位都是sector(扇区),1个sector为512字节。所以由此可知,uboot分区的起始位置为0x4000 sectors位置,大小为0x2000 sectors(4MB);misc分区的起始位置为0x6000 sectors位置,大小也是0x2000 sectors。

为了性能,每个分区起始地址需要32KB(64 sectors)对齐,大小也需要32KB的整数倍

最后一个分区需要指定grow参数,表示将剩余存储空间全部分配给该分区

每个分区作用如下:

各分区作用介绍
各分区作用介绍

配置

通过上小节分析可知,parameter.txt文件中一共定义了8个分区,提供了每个分区的名字起始地址以及分区大小,接下来需要手动配置瑞芯微开发工具,配置完之后如下图所示:

手动配置开发工具

这里需要注意几个点:

  1. 瑞芯微开发工具中地址数值的单位也是sectors(扇区,-一个扇区等于512字节);
  2. 第一项对应的是MiniLoaderAll.bin镜像,它的烧录地址不用配置,直接使用0x0即可。因为MiniLoaderAll.bin镜像有专门的烧录地址,无需用户配置,而且它的名字一般都是Loader(或小写loader),不要去改动它;
  3. 上图中第二项对应的是分区表parameter.txt,同样它的地址也不下用配置,直接使用0x0即可,因为parameter.txt文件不会烧录到Flash中,但会读取该文件定义的分区、去初始化Flash物理分区;同样,它的名字为parameter(或者大写Parameter),不要去改动它,因为底层需要通过这个"parameter"名字来识别分区表文件。
  4. 除了MiniLoaderAllbinparameter.txt稍微特殊一点之外,其它镜像直接根据parameter.txt分区表定义的起始地址进行配置即可,名字尽量使用parameter.txt文件中所定义的分区名。

配置完成后,可以将配置导出保存到.cfg文件,方便下次使用,如下图所示:

导出配置

将配置信息导出、保存到config.cfg文件中,方便下次导入该配置信息。

烧录

如下图所示:

执行烧录

执行过程中,右侧空白处会输出log信息,如下图:

烧录log

也可以只烧录特定镜像,只勾选对应的这一项即可。

启动系统

烧录完成后会自动重启开发板,进入Linux buildroot系统,串口终端(波特率15M)会输出信息:

进入系统

烧录update.img

我没有烧录这个的时候,就会在上图卡住。

进入开发工具:

选择固件

选择了对应的update.img之后,点击“升级”就会进入烧录。

之后就能够正常开机了。

Ubuntu系统下烧写

在Ubuntu,就不需要先拷贝到主机了。

烧写工具在~/rk3568_linux_sdk/tools/linux/Linux_Upgrade_Tool路径下,如下图:
Linux_Upgrade_Tool目录

这个upgrade_tool有两种运行模式:命令行模式工具模式,直接运行upgrade_tool命令,不加任何参数则会进入到工具模式,工具模式其实就是一个交互模式,在交互模式下用户可以输入指令、然后按回车执行该指令,那么就会触发该指令所对应的操作,譬如下下载镜像、擦除镜像、读取设备信息等等。

运行upgrade_tool命令时加入参数(如UF UL DI DB等等)则会进入命令行模式,所谓
命令行模式,运行upgrade_tool命令后无法与用户进行交互,通过传入的参数来告诉upgrade_tool工具本次需要执行什么操作,如说烧写镜像、擦除等,执行完完任务后就会退出。

使用upgrade_tool工具烧写

将开发板连接到虚拟机之后,可以通过命令行模式来进行烧写。

Ubuntu中进入rockdev目录,同时将开发板设置到Maskrom或Loader模式

upgrade_tool工具支持很多指令,不同指令可以执行不同的操作,譬如CD、LD、SD、UF、DB、TD、RD等等(大小写都行),有些指令需要带参数、而有些指令则不需要带参数。

使用UL指令烧写MiniLoaderAll.bin镜像,使用DI指令烧写其它镜像(uboot.img、boot.img、oem.img、userdata.img、rootfs.img、misc.img等)以及分区表文件parameter.txt。

先烧写MiniLoaderAll.bin镜像,使用UL指令烧写MiniLoaderAll.bin(执行upgrade_tool命令时需要加入sudo获取到root用户权限,否则操作会失败!):

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool UL MiniLoaderAll.bin -noreset

烧写MiniLoaderAll.bin

upgrade_tool命令后面携带了3个参数表示需要执行的指令,UL指令用于烧写MiniLoaderAll.bin,第二个参数用于指定MiniLoaderAll.bin所在路径,第三个参数-noreset表示烧写完MiniLoaderAll.bin之后不要复位开发板(不要复位设备)。

烧写完MiniLoaderAll.bin之后,接下来需要通过DI指令下载parameter.txt分区表:

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -p parameter.txt

下载分区表

接下来烧录其他镜像:

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -uboot uboot.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -misc misc.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -boot boot.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -recovery recovery.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -oem oem.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -rootfs rootfs.img
sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool DI -userdata userdata.img

烧录uboot.img

烧录misc.img

烧录boot.img
烧录recovery.img
烧录oem.img
烧录rootfs.img
烧录userdata.img

"DI-<partition_name>"中的 partition_name便是分区名,如-boot就是boot分区、-oem
就是oem分区;使用upgrade_tool工具烧写镜像无需用户指定烧写址,parameter.txt文件已经定义了各分区的起始位置,也就是镜像的烧录地址。

如果执行命令出错,可以尝试复位、重启开发板,再次操作。

最后,当所有镜像全部烧录完成后,可以执行下面这条命令复位开发板、重新启动系统:

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool RD

复位开发板

烧写update.img

开发板处于Maskrom或Loader模式下,执行如下命令烧录update.img固件(使用UF指令烧录update.img):

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool UF update.img

烧录update.img

完成后会自动复位开发板。

擦除操作

开发板处于Maskrom或Loader模式下,执行如下命令可以擦除Flash中的所有数据(使用EF指令):

sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool EF MiniLoaderAll.bin

擦除所有数据

也可以按地址进行扇区擦除,由用户指定擦除的起始位置和大小(使用EL指令)。

使用rkflash.sh脚本烧写

rkflash.sh脚本是RK提供的烧录脚本,可以直接用这个脚本进行烧录,其内部就是调用了upgrade_tool工具。

用法也非常简单,首先让开发板处于Maskrom或Loader模式下,直接运行rkflash.sh脚本即可将rockdev目录下的镜像烧录到开发板(同样也需要加入sudo,否则操作会失败):

sudo ./rkflash.sh

执行rkflash.sh烧录所有镜像

执行上述命令会将rockdev目录下的boot.img、MiniLoaderAll.bin、misc.img、oem.img、recovery.img、rootfs.img、uboot.img、userdata.img烧写到开发板对应分区。

烧录完之后会自动复位开发板。

还可以单独烧录某个镜像:
rkflash.sh使用方法

http://www.dtcms.com/a/291928.html

相关文章:

  • Docker 安装、常用命令、应用部署
  • Android接入RocketMQ的文章链接
  • JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息
  • 20250722在Ubuntu 24.04.2下配置编译RD-RK3588开发板的Android13的编译环境
  • 八大作业票(一) 动火安全作业证
  • 分布式高可用ELK平台搭建及使用保姆级教程指南
  • axios统一封装规范管理
  • 同步本地文件到服务器上的Docker容器
  • 学习做精准、自动化、高效的 GEO优化系统
  • 如何判断进程是否存活?Linux 系统中的核心方法解析
  • 【前端】ikun-pptx编辑器前瞻问题一: pptx的xml样式, 使用html能100%还原么
  • UE5 UI ScrollBox 滚动框
  • 报错error:0308010C:digital envelope routines::unsupported解决方案
  • 《Webpack热更新瓶颈突破:全链路优化指南》
  • Android KTX:让Kotlin开发更简洁高效的利器
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十九课——车牌识别的FPGA实现(1)车牌定位的预处理
  • 边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
  • vue apk返回键不好使
  • git push新版问题解决
  • ArrayList与顺序表
  • 【C++】继承和多态扩展学习
  • 面向对象的三大特征
  • Go 语言中,创建结构体实例对象有几种常用方式
  • 大数学习笔记整理
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • 从感知到决策:虚拟仿真系统与视觉算法融合下的多路RTSP视频接入技术探究
  • freertos关键函数理解 uxListRemove
  • 基于 Spring Batch 和 XXL-Job 的批处理任务实现
  • linux c语言进阶 - 进程,通信方式
  • PHICOMM(斐讯)N1盒子 - Armbian25.05(Debian 12)刷入U盘/EMMC