第五章 SDK镜像烧录

本章向用户介绍如何将编译得到的镜像文件(uboot.img、boot.img、rootfs.img、recovery.img等)烧写并运行在ATK-DLRK3568开发板上。 Rockchip平台提供了多种镜像烧写方式,譬如在Windows下通过瑞星微开发工具烧写、通过SD卡方式烧写、通过FactoryTool工具批量烧写(量产烧写工具、支持USB一拖多烧写)以及在Ubuntu下通过Linux_Upgrade_Tool工具烧写等等;总之,烧写镜像的方式有很多种,用户可以选择合适的烧写方式进行烧写,将镜像文件烧写至开发板。

5.1 烧写模式介绍

2.9.1小节已经详细介绍了开发板的烧写模式相关问题,如果对此还有疑问,请移步前往该小节阅读! 5.2 Windows系统下烧写 Windows下通过瑞芯微开发工具(RKDevTool)来烧写镜像。烧写之前,先将<第四章>编译SDK得到的镜像文件(/rockdev/目录下的镜像)从Ubuntu系统拷贝到Windows下,譬如将这些镜像拷贝到Windows桌面rk3568_images目录,包括boot.img、MiniLoaderAll.bin、misc.img、oem.img、parameter.txt(分区表文件,不是镜像)、recovery.img、rootfs.img、uboot.img、userdata.img,如下所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu

图5.2.1 桌面rk3568_images目录下的文件

打开瑞芯微开发工具:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_02

图5.2.2 瑞芯微开发工具

5.2.1 分区表parameter.txt介绍 本小节讲一下RK平台分区表文件parameter.txt,该文件是一个txt文本文件。parameter.txt文件描述了开发板的分区表信息,每个分区的名字、分区的起始地址以及分区的大小等信息,我们来看下它的内容: FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3568 MACHINE_ID: 007 MANUFACTURER: RK3568 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 0xffffffff CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 TYPE: GPT CMDLINE: 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) uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9 parameter.txt文件中除了分区表信息之外,还包含其它标识,譬如FIRMWARE_VER、MACHINE_MODEL、MACHINE_ID、MAGIC等,本文对此不做介绍,详情请参考RK官方文档:/docs/Common/TOOL/Rockchip_Introduction_Partition_CN.pdf。 这里只给大家介绍mtdparts标识所定义的分区表信息。 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参数,表示将剩余存储空间全部分配给该分区: -@0x00c98000(userdata:grow) userdata分区虽然指定了起始位置,但并未指定分区大小,而是使用了“-”来代替,然后在分区名后面加入“:grow”,表示将剩余空间全部分配给userdata分区。 每个分区的作用如下表所示: 分区名 说明

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_03

表5.2.1.1 各分区的作用介绍

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

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_04

图5.2.2.1 手动配置瑞芯微开发工具

这里需要注意几个点: 1.瑞芯微开发工具中地址数值的单位也是sectors(扇区,一个扇区等于512字节); 2.第一项对应的是MiniLoaderAll.bin镜像,它的烧录地址不用配置,直接使用0x0即可,因为MiniLoaderAll.bin镜像有专门的烧录地址,无需用户配置,而且它的名字一般都是Loader(或小写loader),不要去改动它; 3.上图中第二项对应的是分区表parameter.txt,同样它的地址也不用配置,直接使用0x0即可,因为parameter.txt文件不会烧录到Flash中,但会读取该文件定义的分区、去初始化Flash物理分区;同样,它的名字为parameter(或者大写Parameter),不要去改动它,因为底层需要通过这个“parameter”名字来识别分区表文件。 4.除了MiniLoaderAll.bin和parameter.txt稍微特殊一点之外,其它镜像直接根据parameter.txt分区表定义的起始地址进行配置即可,名字尽量使用parameter.txt文件中所定义的分区名。 配置完成之后,我们还可以将这些配置信息导出、保存到一个.cfg文件中,方便下次直接导入;导出的方法很简单,步骤如图5.2.2.2~5.2.2.3所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_05

图5.2.2.2 导出配置(1)

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_06

图5.2.2.3 导出配置(2)

将配置信息导出、保存到config.cfg文件中,方便下次导入该配置信息。 5.2.3 烧录 开发板先连接好电源适配器以及OTG,烧写之前,让开发板进入Maskrom或Loader模式。 譬如通过Maskrom模式烧写镜像,按住开发板上的UPDATE按键,然后给开发板上电或复位,此时设备便会进入Maskrom模式(瑞芯微开发工具会提示用户“发现一个MASKROM设备”),然后点击“执行”按钮烧录镜像:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_07

图5.2.3.1 执行烧录

烧录过程中,右边空白处会输出log信息,如下所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_08

图5.2.3.2 烧录过程log信息

也可单独烧录某个指定镜像,譬如单独烧录boot.img到boot分区,只需勾选对应的这一项即可,如下所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_09

图5.2.3.3 单独烧录boot.img

然后点击“执行”按钮进行烧录即可。这在开发、调试过程中很有用,因为有时我们仅仅只是为了更新某个分区、只需将镜像烧录到该分区替换旧的镜像而已,无需重烧整个系统。 5.2.4 启动系统 烧录完成后会自动重启开发板,进入Linux buildroot系统,串口终端会输出信息:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_10

图5.2.4.1 进入系统

5.2.4 烧录update.img 可以使用瑞芯微开发工具烧录update.img固件,首先将4.4.5小节生成的update.img固件拷贝到Windows下,然后通过瑞芯微开发工具将其烧录到开发板,烧录方法参考2.9.3小节。 5.3 Ubuntu系统下烧写 本小节向用户介绍如何在Ubuntu下烧录镜像。在Windows下烧录,需要先将镜像从Ubuntu系统拷贝到Windows系统下,如此才可进行烧录。如果在Ubuntu下烧录,那么就不用拷贝镜像。 前面给大家讲过,在Ubuntu下可以使用Linux_Upgrade_Tool工具进行烧录,该工具集成在SDK中,路径为:/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool,如下所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_11

图5.3.1 Linux_Upgrade_Tool目录

该目录下有两份RK提供的使用说明文档:《命令行开发工具使用文档.pdf》、《Linux开发工具使用手册_v1.32.pdf》,关于upgrade_tool工具的详细使用方法请参考这两份文档。 upgrade_tool有两种运行模式:命令行模式和工具模式,直接运行upgrade_tool命令,不加任何参数则会进入到工具模式,工具模式其实就是一个交互模式,在交互模式下用户可以输入指令、然后按回车执行该指令,那么就会触发该指令所对应的操作,譬如下载镜像、擦除镜像、读取设备信息等等,有点像命令行终端。 运行upgrade_tool命令时加入参数(譬如UF UL DI DB等等)则会进入命令行模式,所谓命令行模式,运行upgrade_tool命令后无法与用户进行交互,通过传入的参数来告诉upgrade_tool工具本次需要执行什么操作,譬如说烧写镜像、擦除等,执行完任务后就会退出。 5.3.1 将开发板连接到Ubuntu 在Ubuntu下使用upgrade_tool工具烧写镜像之前,需要将开发板连接到Ubuntu系统。首先,连接好硬件(连接电源适配器以及OTG口),让开发板处于Maskrom或Loader模式下;在Ubuntu系统右下角可以看到有一个名字为“Fuzhou Rockchip Rockusb Device”的设备(需要将鼠标移动到相应图标上时才会显示出来),如下图所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_12

图5.3.1.1 Rockchip Rockusb Device

同样,在“虚拟机可移动设备”下面也可以找到该设备,如下图所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_13

图5.3.1.2 将设备连接到Ubuntu(1)

也可以通过右键单击右下角的Rockusb设备图标,然后选择“连接”:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_14

图5.3.1.3 将设备连接到Ubuntu(2)

通过这样操作之后,便可将开发板连接到Ubuntu系统。 5.3.2 使用upgrade_tool工具烧写 本小节向用户介绍如何使用upgrade_tool工具烧录镜像(只介绍命令行模式烧写)。为了方便操作,我们直接进入到/rockdev目录。在烧写之前,开发板需要处于Maskrom或Loader模式下。 upgrade_tool工具支持很多指令,不同指令可以执行不同的操作,譬如CD、LD、SD、UF、DI、DB、TD、RD等等(大小写都行),有些指令需要带参数、而有些指令则不需要带参数,详情请参考<命令行开发工具使用文档.pdf>和<Linux开发工具使用手册_v1.32.pdf>。 使用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

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_15

图5.3.2.1 烧写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

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_16

图5.3.2.2 下载分区表

接下来烧录其它镜像: 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

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_17

图5.3.2.3 烧录uboot.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_18

图5.3.2.4 烧录misc.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_19

图5.3.2.5 烧录boot.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_20

图5.3.2.6 烧录recovery.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_21

图5.3.2.7 烧录oem.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_22

图5.3.2.8 烧录rootfs.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_23

图5.3.2.9 烧录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

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_24

图5.3.2.10 复位开发板

5.3.3 烧写update.img 本小节介绍如何使用upgrade_tool工具烧录update.img固件。 开发板处于Maskrom或Loader模式下,执行如下命令烧录update.img固件(使用UF指令烧录update.img): sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool UF update.img

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_linux_25

图5.3.3.1 烧写update.img

烧录完后会自动复位开发板。 5.3.4 擦除操作 本小节介绍如何使用upgrade_tool工具擦除开发板Flash。 开发板处于Maskrom或Loader模式下,执行如下命令可以擦除Flash中的所有数据(使用EF指令): sudo ../tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool/upgrade_tool EF MiniLoaderAll.bin

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_26

图5.3.4.1 擦除所有数据

当然,也可以按地址进行扇区擦除,由用户指定擦除的起始位置和大小(使用EL指令)。 5.3.5 使用rkflash.sh脚本烧写 /rkflash.sh是RK提供的烧录脚本,我们可以直接使用这个rkflash.sh脚本进行烧录;当然,这个脚本也是调用了upgrade_tool工具执行烧录操作。 用法也非常简单,首先让开发板处于Maskrom或Loader模式下,直接运行rkflash.sh脚本即可将/rockdev目录下的镜像烧录到开发板(同样也需要加入sudo,否则操作会失败!): sudo ./rkflash.sh

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_开发板_27

图5.3.5.1 执行rkflash.sh烧录所有镜像 执行上述命令会将rockdev目录下的boot.img、MiniLoaderAll.bin、misc.img、oem.img、recovery.img、rootfs.img、uboot.img、userdata.img烧写到开发板对应分区。 烧录完之后会自动复位开发板。

除了之外,还可单独烧录某个指定镜像,如下表所示:

【正点原子K210连载】第五章 SDK镜像烧录 摘自【正点原子】DNK210使用指南-CanMV版指南_Ubuntu_28

表5.3.5.1 rkflash.sh脚本的用法