【STM32MP157系统移植】2.烧录TF-A到EMMC

目录

准备烧录文件

tf-a-stm32mp157d-atk-serialboot.stm32

u-boot.stm32

tf-a-stm32mp157d-atk-trusted.stm32

.tsv文件

.tsv语法

Opt域

Id域

Id范围:

Id含义:

Name域

Type域

Device域

Offset域

Binary域

烧录文件

查看TF-A烧录时间

准备烧录文件

tf-a-stm32mp157d-atk-serialboot.stm32

用于初始化USB、DDR等外设,DDR外设初始化完成后可运行uboot。

u-boot.stm32

uboot会初始化EMMC、NAND。

tf-a-stm32mp157d-atk-trusted.stm32

编译出来的TF-A。

.tsv文件

        STM32CubeProgrammer 脚本文件,如何使用上面三个文件,应该放到哪个地方,如果烧写的话要烧写到EMMC的哪个地址区域。

.tsv语法

详解:https://wiki.st.com/stm32mpu/wiki/STM32CubeProgrammer_flashlayout

tsv语法要求只能用TAB键,不能用空格!

#:整行注释

作用
Opt选项字段,可以设置为“-”、“P”、“D”或“E”
Id会根据这个id来决定烧写分区
Name分区名字
Type制定烧写的类型,仅uboot使用
Device指定烧写的设备类型与编号,比如 emmc0、emmc1、nand0 等,如果 opt 为‘-’,那么此字段就为 none
offset分区的起始位置,如果为“boot1”表示 EMMC 的第一个分区,如果为“boot2”就表示 EMMC 第二个分区。如果是数字就表示需要偏移的字节数。
Binary要烧录的文件

Opt域

Opt 是第一个项,此选项通过‘-’、‘P’、‘D’和‘E’这四个字符定义操作方法,首选的是‘-’和‘P’。

  • '-':none,也就是空选项,分区或者设备无需修改,如果Device域为none,那么Opt强制为‘-’。

  • 'P':向分区或者设备烧写固件。

  • 'E':空分区或设备,表示对应的分区或设备不更新,相关的 Id 项会被跳过。

  • 'D':删除分区或设备。

  • 'PE':不更新,也就是指定某个分区或者设备不需要烧写固件,这样就可以单独只更新 tf-a、uboot、kernel 或者 rootfs。

  • 'PD':删除并更新,也可以写作 DP。

  • 'PDE':删除并且保持为空,也可以写作 PED/DPE/DEP/EPD/EDP。

Id域

        STM32CubeProgrammer通过Id域来确定烧写方法,会通过Id域来识别下一个要烧写到设备里面的二进制文件:

  • ROM或者FSBL:二进制文件要加载到RAM中

  • SSBL(uboot):二进制文件要烧写到Flash中

Id范围:

范围分区
0x01~0x0F带有 STM32 头部信息的 Boot 分区,如 SSBL、FSBL、其他(TEE 或 M4 固件)
0x10~0xF0不带头部的用户编程分区,如 uimage、dtb、rootfs、vendorfs、userfs

Id含义:

Id分区
0x00内部使用,用户不能使用此 ID!
0x01FSBL(第一阶段拷贝),ROM 代码使用,会加载到 RAM 中
0x03SSBL,FSBL 使用,加载到 RAM 中
0x04把FSBL烧写到boot1里面
0x05把FSBL烧写到boot2里面
0x06SSBL烧写到Flash
0x21Linux内核设备树
0x22根文件系统
0xF1~0xFD虚拟分区,内部使用
0xF1命令获取阶段
0xF2OTP
0xF3SSP
0xF4PMIC NVM
0xFE操作结束
0xFF复位

Name域

Name 域为一段字符串,也就是目标内存段的名字。

Type域

Type域仅仅用于uboot,用来选择需要更新的Flash区域:

  • SD 卡或者 EMMC 设备对应 GPT 分区。

  • 原始的Flash设备,如NAND、NOR等对应MTD分区。

SD/EMMC和NAND/NOR所支持的Type类型:

TypeGPTGPTMTDMTDMTD
TypeSDEMMCNANDNORRAM
Binary
Binary(N)ssbl
FileSystemdtb
SystemUBIUBIkernel
Rawimageuser data
  • Binary:原始的二进制文件。

  • FileSystem:linux 文件系统,为 ext2/ext4/fat 格式。

  • System:Linux 内核。

Device域

        烧到哪里去,Device域指定Uboot设备树定义的设备和索引(从0开始),不同的设备其设备名字和索引不同:

  • mmc+索引:如 mmc0、mmc1、mmc2 等,对应 SD 卡或 EMMC。比如 SD 卡和 EMMC分别接到 MP1 的 SDMMC1 和 SDMMC2 接口上,那么 SD 卡和 EMMC 分别为 mmc0 和 mmc1。

  • nor+索引:如 nor0,对应 NOR 或者 QUADSPI Flash。

  • mmc+索引:如 nand0,对应连接到 FMC 总线上的并行 NAND Flash。

  • spi-nand+索引:如 spi-nand0,对应连接到 QSPI 上的串行 NAND Flash。

  • none:RAM,也就是将固件加载到 RAM 里面,仅允许启动阶段使用,而且 Type 域要为 Binary,Offset 域要为 0,Opt 域为‘-’。

  • ram+索引:如 ram0,烧写服务讲固件加载到 RAM 中运行。

Offset域

Offset 就是偏移,偏移的字节数,支持的值如下:

  • boot1:EMMC 的第一个启动区域分区。

  • boot2:EMMC 的第二个启动区域分区。

  • 数字:具体的偏移值,单位为字节。

Binary域

STM32CubeProgrammer 软件要使用的二进制文件,烧写文件的路径。

#flashlayoout.tsv
#Opt	Id		Name		Type	Device	Offset	Binary
-		0x01	fsbl1-boot	Binary	none	0x0		tf-a-stm32mp157d-atk-serialboot.stm32
-		0x03	ssbl-boot	Binary	none	0x0		u-boot.stm32
P		0x04	fsbl1		Binary	mmc1	boot1	tf-a-stm32mp157d-atk-trusted.stm32
P		0x05	fsbl2		Binary	mmc1	boot2	tf-a-stm32mp157d-atk-trusted.stm32

 将上面4个文件放到同一文件夹下,注意:文件夹名字一定是要英文!!!

 

烧录文件

  1. 拨码开关设置000

  2. 连接USB-OTG

3.复位开发板

4.打开STM32CubeProgrammer,点击“+”,选择“Open File”,或者直接选择“Open File

 5.找到要烧录的tsv文件,打开

 6.选择USB

 7.点击“刷新”,会出现“USB1”,再点击“Connect”进行连接到开发板

8.把STM32CubeProgrammer 界面托长,露出“Browse”,点击“Browse”  

 9.选择烧录文件的路径,点击“选择

 10.点击“Download

11.烧录完成,点击“确定

 

12.拨码开关设置为010,复位开发板

查看TF-A烧录时间

        复位开发板后,可以在串口调试助手上可以看到TF-A的烧录时间,但是这个时间有问题,这个时间是编译生成tf-a-stm32mp157d-atk-trusted.stm32文件的时间

 

对于STM32MP157系统移植,以下是一个大致的步骤: 1. 了解硬件平台:熟悉STM32MP157的硬件特性和主要组件,包括处理器核心、外设、存储器等。 2. 准备开发环境:安装交叉编译工具链和相关开发工具,例如GCC编译器、Make工具等。 3. 获取源代码:从STMicroelectronics官方网站下载适用于STM32MP157Linux发行版源代码。这些源代码包含了内核、设备树、驱动程序等。 4. 配置内核:根据目标应用需求,对内核进行配置。可以通过make menuconfig命令进入配置界面,选择所需的内核功能和驱动程序。 5. 编译内核:使用交叉编译工具链编译内核源代码。可以通过make命令进行编译,并生成内核镜像文件。 6. 配置设备树:设备树描述了硬件平台的信息,包括外设的连接和配置。根据实际硬件情况,编辑设备树文件。 7. 编译设备树:使用设备树编译器(DTC)将设备树文件编译为二进制格式。 8. 准备启动介质:准备启动介质,例如SD卡或eMMC闪存。将编译好的内核镜像和设备树文件拷贝到启动介质中。 9. 配置启动参数:通过在启动介质的引导配置文件中指定内核镜像和设备树文件的路径,配置启动参数。 10. 启动系统:将启动介质插入目标硬件平台,启动系统系统会加载内核镜像和设备树文件,完成系统初始化。 以上是一个简要的步骤概述,实际的系统移植过程中可能还涉及到其他细节和配置。具体步骤和操作可以参考STMicroelectronics官方提供的文档和开发者社区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

因心,三人水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值