山高疑日近,海阔觉天低

嵌入式linux-系统篇for固件分区和烧录

原文

本篇内容需要借助硬件开发板应用式学习–笔者是采用瑞芯微的RK3308平台进行梳理(可参考文章结束内容推荐):

下文是正式使用开发套件的熟悉过程,需要我们能够掌握固件的分区内容,烧录的方法。

1 准备工作

1.1 硬件连接说明

本章需要用到的工具和固件目录如下:

烧录用的工具:…\附加资料\1. 软件工具\AndroidTool_Release_v2.61.zip

测试固件:…\附加资料\2. 参考资料\TestImages

首先准备好硬件连接,通过配套的USB线连接电脑USB口到开发板上的小USB口(然后等待约30秒),本章不需要5V1A电源适配器,如果连接正常,可以在设备管理器(右键我的电脑->属性->设备管理器)中看到ADB接口:

 

这时,我们需要运行cmder,然后输入adb shell(如果没有安装cmder或者adb shell需要回过头到准备篇中查看安装的过程);正常应该就能够登录到开发板中了:

 

1.2 配置烧录工具

解压并用管理员身份打开工具AndroidTool_Release_v2.61.zip:

 

如果硬件连接正常,会提示“发现一个ADB设备”。

这是默认软件的显示框,其中”执行”是指运行烧录功能;“切换”是指切换开发板的工作模式;“设备分区表”是尝试读取当前开发板的Flash分区情况,而“清空”是清除提示信息;如下,在空白处单击右键,选择“导入配置”:

 

选择zimage.conf:

 

这个文件只是一个保存分区信息的配置,方便我们导入针对要烧录的固件的信息,而不用手动填写;也可以修改信息后重新导出。

导入成功:

 

2 固件烧录

2.1 固件说明

承接上一章节,

loader.bin : 芯片原厂提供的引导程序(闭源未开放源码),无条件烧录。

parameter.txt :分区表。

uboot.img :U-Boot(Bootloader)固件。

trust.img :芯片原厂提供,无条件烧录。

misc.img :工作模式管理程序。

recovery.img :系统修复工具。

boot.img :包含Linux kernel的固件。

rootfs.img :根文件系统。

oem.img :厂商数据。

userdata.img : 用户数据。

“地址”栏和parameter.txt中是对应的,我们查看parameter.txt内容:

 

FIRMWARE_VER:8.1

固件版本,打包updata.img时会使用到,升级工具会根据这个识别固件版本。

MACHINE_MODEL:RK3308

机器型号,打包updata.img使用,不同的项目,可以自己修改,用于升级工具显示。在recovery里面升级固件时可以用于判断固件是否匹配

MACHINE_ID:007

产品开发ID,可以为字符和数字组合,打包updata.img使用,不同的项目使用不同的ID,可以用于识别机器机型。在recovery里面升级固件时可以用于判断固件是否匹配。

MANUFACTURER: RK3308

厂商信息,打包updata.img使用,可以自己修改,用于升级工具显示。

MAGIC: 0x5041524B

魔数MAGIC,不能修改,一些新的AP使用DTS,这一项没有用,为了兼容,不要删除或修改。

ATAG: 0x60000800

ATAG,不能修改,一些新的AP使用DTS,这一项没有用,为了兼容,不要删除或修改。

MACHINE: 3226

内核识别用,不能修改,这个定义和内核匹配。

RK29xx识别码:MACHINE: 2929

RK292x识别码:MACHINE: 2928

RK3066识别码:MACHINE: 3066

RK3326识别码:MACHINE: 3326

CHECK_MASK: 0x80

保留,不能修改。

TYPE: GPT

分区模式,采用GPT。

CMDLINE:mtdparts=rk29xxnand:0x00….

rk29xxnand是兼容写法,后面是分区信息(重点说明)。

以uboot为例说明:0x00000800@0x00002000(boot),@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是sector,1个sector为512Bytes;上例中,uboot分区起始位置为0x2000 sectors位置,大小为0x0800 sectors(1MB);后面的依次类推,比如uboot后面的0x00000800@0x00002800(trust),起始地址是0x2800 sectors,大小是0x800 sectors(1MB)。

现在重新回到烧录软件的“地址”栏进行对照,会发现其实和分区文件中不同固件的起始地址是对应的。

2.2 进行烧录

硬件的工作模式有如下几种:

Maskrom:Flash 在未烧录固件时,芯片会引导进入 Maskrom 模式,可以进行初次固件的烧写;开发调试过程中若遇到 Loader 无法正常启动的情况,也可进入 Maskrom 模式烧写固件;这是变砖处理的最后一道防线。

Loader:Loader 模式下,可以进行固件的烧写、升级。可以通过工具单

独烧写某一个分区镜像文件,方便调试。

Normal Boot:系统引导 rootfs 启动,加载 rootfs,大多数的开发都是在这个模式在调试的;“发现一个ADB设备”其实就是在该模式下。

如何从Normal Boot进入到Loader模式,在烧录工具中点击“切换”:

 

切换成功:

 

勾选所有固件然后点击“执行”:

 

烧录完成后,过一会又重新发现了ADB设备,重新在cmder中能进入调试,如果烧录过程发现设备起不来,那就是成砖头了,需要进入Maskrom模式才行。

 

用镊子或者上图的杜邦线短接右图的两个测试点,然后给板子重新上电,提示“发现一个MASKROM设备”时松开(该模式下可以进行重新烧录):

 

​​​​​​​3 简化固件

其实开发产品时,不一定需要这么多的固件,比如oem是属于第三方的依赖,可以归入到userdata中的,recovery.img不一定需要,我们以第二个固件为例,在目录中:…\附加资料\2. 参考资料\TestImages\2. test2

 

该目录下只保留了最精简的固件组成部分,连userdata都不需要了,这样由于rootfs只读,因此我们创建文件或者写文件之类的动作只能在内存中去完成了,也就是/tmp目录下;

rk3308_loader_v1.26.114.bin和trust.img是芯片原厂提供不可或缺的固件;uboot.img是UBoot固件,

boot.img包含Linux kernel;

rootfs.img是根文件系统;

parameter.txt分区表不可缺少。

打开烧录软件,导入该目录下zimage.config配置文件:

 

“地址”的内容和分区表中是对应的。

然后进行“切换”和“执行”:

 

同时也可以进入到ADB调试状态:

 

 

==================================================================================================================================

到这里就把linux系统的内容固件分区和烧录内容学习完啦,是否很简单!!

如果觉得对您有帮助并想进一步深入学习交流可以扫描以下微信二维码或加入QQ群:928840648

欢迎共同学习成长,有一群爱学习的小伙伴一起勉励!!加油!!也可点击

 

 

笔者基于嵌入式系统框架内容如下整理编辑:

 

————————————————
版权声明:本文为CSDN博主「HomeByte」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HomeByte/article/details/109478092

赞(0) 打赏
未经允许不得转载:Mr.Zhang » 嵌入式linux-系统篇for固件分区和烧录

你的打赏是我的动力

登录

找回密码

注册