“STM32MP15 TF-A”的版本间的差异
Zhouyuebiao(讨论 | 贡献) (创建页面,内容为“== Article Purpose == This section details the process used to build TF-A from sources and to deploy it on your target.<br> The build example is based on the OpenSTL…”) |
|||
(未显示同一用户的1个中间版本) | |||
第1行: | 第1行: | ||
== Article Purpose == | == Article Purpose == | ||
− | + | 本节详细介绍了从源构建TF-A并将其部署到目标上的过程。<br> | |
− | + | 构建示例基于OpenSTLinux环境: | |
− | * | + | * 开发人员包 |
− | * | + | * 程序的发行包 |
== Overview == | == Overview == | ||
− | TF- | + | TF-A是ST受信任引导链的FSBL。它必须根据您的平台进行配置或更新。<br> |
<br> | <br> | ||
− | + | TF-A的交叉编译仅在需要修改时才需要。 默认情况下,在入门包中,TF-A映像的名称为: | |
− | + | tf-<board>-trusted.stm32.<br> | |
+ | 进行更改后,您必须重建TF-A并使用此新映像更新引导设备的所有FSBL分区。 第二个FSBL映像用作备用映像。 | ||
<br> | <br> | ||
− | + | 构建过程将创建完整的STM32映像,该映像可用于Flash集成特定的[[STM32MP15 secure boot#STM32_Header|header]].<br> | |
− | + | ||
− | + | 此受信任的固件-A映像包含设备树,BL2和BL32级。<br> | |
+ | 这些二进制文件是在构建过程中一步完成的。 | ||
[[File:Atf.stm32.png|300px|center|link=]] | [[File:Atf.stm32.png|300px|center|link=]] | ||
<br> | <br> | ||
第20行: | 第22行: | ||
== Developer Package == | == Developer Package == | ||
=== Install sources === | === Install sources === | ||
− | + | 开发包包含OpenSTLinux和TF-A源: | |
[[STM32MP1_Developer_Package#Installing the TF-A|TF-A Installation]] | [[STM32MP1_Developer_Package#Installing the TF-A|TF-A Installation]] | ||
=== Official source tree === | === Official source tree === | ||
− | {{Warning| | + | {{Warning|STM32MP1平台尚未完全上行。 因此此存储库中的功能不可用}} |
− | + | 从官方GitHub下载源代码 | |
{{PC$}} git clone https://github.com/ARM-software/arm-trusted-firmware.git | {{PC$}} git clone https://github.com/ARM-software/arm-trusted-firmware.git | ||
− | + | 从内部git下载源代码 | |
− | |||
− | |||
{{PC$}} git clone ssh://gerrit.st.com:29418/mpu/oe/st/tf-a.git | {{PC$}} git clone ssh://gerrit.st.com:29418/mpu/oe/st/tf-a.git | ||
− | |||
=== Build Process === | === Build Process === | ||
第39行: | 第38行: | ||
==== TF-A Build flags ==== | ==== TF-A Build flags ==== | ||
− | + | ||
− | + | 强制性标志: | |
− | * ARM_ARCH_MAJOR=7: | + | * ARM_ARCH_MAJOR=7: 要针对的ARM体系结构的主要版本(STM32MP15基于ARMv7体系结构) |
− | * ARCH=aarch32: | + | * ARCH=aarch32: 指定要构建的aarch32体系结构 |
− | * PLAT=stm32mp1: | + | * PLAT=stm32mp1: 构建一个stm32mp1平台 |
− | * DTB_FILE_NAME=<fdt file name>.dtb: | + | * DTB_FILE_NAME=<fdt file name>.dtb: 必须定义此名称以构建适当的目标并将正确的DTB文件包括到最终文件中 |
* AARCH32_SP=<monitor> | * AARCH32_SP=<monitor> | ||
− | ** sp_min: | + | ** sp_min: 如果需要,可构建BL32安全监视器 |
− | ** optee: | + | ** optee: 不要包括BL32,并准备BL2以应对optee专用的负载,这也需要使用'STM32MP_BOOT_ONLY {{=}} 1'选项进行构建。 |
+ | |||
+ | 可选标志: | ||
+ | * STM32MP_BOOT_ONLY{{=}}1: 构建所有存储驱动程序支持(串行除外)(不支持stm32_programmer)。OP-TEE模式必需。 | ||
+ | * STM32MP_FLASHLOADER_ONLY{{=}}1: 仅构建串行链接驱动程序支持(UART / USB)和stm32_programmer支持。 | ||
+ | * DEBUG{{=}}1: 在所有二进制文件中添加调试信息 | ||
+ | * V{{=}}1: 打印详细的编译痕迹 | ||
+ | |||
+ | * STM32MP_FPGA{{=}}1: 包括FPGA特定代码(与板不兼容) | ||
+ | * STM32MP1_TEST{{=}}1: 启用特定SMC以进行测试(强制验证) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<div class="mw-collapsible mw-collapsed"> | <div class="mw-collapsible mw-collapsed"> | ||
− | + | ||
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
− | + | 强制性标志: | |
− | * ARM_ARCH_MAJOR=7: | + | * ARM_ARCH_MAJOR=7: 面向的主要ARM体系结构版本(STM32MP15基于ARMv7体系结构) |
− | * ARCH=aarch32: | + | * ARCH=aarch32: 指定要构建的aarch32体系结构 |
− | * PLAT=stm32mp1: | + | * PLAT=stm32mp1: 构建一个stm32mp1平台 |
− | * DTB_FILE_NAME=<fdt file name>.dtb: | + | * DTB_FILE_NAME=<fdt file name>.dtb: 必须定义此名称以构建适当的目标并将正确的DTB文件包括到最终文件中 |
* AARCH32_SP=<monitor> | * AARCH32_SP=<monitor> | ||
− | ** sp_min: | + | ** sp_min: 如果需要,可构建BL32安全监视器 |
− | ** optee: | + | ** optee: 不包括BL32并准备BL2以应对Optee特定的负载 |
− | + | 可选标志: | |
− | * DEBUG{{=}}1: | + | * DEBUG{{=}}1: 在所有二进制文件中添加调试信息 |
− | * V{{=}}1: | + | * V{{=}}1: 打印详细的编译痕迹 |
− | + | * STM32MP_FPGA{{=}}1: 包括FPGA特定代码(与板不兼容) | |
− | * STM32MP_FPGA{{=}}1: | + | * STM32MP1_TEST{{=}}1: 启用特定SMC以进行测试(强制验证) |
− | * STM32MP1_TEST{{=}}1: | ||
− | |||
</div></div> | </div></div> | ||
=== Build command === | === Build command === | ||
− | + | 在开发人员包 tarball 中,存在一个Makefile.sdk,必须使用它来构建目标。 | |
− | + | 它会自动为TF-A版本设置正确的配置。<br> | |
{{PC$}} make -f Makefile.sdk TF_A_CONFIG=trusted TFA_DEVICETREE=stm32mp157c-<board> | {{PC$}} make -f Makefile.sdk TF_A_CONFIG=trusted TFA_DEVICETREE=stm32mp157c-<board> | ||
− | The latest version of the helper file is also available in this user guide: [ | + | The latest version of the helper file is also available in this user guide: [https://github.com/STMicroelectronics/meta-st-stm32mp/blob/dunfell/recipes-bsp/trusted-firmware-a/tf-a-stm32mp/README.HOW_TO.txt README.HOW_TO.txt] |
+ | {{Warning|必须设置DTB_FILE_NAME标志才能选择正确的电路板配置。<br> | ||
+ | 目标的设备树文件必须位于fdts文件夹中 (stm32mp157c-<board>.dts)}} | ||
− | + | 如果不存在Makefile.sdk,则必须添加自己的环境标志: | |
− | |||
− | |||
− | |||
{{PC$}} unset LDFLAGS; | {{PC$}} unset LDFLAGS; | ||
{{PC$}} unset CFLAGS; | {{PC$}} unset CFLAGS; | ||
第94行: | 第90行: | ||
=== Final image === | === Final image === | ||
− | + | 最终映像可用于相应文件夹中的Flash或SD卡更新: | |
<pre> | <pre> | ||
build/<target>/<debug|release>/tf-a-<target>.stm32 | build/<target>/<debug|release>/tf-a-<target>.stm32 | ||
第102行: | 第98行: | ||
== Distribution Package == | == Distribution Package == | ||
− | + | 对于OpenSTLinux发行版,默认情况下TF-A映像以发布模式构建。yocto配方可以在以下位置找到:<br> | |
<pre> | <pre> | ||
meta-st/meta-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_<version>.bb | meta-st/meta-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_<version>.bb | ||
</pre> | </pre> | ||
− | + | 如果您想修改TF-A代码源,请从已经下载并构建的OpenSTLinux发行版开始执行以下步骤。 | |
=== Access sources === | === Access sources === | ||
− | + | 您可以使用[[OpenEmbedded_-_devtool|devtool]]来访问源代码。 | |
{{PC$}} cd <baseline root directory> | {{PC$}} cd <baseline root directory> | ||
{{PC$}} devtool modify tf-a-stm32mp sources/boot/tf-a | {{PC$}} devtool modify tf-a-stm32mp sources/boot/tf-a | ||
− | + | 通过转到 Sources/boot/tf-a 文件夹,您可以管理和修改TF-A源文件。 | |
− | + | 要重新构建它,请返回到build-<Distribution>文件夹并启动TF-A配方: | |
{{PC$}} bitbake tf-a-stm32mp | {{PC$}} bitbake tf-a-stm32mp | ||
− | + | 最终映像部署在映像默认输出文件夹中。 | |
== Update software on board == | == Update software on board == | ||
=== Partitioning of binaries === | === Partitioning of binaries === | ||
− | + | TF-A构建提供了一个名为TF-A-stm32mp157c-<board>.stm32的二进制文件,必须将其复制到名为“fsblX”的专用分区(X取决于所需的备份)。 | |
− | {{Warning|TF- | + | {{Warning|TF-A必须位于引导设备的第一个分区中。<br> |
− | + | 您可以只更新第一个分区进行简单的测试,但所有备份分区的末尾都必须包含相同的映像。 | |
}} | }} | ||
=== Update via SDCARD === | === Update via SDCARD === | ||
− | + | 如果使用SD卡,则只需在主机上使用dd命令更新TF-A。<br> | |
− | + | 将SD卡插入计算机,然后将二进制文件复制到专用分区;在SD卡/USB磁盘上,“fsbl1”分区是分区1: | |
- SDCARD: /dev/mmcblkXp1 (where X is the instance number) | - SDCARD: /dev/mmcblkXp1 (where X is the instance number) | ||
- SDCARD via USB reader: /dev/sdX1 (where X is the instance number) | - SDCARD via USB reader: /dev/sdX1 (where X is the instance number) | ||
第135行: | 第131行: | ||
{{PC$}} dd if=<tf-a file> of=/dev/<device partition> bs=1M conv=fdatasync | {{PC$}} dd if=<tf-a file> of=/dev/<device partition> bs=1M conv=fdatasync | ||
− | {{Info| | + | {{Info| 要查找与特定标签相关联的分区,只需将SD卡/U盘插入您的PC,然后调用以下命令: |
− | |||
{{PC$}} ls -l /dev/disk/by-partlabel/ | {{PC$}} ls -l /dev/disk/by-partlabel/ | ||
第149行: | 第144行: | ||
* Windows | * Windows | ||
− | + | 现有的Windows dd可以实现二进制复制 | |
=== Update via USB mass storage on U-boot === | === Update via USB mass storage on U-boot === | ||
See [[How to use USB mass storage in U-Boot]] | See [[How to use USB mass storage in U-Boot]] | ||
− | + | 按照上一节将tf-a-<board>.stm32放入SD卡/U盘 | |
− | |||
=== Update your boot device (including SD card on the target) === | === Update your boot device (including SD card on the target) === | ||
− | + | 请参阅[[STM32CubeProgrammer]]文档用以更新您的目标。 | |
− | |||
− | |||
− | |||
− | |||
− |
2020年11月2日 (一) 15:53的最新版本
目录
Article Purpose
本节详细介绍了从源构建TF-A并将其部署到目标上的过程。
构建示例基于OpenSTLinux环境:
- 开发人员包
- 程序的发行包
Overview
TF-A是ST受信任引导链的FSBL。它必须根据您的平台进行配置或更新。
TF-A的交叉编译仅在需要修改时才需要。 默认情况下,在入门包中,TF-A映像的名称为:
tf-<board>-trusted.stm32.
进行更改后,您必须重建TF-A并使用此新映像更新引导设备的所有FSBL分区。 第二个FSBL映像用作备用映像。
构建过程将创建完整的STM32映像,该映像可用于Flash集成特定的header.
此受信任的固件-A映像包含设备树,BL2和BL32级。
这些二进制文件是在构建过程中一步完成的。
Developer Package
Install sources
开发包包含OpenSTLinux和TF-A源: TF-A Installation
Official source tree
STM32MP1平台尚未完全上行。 因此此存储库中的功能不可用 |
从官方GitHub下载源代码
PC $> git clone https://github.com/ARM-software/arm-trusted-firmware.git
从内部git下载源代码
PC $> git clone ssh://gerrit.st.com:29418/mpu/oe/st/tf-a.git
Build Process
Initialise the cross compile environment
TF-A Build flags
强制性标志:
- ARM_ARCH_MAJOR=7: 要针对的ARM体系结构的主要版本(STM32MP15基于ARMv7体系结构)
- ARCH=aarch32: 指定要构建的aarch32体系结构
- PLAT=stm32mp1: 构建一个stm32mp1平台
- DTB_FILE_NAME=<fdt file name>.dtb: 必须定义此名称以构建适当的目标并将正确的DTB文件包括到最终文件中
- AARCH32_SP=<monitor>
- sp_min: 如果需要,可构建BL32安全监视器
- optee: 不要包括BL32,并准备BL2以应对optee专用的负载,这也需要使用'STM32MP_BOOT_ONLY = 1'选项进行构建。
可选标志:
- STM32MP_BOOT_ONLY=1: 构建所有存储驱动程序支持(串行除外)(不支持stm32_programmer)。OP-TEE模式必需。
- STM32MP_FLASHLOADER_ONLY=1: 仅构建串行链接驱动程序支持(UART / USB)和stm32_programmer支持。
- DEBUG=1: 在所有二进制文件中添加调试信息
- V=1: 打印详细的编译痕迹
- STM32MP_FPGA=1: 包括FPGA特定代码(与板不兼容)
- STM32MP1_TEST=1: 启用特定SMC以进行测试(强制验证)
强制性标志:
- ARM_ARCH_MAJOR=7: 面向的主要ARM体系结构版本(STM32MP15基于ARMv7体系结构)
- ARCH=aarch32: 指定要构建的aarch32体系结构
- PLAT=stm32mp1: 构建一个stm32mp1平台
- DTB_FILE_NAME=<fdt file name>.dtb: 必须定义此名称以构建适当的目标并将正确的DTB文件包括到最终文件中
- AARCH32_SP=<monitor>
- sp_min: 如果需要,可构建BL32安全监视器
- optee: 不包括BL32并准备BL2以应对Optee特定的负载
可选标志:
- DEBUG=1: 在所有二进制文件中添加调试信息
- V=1: 打印详细的编译痕迹
- STM32MP_FPGA=1: 包括FPGA特定代码(与板不兼容)
- STM32MP1_TEST=1: 启用特定SMC以进行测试(强制验证)
Build command
在开发人员包 tarball 中,存在一个Makefile.sdk,必须使用它来构建目标。
它会自动为TF-A版本设置正确的配置。
PC $> make -f Makefile.sdk TF_A_CONFIG=trusted TFA_DEVICETREE=stm32mp157c-<board>
The latest version of the helper file is also available in this user guide: README.HOW_TO.txt
必须设置DTB_FILE_NAME标志才能选择正确的电路板配置。 目标的设备树文件必须位于fdts文件夹中 (stm32mp157c-<board>.dts) |
如果不存在Makefile.sdk,则必须添加自己的环境标志:
PC $> unset LDFLAGS; PC $> unset CFLAGS; PC $> make ARM_ARCH_MAJOR=7 ARCH=aarch32 PLAT=stm32mp1 AARCH32_SP=sp_min DTB_FILE_NAME=stm32mp157c-<board>.dtb
Final image
最终映像可用于相应文件夹中的Flash或SD卡更新:
build/<target>/<debug|release>/tf-a-<target>.stm32 Ex: build/stm32mp1/debug/tf-a-stm32mp157c-ev1.stm32
Distribution Package
对于OpenSTLinux发行版,默认情况下TF-A映像以发布模式构建。yocto配方可以在以下位置找到:
meta-st/meta-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_<version>.bb
如果您想修改TF-A代码源,请从已经下载并构建的OpenSTLinux发行版开始执行以下步骤。
Access sources
您可以使用devtool来访问源代码。
PC $> cd <baseline root directory> PC $> devtool modify tf-a-stm32mp sources/boot/tf-a
通过转到 Sources/boot/tf-a 文件夹,您可以管理和修改TF-A源文件。 要重新构建它,请返回到build-<Distribution>文件夹并启动TF-A配方:
PC $> bitbake tf-a-stm32mp
最终映像部署在映像默认输出文件夹中。
Update software on board
Partitioning of binaries
TF-A构建提供了一个名为TF-A-stm32mp157c-<board>.stm32的二进制文件,必须将其复制到名为“fsblX”的专用分区(X取决于所需的备份)。
TF-A必须位于引导设备的第一个分区中。 您可以只更新第一个分区进行简单的测试,但所有备份分区的末尾都必须包含相同的映像。 |
Update via SDCARD
如果使用SD卡,则只需在主机上使用dd命令更新TF-A。
将SD卡插入计算机,然后将二进制文件复制到专用分区;在SD卡/USB磁盘上,“fsbl1”分区是分区1:
- SDCARD: /dev/mmcblkXp1 (where X is the instance number) - SDCARD via USB reader: /dev/sdX1 (where X is the instance number)
- Linux
PC $> dd if=<tf-a file> of=/dev/<device partition> bs=1M conv=fdatasync
要查找与特定标签相关联的分区,只需将SD卡/U盘插入您的PC,然后调用以下命令:
PC $> ls -l /dev/disk/by-partlabel/ total 0 lrwxrwxrwx 1 root root 10 Jan 17 17:38 bootfs -> ../../mmcblk0p4 lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl1 -> ../../mmcblk0p1 ➔ FSBL1 (TF-A) lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl2 -> ../../mmcblk0p2 ➔ FSBL2 (TF-A backup – same content as FSBL) lrwxrwxrwx 1 root root 10 Jan 17 17:38 rootfs -> ../../mmcblk0p5 lrwxrwxrwx 1 root root 10 Jan 17 17:38 ssbl -> ../../mmcblk0p3 ➔ SSBL (U-Boot) lrwxrwxrwx 1 root root 10 Jan 17 17:38 userfs -> ../../mmcblk0p6 |
- Windows
现有的Windows dd可以实现二进制复制
Update your boot device (including SD card on the target)
请参阅STM32CubeProgrammer文档用以更新您的目标。