Hello list,
I was wondering what I am doing wrong following the procedure explained
in the doc/board/st/stm32mp1.rst documentation file.
I am using the latest git version (the Makefile says 2021.07).
My goal is to run from sdcard in trusted boot chain (TrustZone secure
monitor) the evaluation kit STM32MP157C-DK2.
The procedure says:
The **Trusted** boot chain
``````````````````````````
defconfig_file : stm32mp15_trusted_defconfig
+-------------+-------------------------+------------+-------+
| ROM code | FSBL | SSBL | OS |
+ +-------------------------+------------+-------+
| |Trusted Firmware-A (TF-A)| U-Boot | Linux |
+-------------+-------------------------+------------+-------+
| TrustZone |secure monitor |
+-------------+-------------------------+------------+-------+
TF-A performs a full initialization of Secure peripherals and installs a
secure monitor, BL32:
* SPMin provided by TF-A or
* OP-TEE from specific partitions (teeh, teed, teex).
U-Boot is running in normal world and uses the secure monitor to access
to secure resources.
As far as I understand there is only a single first-stage-boot-loader
(FSBL) and a second-stage-boot-loader (SSBL), otherwise in the *Basic
Boot Chain* I have FSBL1 and FSBL2 _and_ a SSBL.
Build Procedure
---------------
1. Install the required tools for U-Boot
* install package needed in U-Boot makefile
(libssl-dev, swig, libpython-dev...)
* install ARMv7 toolchain for 32bit Cortex-A (from Linaro,
from SDK for STM32MP15x, or any crosstoolchains from your distribution)
(you can use any gcc cross compiler compatible with U-Boot)
Done. I am in a Debian Buster DevelWorkstation, so everything is coming
from the official repos.
At the moment the arm toolchain is: > arm-linux-gnueabihf-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/8/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-2'
--with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs
--enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr
--with-gcc-major-version-only --program-suffix=-8 --enable-shared
--enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/
--enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm
--disable-libquadmath --disable-libquadmath-support --enable-plugin
--enable-default-pie --with-system-zlib --with-target-system-zlib
--enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a
--with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf-
--includedir=/usr/arm-linux-gnueabihf/include
Thread model: posix
gcc version 8.3.0 (Debian 8.3.0-2)
2. Set the cross compiler::
# export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-
export CROSS_COMPILE=arm-linux-gnueabihf-
3. Select the output directory (optional)::
# export KBUILD_OUTPUT=/path/to/output
for example: use one output directory for each configuration::
# export KBUILD_OUTPUT=stm32mp15_trusted
export KBUILD_OUTPUT=stm32mp15_trusted
4. Configure U-Boot::
# make <defconfig_file>
with <defconfig_file>:
- For **trusted** boot mode : **stm32mp15_trusted_defconfig**
make stm32mp15_trusted_defconfig
make[1]: Entering directory
'/home/gianluca/Progetti-GIT/stm32mp1-debian/bootrom/downloads/u-boot-2021.07/stm32mp15_trusted'
HOSTCC scripts/basic/fixdep
GEN Makefile
HOSTCC scripts/kconfig/conf.o
YACC scripts/kconfig/zconf.tab.c
LEX scripts/kconfig/zconf.lex.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory
'/home/gianluca/Progetti-GIT/stm32mp1-debian/bootrom/downloads/u-boot-2021.07/stm32mp15_trusted'
5. Configure the device-tree and build the U-Boot image::
# make DEVICE_TREE=<name> all
make DEVICE_TREE=stm32mp157c-dk2 all
make[1]: Entering directory
'/home/gianluca/Progetti-GIT/stm32mp1-debian/bootrom/downloads/u-boot-2021.07/stm32mp15_trusted'
GEN Makefile
scripts/kconfig/conf --syncconfig Kconfig
UPD include/config.h
CFG u-boot.cfg
GEN include/autoconf.mk
GEN include/autoconf.mk.dep
CFGCHK u-boot.cfg
UPD include/config/uboot.release
Using .. as source for U-Boot
GEN Makefile
UPD include/generated/version_autogenerated.h
UPD include/generated/timestamp_autogenerated.h
UPD include/generated/dt.h
...
...
...
CC net/tftp.o
AR net/built-in.o
LDS u-boot.lds
LD u-boot
OBJCOPY u-boot-nodtb.bin
DTC arch/arm/dts/stm32mp157a-dk1.dtb
DTC arch/arm/dts/stm32mp157a-avenger96.dtb
DTC arch/arm/dts/stm32mp157a-icore-stm32mp1-ctouch2.dtb
DTC arch/arm/dts/stm32mp157a-icore-stm32mp1-edimm2.2.dtb
DTC arch/arm/dts/stm32mp157a-microgea-stm32mp1-microdev2.0.dtb
DTC arch/arm/dts/stm32mp157a-microgea-stm32mp1-microdev2.0-of7.dtb
DTC arch/arm/dts/stm32mp157c-dk2.dtb
DTC arch/arm/dts/stm32mp157c-ed1.dtb
DTC arch/arm/dts/stm32mp157c-ev1.dtb
DTC arch/arm/dts/stm32mp157c-odyssey.dtb
DTC arch/arm/dts/stm32mp15xx-dhcom-drc02.dtb
DTC arch/arm/dts/stm32mp15xx-dhcom-pdk2.dtb
DTC arch/arm/dts/stm32mp15xx-dhcom-picoitx.dtb
DTC arch/arm/dts/stm32mp15xx-dhcor-avenger96.dtb
SHIPPED dts/dt.dtb
CAT u-boot-dtb.bin
COPY u-boot.bin
MKIMAGE u-boot.stm32
OBJCOPY u-boot.srec
SYM u-boot.sym
COPY u-boot.dtb
make[1]: Leaving directory
'/home/gianluca/Progetti-GIT/stm32mp1-debian/bootrom/downloads/u-boot-2021.07/stm32mp15_trusted'
6. Output files
BootRom and TF-A expect binaries with STM32 image header
SPL expects file with U-Boot uImage header
So in the output directory (selected by KBUILD_OUTPUT),
you can found the needed files:
- For **Trusted** boot (with or without OP-TEE)
- FSBL = **tf-a.stm32** (provided by TF-A compilation)
- SSBL = **u-boot.stm32**
No tf-a.stm32 for TrustZone Boot but only the u-boot.stm32 file.
- For Basic boot
- FSBL = spl/u-boot-spl.stm32
- SSBL = u-boot.img
find . -name 'tf-a.stm32'
find . -name '*tf-a*'
find . -name '*tfa*'
./include/config/tfaboot.h
./include/config/arch/support/tfaboot.h
Where is the tf-a.stm32?????
Something missing by my side???
Regards,
Gianluca Renzi
--
Eurek s.r.l. |
Electronic Engineering | http://www.eurek.it
via Celletta 8/B, 40026 Imola, Italy | Phone: +39-(0)542-609120
p.iva 00690621206 - c.f. 04020030377 | Fax: +39-(0)542-609212