Registered User mNo edit summary |
Registered User Tag: 2017 source edit |
||
(33 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
<noinclude>{{ApplicableFor | <noinclude>{{ApplicableFor | ||
|MPUs list=STM32MP13x, STM32MP15x | |MPUs list=STM32MP13x, STM32MP15x, STM32MP25x | ||
|MPUs checklist=STM32MP13x,STM32MP15x | |MPUs checklist=STM32MP13x,STM32MP15x, STM32MP25x | ||
}}</noinclude> | }}</noinclude> | ||
This article describes how to get and use the '''Developer Package''' of the '''STM32MPU Embedded Software''' for any development platform of the '''{{MicroprocessorDevice | device=1}}''' ([[:Category:STM32_MPU_boards#More_about_STM32MP15_boards|STM32MP15 boards]] and [[:Category:STM32_MPU_boards#More_about_STM32MP13_boards|STM32MP13 boards]]), in order to modify some of its pieces of software, or to add applications on top of it. | This article describes how to get and use the '''Developer Package''' of the '''STM32MPU Embedded Software''' for any development platform of the '''{{MicroprocessorDevice | device=1}}''' ([[:Category:STM32_MPU_boards#More_about_STM32MP15_boards|STM32MP15 boards]] and [[:Category:STM32_MPU_boards#More_about_STM32MP13_boards|STM32MP13 boards]]) and '''{{MicroprocessorDevice | device=2}}''' ([[:Category:STM32_MPU_boards#More_about_STM32MP25_boards|STM32MP25 boards]]), in order to modify some of its pieces of software, or to add applications on top of it. | ||
It lists some '''prerequisites''' in terms of | It lists some '''prerequisites''' in terms of knowledge and development environment, and gives the '''step-by-step''' approach to download and install the STM32MPU Embedded Software components for this Package. | ||
Finally, it proposes some guidelines to upgrade (add, remove, configure, improve...) any piece of software. | Finally, it proposes some guidelines to upgrade (add, remove, configure, improve...) any piece of software. | ||
Line 18: | Line 18: | ||
To sum up, this '''Developer Package''' provides: | To sum up, this '''Developer Package''' provides: | ||
* for the '''OpenSTLinux distribution''' (development on Arm<sup>®</sup> Cortex<sup>®</sup>-A processor): | * for the '''OpenSTLinux distribution''' (development on Arm<sup>®</sup> Cortex<sup>®</sup>-A processor): | ||
** the '''software development kit''' (SDK), based on Yocto SDK, for cross-development on | ** the '''software development kit''' (SDK), based on Yocto SDK, for cross-development on a host PC | ||
** the following pieces of software in '''source code''': | ** the following pieces of software in '''source code''': | ||
*** Linux<sup>®</sup> kernel | *** Linux<sup>®</sup> kernel | ||
Line 25: | Line 25: | ||
*** Trusted Firmware-A (TF-A) | *** Trusted Firmware-A (TF-A) | ||
*** Open source Trusted Execution Environment (OP-TEE) | *** Open source Trusted Execution Environment (OP-TEE) | ||
** | *** External device tree (for '''{{MicroprocessorDevice | device=25}} only''') | ||
* for the | * for the Cortex<sup>®</sup>-M processor firmware development (only for '''{{MicroprocessorDevice | device=15}}''' and '''{{MicroprocessorDevice | device=25}}): | ||
** the '''integrated development environment (IDE)''' ([[STM32CubeIDE]]) | ** the '''integrated development environment (IDE)''' ([[STM32CubeIDE]]) | ||
Note that | ** the '''STM32CubeMPU Package''' including all pieces of software (BSP, HAL, middlewares, and applications) in '''source code''' | ||
** the Trusted Firmware-M (TF-M) in '''source code''' (for '''{{MicroprocessorDevice | device=25}} only''') | |||
[[File: STM32_MPU_Embedded_Software_Developer_Package.png|frame|center|link=|Components of the Developer Package]] | * the '''debug symbol files''' for Linux<sup>®</sup> kernel, U-Boot, TF-A, OP-TEE, and TF-M (for '''{{MicroprocessorDevice | device=25}} only''') | ||
Note that the application frameworks for the OpenSTLinux distribution are not available as source code in this Package. | |||
[[File: STM32_MPU_Embedded_Software_Developer_Package.png|frame|center|link=|Components of the Developer Package<br>'''TF-M''' is available only for '''{{MicroprocessorDevice | device=25}}''']] | |||
==Developer Package step-by-step overview== | ==Developer Package step-by-step overview== | ||
{{highlight|'''The steps to get the STM32MPU Embedded Software Developer Package ready for your developments | {{highlight|'''The steps to get the STM32MPU Embedded Software Developer Package ready for your developments are:'''}} <br> | ||
<span style="font-size:21px">☐</span> [[#Checking the prerequisites|Checking the prerequisites]] <br> | <span style="font-size:21px">☐</span> [[#Checking the prerequisites|Checking the prerequisites]] <br> | ||
<span style="font-size:21px">☐</span> [[#Installing the Starter Package|Installing the Starter Package for your board]] <br> | <span style="font-size:21px">☐</span> [[#Installing the Starter Package|Installing the Starter Package for your board]] <br> | ||
Line 41: | Line 42: | ||
:<span style="font-size:21px">☐</span> [[#Installing the SDK|Installing the SDK]] ('''mandatory''' for any development on Arm<sup>®</sup> Cortex<sup>®</sup>-A) <br> | :<span style="font-size:21px">☐</span> [[#Installing the SDK|Installing the SDK]] ('''mandatory''' for any development on Arm<sup>®</sup> Cortex<sup>®</sup>-A) <br> | ||
:<span style="font-size:21px">☐</span> [[#Installing the OpenSTLinux BSP packages|Installing the OpenSTLinux BSP package]] ('''mandatory only''' if you plan to modify the Linux kernel, to add external out-of-tree Linux kernel modules, to modify U-Boot, TF-A, OP-TEE OS) <br> | :<span style="font-size:21px">☐</span> [[#Installing the OpenSTLinux BSP packages|Installing the OpenSTLinux BSP package]] ('''mandatory only''' if you plan to modify the Linux kernel, to add external out-of-tree Linux kernel modules, to modify U-Boot, TF-A, OP-TEE OS) <br> | ||
:<span style="font-size:21px">☐</span> [[#Installing the debug symbol files|Installing the debug symbol files]] ('''mandatory only''' if you plan to debug Linux<sup>®</sup> kernel, U-Boot, OP-TEE or TF-A with GDB)<br> | :<span style="font-size:21px">☐</span> [[#Installing the debug symbol files|Installing the debug symbol files]] ('''mandatory only''' if you plan to debug Linux<sup>®</sup> kernel, U-Boot, OP-TEE, or TF-A with GDB)<br> | ||
<span style="font-size:21px">☐</span> Installing the components to develop software running Arm Cortex-M (STM32CubeMPU Package) | <span style="font-size:21px">☐</span> Installing the components to develop software running Arm Cortex-M (STM32CubeMPU Package) | ||
:<span style="font-size:21px">☐</span> [[#Installing STM32CubeIDE|Installing STM32CubeIDE]] ('''mandatory''' for any development on Arm<sup>®</sup> Cortex<sup>®</sup>-M) <br> | :<span style="font-size:21px">☐</span> [[#Installing STM32CubeIDE|Installing STM32CubeIDE]] ('''mandatory''' for any development on Arm<sup>®</sup> Cortex<sup>®</sup>-M) <br> | ||
:<span style="font-size:21px">☐</span> [[#Installing the STM32CubeMPU Package|Installing the STM32CubeMPU Package]] ('''mandatory only''' if you plan to modify the STM32Cube firmware) <br> | :<span style="font-size:21px">☐</span> [[#Installing the STM32CubeMPU Package|Installing the STM32CubeMPU Package]] ('''mandatory only''' if you plan to modify the STM32Cube firmware) <br> | ||
Once these steps are achieved, you are able to: | Once these steps are achieved, you are able to: | ||
* develop software running on Arm Cortex-A | * develop software running on Arm Cortex-A | ||
** [[#Modifying the Linux kernel|Modifying the Linux kernel]] | ** [[#Modifying the Linux kernel|Modifying the Linux kernel]] | ||
** [[#Adding Linux user space applications|Adding Linux user space applications]] | ** [[#Adding Linux user space applications|Adding Linux user space applications]] | ||
** [[#Modifying the U-Boot|Modifying the U-Boot]] | ** [[#Modifying the U-Boot|Modifying the U-Boot]] | ||
** [[#Modifying the TF-A|Modifying the TF-A]] | ** [[#Modifying the TF-A|Modifying the TF-A]] | ||
* [[#Developing software running on Arm Cortex- | ** [[#Modifying the OP-TEE|Modifying the OP-TEE]] | ||
{{ | * [[#Developing software running on Arm Cortex-M|develop software running on Arm Cortex-M]] ({{highlight|only on {{MicroprocessorDevice | device=15}} and {{MicroprocessorDevice | device=25}}}}) | ||
==Checking the prerequisites== | ==Checking the prerequisites== | ||
===Knowledges=== | ===Knowledges=== | ||
The | {{ReviewsComments|-- [[User:Olivier Durand|Olivier Durand]] ([[User talk:Olivier Durand|talk]]) 18:29, 18 August 2024 (CEST)<br />"knowledges", usually this word isn't countable.}} | ||
The STM32MPU Developer Package aims at enriching a Linux-based software for the targeted product: basic knowledge about Linux are recommended to make the most of this Package. | |||
Having a look at the [[STM32MPU Embedded Software architecture overview]] is also highly recommended. | Having a look at the [[STM32MPU Embedded Software architecture overview]] is also highly recommended. | ||
Line 71: | Line 71: | ||
In brief, it means that: | In brief, it means that: | ||
* your board boots successfully | * your board boots successfully | ||
* the flashed image comes from the same release of the STM32MPU Embedded Software distribution | * the flashed image comes from the same release of the STM32MPU Embedded Software distribution as the components that will be downloaded in this article | ||
Thanks to the Starter Package, '''all [[STM32 MPU Flash mapping#Flash partitions|Flash partitions]] are populated'''. | Thanks to the Starter Package, '''all [[STM32 MPU Flash mapping#Flash partitions|Flash partitions]] are populated'''. | ||
Line 82: | Line 82: | ||
===Installing the SDK=== | ===Installing the SDK=== | ||
{{Highlight|Optional step}}''': it is mandatory only if you want to modify or add software running on Arm Cortex-A ( | {{Important| It is highly recommended to use the SDK provided here and not stuck on the SDK provided during the previous release. Effectively, some major improvements have been made since the previous release}} | ||
{{Highlight|Optional step}}''': it is mandatory only if you want to modify or add software running on Arm Cortex-A (for example Linux kernel, Linux user space applications...).''' | |||
The SDK for OpenSTLinux distribution provides a stand-alone cross-development toolchain and libraries tailored to the contents of the specific image flashed in the board. If you want to know more about this SDK, read the [[SDK for OpenSTLinux distribution]] article. | The SDK for OpenSTLinux distribution provides a stand-alone cross-development toolchain and libraries tailored to the contents of the specific image flashed in the board. If you want to know more about this SDK, read the [[SDK for OpenSTLinux distribution]] article. | ||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=1}}''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP1 Developer Package - SDK}} | {{:STM32MP1 Developer Package - SDK}} | ||
</div></div> | |||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=25}}''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP2 Developer Package - SDK}} | |||
</div></div> | |||
{{Warning|Now that the SDK is installed, do not move or rename the ''<SDK installation directory>''.}} | {{Warning|Now that the SDK is installed, do not move or rename the ''<SDK installation directory>''.}} | ||
====Starting up the SDK==== | ====Starting up the SDK==== | ||
{{highlight|'''The SDK environment setup script must be run once in each new working terminal in which you cross-compile:'''}} | {{highlight|'''The SDK environment setup script must be run once in each new working terminal in which you cross-compile:'''}} | ||
{{PC$}} source {{HighlightParam|''<SDK installation directory>''}}/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi | <div class="mw-collapsible mw-collapsed"> | ||
'''For {{MicroprocessorDevice | device=1}}''' | |||
<div class="mw-collapsible-content"> | |||
{{PC$}}source {{HighlightParam|''<SDK installation directory>''}}/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi | |||
The following checkings allow to ensure that the environment is correctly setup: | The following checkings allow to ensure that the environment is correctly setup: | ||
* Check the target architecture | * Check the target architecture | ||
{{PC$}} echo $ARCH | {{PC$}}echo $ARCH | ||
arm | arm | ||
* Check the toolchain binary prefix for the target tools | * Check the toolchain binary prefix for the target tools | ||
{{PC$}} echo $CROSS_COMPILE | {{PC$}}echo $CROSS_COMPILE | ||
arm-ostl-linux-gnueabi- | arm-ostl-linux-gnueabi- | ||
* Check the C compiler version | * Check the C compiler version | ||
{{PC$}} $CC --version | {{PC$}}$CC --version | ||
arm-ostl-linux-gnueabi-gcc (GCC) <GCC version> | arm-ostl-linux-gnueabi-gcc (GCC) <GCC version> | ||
[...] | [...] | ||
* Check that the SDK version is the expected one | * Check that the SDK version is the expected one | ||
{{PC$}} echo $OECORE_SDK_VERSION | {{PC$}}echo $OECORE_SDK_VERSION | ||
<expected SDK version> | |||
</div></div> | |||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=25}}''' | |||
<div class="mw-collapsible-content"> | |||
{{PC$}}source {{HighlightParam|''<SDK installation directory>''}}/environment-setup-cortexa35-ostl-linux | |||
The following checkings allow to ensure that the environment is correctly setup: | |||
* Check the target architecture | |||
{{PC$}}echo $ARCH | |||
arm64 | |||
* Check the toolchain binary prefix for the target tools | |||
{{PC$}}echo $CROSS_COMPILE | |||
aarch64-ostl-linux- | |||
* Check the C compiler version | |||
{{PC$}}$CC --version | |||
aarch64-ostl-linux-gcc (GCC) <GCC version> | |||
[...] | |||
* Check that the SDK version is the expected one | |||
{{PC$}}echo $OECORE_SDK_VERSION | |||
<expected SDK version> | <expected SDK version> | ||
</div></div> | |||
If any of these commands fails or does not return the expected result, | If any of these commands fails or does not return the expected result, try to reinstall the SDK. | ||
===Installing the OpenSTLinux BSP packages=== | ===Installing the OpenSTLinux BSP packages=== | ||
{{highlight|'''Optional step'''}}''': it is mandatory only if you want to modify the BSP (Linux kernel, TF-A, U-Boot, OP-TEE OS), or to add external out-of-tree Linux kernel modules.''' | {{highlight|'''Optional step'''}}''': it is mandatory only if you want to modify the BSP (Linux kernel, TF-A, U-Boot, OP-TEE OS), or to add external out-of-tree Linux kernel modules.''' | ||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=1}}:''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP1 Developer Package - OpenSTLinux BSP}} | |||
</div></div> | |||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=25}}:''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP2 Developer Package - OpenSTLinux BSP}} | |||
</div></div> | |||
====Building and deploying the external device tree for the first time (only on {{MicroprocessorDevice | device=25}})==== | |||
Prerequisite: the [[#Installing the SDK|SDK is installed]]. | |||
{{: | {{highlight|'''Open the ''<external device tree installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | ||
<span style="font-size:21px">☐</span> setup a software configuration management (SCM) system (''git'') for the external device tree (optional but recommended) <br> | |||
<span style="font-size:21px">☐</span> export the path of external device tree directory into the variable EXTDT_DIR<br> | |||
'''The external device tree is now set-up''' and can be used during compilation. | |||
====Building and deploying the Linux kernel for the first time==== | ====Building and deploying the Linux kernel for the first time==== | ||
Line 123: | Line 173: | ||
* the ''rootfs'' partition that contains the Linux kernel modules | * the ''rootfs'' partition that contains the Linux kernel modules | ||
{{ReviewsComments|-- [[User:Jean Christophe Trotin|Jean Christophe Trotin]] ([[User talk:Jean Christophe Trotin|talk]]) 16:52, 19 December 2023 (CET)<br />Remarks about README.HOW_TO.txt (Linux) | |||
* "1": the use of the external device tree is not enough highlighted; wouldn't it be needed to have a chapter before "5.2.1 Building and deploying the Linux kernel for the first time" to install and configure the external device tree? And then, would it be interesting to have an example in [[How to cross-compile with the Developer Package]] about a modification in the external device tree? | |||
* "4.1": the beta delivery is not available in https://github.com/STMicroelectronics/linux.git | |||
* "4.2": compile on a build directory: <nowiki>KBUILD_EXTDTS=="${EXTDT_DIR}/linux"</nowiki> is missing (BZ https://intbugzilla.st.com/show_bug.cgi?id 168841) | |||
* "8. Update Starter Package with kernel compilation outputs": what is the objective of this chapter?}} | |||
The Linux kernel might be cross-compiled, either in the source code directory, or in a dedicated directory different from the source code directory.<br> | The Linux kernel might be cross-compiled, either in the source code directory, or in a dedicated directory different from the source code directory.<br> | ||
This last method is recommended as it clearly separates the files generated by the cross-compilation from the source code files. | This last method is recommended as it clearly separates the files generated by the cross-compilation from the source code files. | ||
Line 134: | Line 189: | ||
<span style="font-size:21px">☐</span> configure the Linux kernel (applying the ST fragments) <br> | <span style="font-size:21px">☐</span> configure the Linux kernel (applying the ST fragments) <br> | ||
<span style="font-size:21px">☐</span> cross-compile the Linux kernel <br> | <span style="font-size:21px">☐</span> cross-compile the Linux kernel <br> | ||
<span style="font-size:21px">☐</span> deploy the Linux kernel ( | <span style="font-size:21px">☐</span> deploy the Linux kernel (that is, update the software on board) <br> | ||
'''The Linux kernel is now installed''': let's [[#Modifying the Linux kernel|modify the Linux kernel | '''The Linux kernel is now installed''': let's [[#Modifying the Linux kernel|modify the Linux kernel]]. | ||
====Building and deploying the gcnano-driver for the first time (only on {{MicroprocessorDevice | device=15}})==== | ====Building and deploying the gcnano-driver for the first time (only on {{MicroprocessorDevice | device=15}} and {{MicroprocessorDevice | device=25}})==== | ||
Prerequisite: | Prerequisite: | ||
* the [[#Installing the SDK|SDK is installed]]. | * the [[#Installing the SDK|SDK is installed]]. | ||
* the Linux kernel is built as explained [[ | * the Linux kernel is built as explained [[STM32MPU_Developer_Package#Building and deploying the Linux kernel for the first time|here]] <br> | ||
'''It is mandatory to execute once the steps specified below before modifying gcnano-driver.''' | '''It is mandatory to execute once the steps specified below before modifying gcnano-driver.''' | ||
Line 151: | Line 206: | ||
{{Warning|[[#Starting up the SDK|The SDK must be started]]}} | {{Warning|[[#Starting up the SDK|The SDK must be started]]}} | ||
{{ReviewsComments|-- [[User:Jean Christophe Trotin|Jean Christophe Trotin]] ([[User talk:Jean Christophe Trotin|talk]]) 17:22, 5 January 2024 (CET)<br />Remarks about README.HOW_TO.txt (gcnano-driver) | |||
* "2. Compile the gcnano kernel module": <nowiki>KERNEL_BUILDDIR="../../linux-stm32mp-<KERNELVERSION>-stm32mp2-alpha-<RELEASE>/build"</nowiki>. The directory is "../../linux-stm32mp-6.1.28-stm32mp25-beta-r1-r0/build", so there is no "stm32mp2-alpha" | |||
* "4. Update Starter Package with gcnano kernel module compilation outputs": what is the objective of this chapter? | |||
}} | |||
{{highlight|'''Open the ''<gcnano-driver installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | {{highlight|'''Open the ''<gcnano-driver installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | ||
<span style="font-size:21px">☐</span> setup a software configuration management (SCM) system (''git'') for the gcnano-driver (optional but recommended) <br> | <span style="font-size:21px">☐</span> setup a software configuration management (SCM) system (''git'') for the gcnano-driver (optional but recommended) <br> | ||
<span style="font-size:21px">☐</span> cross-compile the gcnano-driver <br> | <span style="font-size:21px">☐</span> cross-compile the gcnano-driver <br> | ||
<span style="font-size:21px">☐</span> deploy the gcnano-driver ( | <span style="font-size:21px">☐</span> deploy the gcnano-driver (that is, update the software on board) <br> | ||
'''The gcnano-driver is now installed'''. | '''The gcnano-driver is now installed'''. | ||
Line 169: | Line 229: | ||
{{Warning|[[#Starting up the SDK|The SDK must be started]]}} | {{Warning|[[#Starting up the SDK|The SDK must be started]]}} | ||
{{ReviewsComments|-- [[User:Jean Christophe Trotin|Jean Christophe Trotin]] ([[User talk:Jean Christophe Trotin|talk]]) 16:52, 19 December 2023 (CET)<br />Remarks about README.HOW_TO.txt (U-Boot) | |||
* "2. Initialize cross-compilation via SDK": environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi is not correct for MP2 (ok for MP1) | |||
* "5. Compile U-Boot source code": unlike Linux compilation, it is not explained how to build out of the source directory (for example, <nowiki>export export BLD_PATH=../build</nowiki>) | |||
* "5.1 Compilation for one target": | |||
** either words are missing or "an" is too much in "then u-boot.dtb and u-boot-nodtb.bin can be added in the existing FIP file with" | |||
** the <nowiki>"make DEVICE_TREE=<device tree> all"</nowiki> command is not correct if another device tree than stm32mp257f-ev1 is considered (for example, stm32mp257f-ev1-revB); EXT_DTS shall be set (BZ https://intbugzilla.st.com/show_bug.cgi?id=169091) | |||
<pre> | |||
$ echo $KBUILD_OUTPUT | |||
../build | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ make stm32mp25_revA_defconfig | |||
$ make DEVICE_TREE=stm32mp257f-ev1-revB all EXT_DTS=$EXTDT_DIR/u-boot | |||
</pre> | |||
** "fiptool update --verbose" doesn't work; "fiptool --verbose update" works | |||
** Because there is no fip directory in FIP_artifacts, it is not clear which <FIP.bin> is expected in the "fiptool update" command; I copy the fip directory from starter package (Starter-Package/stm32mp25-revab-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/images/stm32mp25-revab/fip) | |||
<pre> | |||
$ cd ../../FIP_artifacts | |||
$ cp -r ~/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Starter-Package/stm32mp25-revab-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/images/stm32mp25-revab/fip fip_starter | |||
$ cd ../u-boot-stm32mp-v2022.10-stm32mp-beta-r1/build | |||
$ fiptool --verbose update --nt-fw u-boot-nodtb.bin --hw-config u-boot.dtb ../../FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
</pre> | |||
Results: the u-boot binaries are built in u-boot-stm32mp-v2022.10-stm32mp-beta-r1-r0/build/; the fip binary is built in FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
* "5.2 Compilation for several targets: use Makefile.sdk (with FIP)": | |||
** It is not possible to use this method to build the binaries for the rev A | |||
<pre> | |||
$ echo $FIP_DEPLOYDIR_ROOT | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/u-boot-stm32mp-v2022.10-stm32mp-beta-r1-r0/u-boot-stm32mp-v2022.10-stm32mp-beta-r1/../../FIP_artifacts | |||
$ echo $BLD_PATH | |||
../build2 | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/u-boot all | |||
</pre> | |||
results: a fip directory is created in FIP_artifacts; the u-boot binaries are built in FIP_artifacts/u-boot; the fip binaries are built in FIP_artifacts/fip (for rev B only)}} | |||
{{highlight|'''Open the ''<U-Boot installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | {{highlight|'''Open the ''<U-Boot installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | ||
Line 175: | Line 269: | ||
<span style="font-size:21px">☐</span> prepare the U-Boot (applying the ST patches) <br> | <span style="font-size:21px">☐</span> prepare the U-Boot (applying the ST patches) <br> | ||
<span style="font-size:21px">☐</span> cross-compile the U-Boot <br> | <span style="font-size:21px">☐</span> cross-compile the U-Boot <br> | ||
<span style="font-size:21px">☐</span> deploy the U-Boot ( | <span style="font-size:21px">☐</span> deploy the U-Boot (that is, update the software on board) <br> | ||
Line 190: | Line 284: | ||
{{Warning|[[#Starting up the SDK|The SDK must be started]]}} | {{Warning|[[#Starting up the SDK|The SDK must be started]]}} | ||
{{ReviewsComments|-- [[User:Jean Christophe Trotin|Jean Christophe Trotin]] ([[User talk:Jean Christophe Trotin|talk]]) 17:22, 5 January 2024 (CET)<br />README_HOW_TO.txt (TF-A) | |||
* "2. Initialize cross-compilation via SDK": environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi is not correct for MP2 (ok for MP1), and <nowiki>"CROSS_COMPILE=arm-ostl-linux-gnueabi-"</nowiki> is not correct | |||
* "4.2 Create Git from tarball": the right command is "test -f ../tf-a-st-ddr.tar.gz && tar xf ../tf-a-st-ddr.tar.gz" (".gz" not ".xz") | |||
* "5. Compile TF-A source code" | |||
** Unlike Linux compilation, it is not explained how to build out of the source directory (for example, <nowiki>export BLD_PATH=../build</nowiki>) | |||
** Unlike U-Boot compilation, it is not explained how to build for one target | |||
** However, I compiled for one target (for rev A): | |||
<pre> | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ unset LDFLAGS; | |||
$ unset CFLAGS; | |||
$ make BUILD_PLAT=../build PLAT=stm32mp2 DTB_FILE_NAME=stm32mp257f-ev1-revB.dtb STM32MP_SDMMC=1 CONFIG_STM32MP25X_REVA=1 SPD=opteed STM32MP_DDR4_TYPE=1 TFA_EXTERNAL_DT=${EXTDT_DIR}/tf-a DEBUG=1 LOG_LEVEL=40 PSA_FWU_SUPPORT=1 | |||
</pre> | |||
Results: the tf-a binaries (for example, tf-a-stm32mp257f-ev1-revB.stm32) are built in tf-a-stm32mp-v2.8.12-stm32mp-beta-r1-r0/build | |||
It is not mandatory to update the FIP if only the TF-A BL2 code has been modified. | |||
<pre> | |||
$ cd ../build | |||
If the Secure Monitor (BL31) or the Secure Monitor device tree (BL31 DT) has been modified: | |||
$ fiptool --verbose update --soc-fw bl31.bin --soc-fw-config fdts/stm32mp257f-ev1-revB-bl31.dtb ../../FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
If the Firmware configuration file (FW_CONFIG) has been modified: | |||
$ fiptool --verbose update --fw-config fdts/stm32mp257f-ev1-revB-fw-config.dtb ../../FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
If the DDR Firmware (DDR FW) has been modified: | |||
$ fiptool --verbose update --ddr-fw ../tf-a-stm32mp-v2.8.12-stm32mp-beta-r1/drivers/st/ddr/phy/firmware/bin/ddr4_pmu_train.bin ../../FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
</pre> | |||
Results: the fip binary is built in FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
** use Makefile.sdk: it is not possible to use this method to build the binaries for the rev A | |||
<pre> | |||
$ echo $FIP_DEPLOYDIR_ROOT | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/tf-a-stm32mp-v2.8.12-stm32mp-beta-r1-r0/tf-a-stm32mp-v2.8.12-stm32mp-beta-r1/../../FIP_artifacts | |||
$ echo $BLD_PATH | |||
../build2 | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/arm-trusted-firmware all | |||
</pre> | |||
results: a fip directory is created in FIP_artifacts; the tf-a binaries are built in FIP_artifacts/arm-trusted-firmware; the fip binaries are built in FIP_artifacts/fip (for rev B only) | |||
}} | |||
{{highlight|'''Open the ''<TF-A installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | {{highlight|'''Open the ''<TF-A installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | ||
Line 195: | Line 329: | ||
<span style="font-size:21px">☐</span> prepare the TF-A (applying the ST patches) <br> | <span style="font-size:21px">☐</span> prepare the TF-A (applying the ST patches) <br> | ||
<span style="font-size:21px">☐</span> cross-compile the TF-A <br> | <span style="font-size:21px">☐</span> cross-compile the TF-A <br> | ||
<span style="font-size:21px">☐</span> deploy the TF-A ( | <span style="font-size:21px">☐</span> deploy the TF-A (that is, update the software on board) <br> | ||
Line 209: | Line 343: | ||
{{Info|The {{CodeSource | meta-st-stm32mp | recipes-security/optee/optee-os/README.HOW_TO.txt | README.HOW_TO.txt}} helper file is '''THE''' reference for the OP-TEE build}} | {{Info|The {{CodeSource | meta-st-stm32mp | recipes-security/optee/optee-os/README.HOW_TO.txt | README.HOW_TO.txt}} helper file is '''THE''' reference for the OP-TEE build}} | ||
{{Warning|[[#Starting up the SDK|The SDK must be started]]}} | {{Warning|[[#Starting up the SDK|The SDK must be started]]}} | ||
{{ReviewsComments|-- [[User:Jean Christophe Trotin|Jean Christophe Trotin]] ([[User talk:Jean Christophe Trotin|talk]]) 14:25, 12 January 2024 (CET)<br />README_HOW_TO.txt (OP-TEE OS) | |||
* "1": the use of the SCP firmware is not enough highlighted; wouldn't it be needed to have a chapter before "5.2.5 Building and deploying the OP-TEE for the first time" (or a sub-chapter of this chapter 5.2.5) to install and configure the SCP firmware? And then, would it be interesting to have an example in [[How to cross-compile with the Developer Package]] about a modification in the SCP firmware? | |||
* "2. Initialize cross-compilation via SDK": environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi is not correct for MP2 (ok for MP1), and <nowiki>"CROSS_COMPILE=arm-ostl-linux-gnueabi-"</nowiki> is not correct | |||
* "5. Compile optee-os source code" | |||
** Unlike Linux compilation, it is not explained how to build out of the source directory (for example, <nowiki>export BLD_PATH=../build</nowiki>) | |||
** Unlike U-Boot compilation, it is not explained how to build for one target | |||
** However, I compiled for one target (for rev A): | |||
<pre> | |||
$ echo $SCPFW_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/scp-firmware-2.12-stm32mp-r1-r0/scp-firmware-2.12-stm32mp-r1 | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ make O=../build PLATFORM=stm32mp2 CROSS_COMPILE_core=aarch64-ostl-linux- CROSS_COMPILE_ta_arm64=aarch64-ostl-linux- ARCH=arm CFG_ARM64_core=y NOWERROR=1 LDFLAGS= CFG_EXT_DTS=${EXTDT_DIR}/optee CFG_EMBED_DTB_SOURCE_FILE=stm32mp257f-ev1-revB.dts CFG_SCP_FIRMWARE=${SCPFW_DIR} CFG_TEE_CORE_LOG_LEVEL=2 CFG_TEE_CORE_DEBUG=y CFG_SCMI_SCPFW=y | |||
Results: the op-tee binaries (for example, tee-pager_v2.bin, tee-header_v2.bin, tee-pageable_v2.bin) are built in optee-os-stm32mp-3.19.0-stm32mp-beta-r1-r0/build/core | |||
$ cd ../build | |||
$ fiptool --verbose update --tos-fw core/tee-header_v2.bin --tos-fw-extra1 core/tee-pager_v2.bin --tos-fw-extra2 core/tee-pageable_v2.bin ../../FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
</pre> | |||
Results: the fip binary is built in FIP_artifacts/fip_starter/fip-stm32mp257f-ev1-revB-optee.bin | |||
** use Makefile.sdk: it is not possible to use this method to build the binaries for the rev A | |||
<pre> | |||
$ echo $SCPFW_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/scp-firmware-2.12-stm32mp-r1-r0/scp-firmware-2.12-stm32mp-r1 | |||
$ echo $FIP_DEPLOYDIR_ROOT | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/optee-os-stm32mp-3.19.0-stm32mp-beta-r1-r0/optee-os-stm32mp-3.19.0-stm32mp-beta-r1/../../FIP_artifacts | |||
$ echo $BLD_PATH | |||
../build2 | |||
$ echo $EXTDT_DIR | |||
/local/home/frq08988/Views/STM32MPU-Ecosystem-v5.0.2.BETA/Developer-Package/stm32mp25-openstlinux-6.1-yocto-mickledore-mp2-v23.12.06/sources/aarch64-ostl-linux/external-dt-v5.0-stm32mp-r1-c11-r0/external-dt-v5.0-stm32mp-r1-c11 | |||
$ make -f $PWD/../Makefile.sdk DEPLOYDIR=$FIP_DEPLOYDIR_ROOT/optee all | |||
</pre> | |||
results: a fip directory is created in FIP_artifacts; the op-tee binaries are built in FIP_artifacts/optee; the fip binaries are built in FIP_artifacts/fip (for rev B only)}} | |||
{{highlight|'''Open the ''<OP-TEE installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | {{highlight|'''Open the ''<OP-TEE installation directory>/README.HOW_TO.txt'' helper file, and execute its instructions to:'''}} <br> | ||
Line 215: | Line 381: | ||
<span style="font-size:21px">☐</span> prepare the OP-TEE (applying the ST patches) <br> | <span style="font-size:21px">☐</span> prepare the OP-TEE (applying the ST patches) <br> | ||
<span style="font-size:21px">☐</span> cross-compile the OP-TEE <br> | <span style="font-size:21px">☐</span> cross-compile the OP-TEE <br> | ||
<span style="font-size:21px">☐</span> deploy the OP-TEE ( | <span style="font-size:21px">☐</span> deploy the OP-TEE (that is, update the software on board) <br> | ||
Line 221: | Line 387: | ||
===Installing the debug symbol files=== | ===Installing the debug symbol files=== | ||
{{highlight|'''Optional step'''}}''': it is mandatory only if you want to debug Linux<sup>®</sup> kernel, U-Boot, OP-TEE or TF-A with GDB.''' | {{highlight|'''Optional step'''}}''': it is mandatory only if you want to debug Linux<sup>®</sup> kernel, U-Boot, OP-TEE, or TF-A with GDB.''' | ||
====Using the debug symbol files==== | ====Using the debug symbol files==== | ||
These files are used to debug the Linux<sup>®</sup> kernel, U-Boot, OP-TEE or TF-A with [[GDB]]. Especially, the [[GDB#Debug OpenSTLinux BSP components|Debug OpenSTLinux BSP components]] chapter explains how to load the debug symbol files in GDB. | These files are used to debug the Linux<sup>®</sup> kernel, U-Boot, OP-TEE, or TF-A with [[GDB]]. Especially, the [[GDB#Debug OpenSTLinux BSP components|Debug OpenSTLinux BSP components]] chapter explains how to load the debug symbol files in GDB. | ||
==Installing the components to develop software running on Arm Cortex- | ==Installing the components to develop software running on Arm Cortex-M (STM32CubeMPU Package) ( only on {{MicroprocessorDevice | device=15}} and {{MicroprocessorDevice | device=25}})== | ||
===Installing STM32CubeIDE=== | ===Installing STM32CubeIDE=== | ||
Line 239: | Line 405: | ||
Prerequisite: the [[#Installing STM32CubeIDE|STM32CubeIDE is installed]]. | Prerequisite: the [[#Installing STM32CubeIDE|STM32CubeIDE is installed]]. | ||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=1}}:''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP1 Developer Package - STM32CubeMP1 Package}} | {{:STM32MP1 Developer Package - STM32CubeMP1 Package}} | ||
</div></div> | |||
<div class="mw-collapsible mw-collapsed"> | |||
'''For {{MicroprocessorDevice | device=25}}:''' | |||
<div class="mw-collapsible-content"> | |||
{{:STM32MP2 Developer Package - STM32CubeMP2 Package}} | |||
</div></div> | |||
'''The STM32CubeMPU Package is now installed''': let's [[#Developing software running on Arm Cortex- | '''The STM32CubeMPU Package is now installed''': let's [[#Developing software running on Arm Cortex-M|develop software running on Arm Cortex-M]]. | ||
==Developing software running on Arm Cortex- | ==Developing software running on Arm Cortex-A== | ||
{{:Cross-compile with OpenSTLinux SDK}} | {{:Cross-compile with OpenSTLinux SDK}} | ||
<span id="Developing software running on Arm Cortex- | <span id="Developing software running on Arm Cortex-M"></span> | ||
==Developing software running on Arm Cortex- | ==Developing software running on Arm Cortex-M== | ||
Following chapters are valid only on {{MicroprocessorDevice | device=15}} and {{MicroprocessorDevice | device=25}}. | |||
===How to create a STM32CubeMPU project from scratch or open/modify an existing one from STM32CubeMPU package=== | ===How to create a STM32CubeMPU project from scratch or open/modify an existing one from STM32CubeMPU package=== | ||
Refer to [[ | Refer to: | ||
* [[STM32CubeMP15_Package_-_Getting_started#Developer_Package_for_STM32CubeMP15|STM32CubeMP15 Package]] for {{MicroprocessorDevice | device=15}} | |||
* [[STM32CubeMP2_Package_-_Getting_started#Developer_Package_for_STM32CubeMP2|STM32CubeMP2 Package]] for {{MicroprocessorDevice | device=25}} | |||
{{ReviewsComments|-- [[User:Jean-philippe Romain|Jean-philippe Romain]] ([[User talk:Jean-philippe Romain|talk]]) 14:11, 6 December 2023 (CET)<br />"How to" TF-M build or usage with CubeFW to be added...}} | |||
== Fast links to essential commands== | == Fast links to essential commands== | ||
If you are already familiar with the Developer Package for the STM32MPU Embedded Software distribution, fast links to the essential commands are listed below. | If you are already familiar with the Developer Package for the STM32MPU Embedded Software distribution, fast links to the essential commands are listed below. | ||
{{Info|With the links below, you will be redirected to other | {{Info|With the links below, you will be redirected to other article; use the ''back'' button of your browser to come back to these fast links}} | ||
{| class="st-table" | {| class="st-table" | ||
! Link to the command | ! Link to the command | ||
|- | |- | ||
|'''Starter Packages'''{{UpdateNeededForNewBoard|Point to the "Fast links to essential commands" of the new board Starter Package}} | |'''Starter Packages'''{{UpdateNeededForNewBoard|Point to the "Fast links to essential commands" of the new board Starter Package}} | ||
|- | |||
| [[STM32MP25 Evaluation boards - Starter Package#Fast links to essential commands|Essential commands of the STM32MP25 Evaluation board Starter Package]] | |||
|- | |- | ||
| [[STM32MP15 Evaluation boards - Starter Package#Fast links to essential commands|Essential commands of the STM32MP15 Evaluation board Starter Package]] | | [[STM32MP15 Evaluation boards - Starter Package#Fast links to essential commands|Essential commands of the STM32MP15 Evaluation board Starter Package]] | ||
Line 269: | Line 451: | ||
| | '''SDK''' | | | '''SDK''' | ||
|- | |- | ||
| [[STM32MP1 Developer Package - SDK#Download|Download and install the latest SDK]] | | [[STM32MP1 Developer Package - SDK#Download|Download and install the latest SDK for {{MicroprocessorDevice | device=1}}]] | ||
|- | |||
| [[STM32MP2 Developer Package - SDK#Download|Download and install the latest SDK for {{MicroprocessorDevice | device=2}}]] | |||
|- | |- | ||
| [[#Starting up the SDK|Start the SDK]] | | [[#Starting up the SDK|Start the SDK]] | ||
Line 275: | Line 459: | ||
| | '''Linux kernel''' | | | '''Linux kernel''' | ||
|- | |- | ||
| [[ | | [[#Installing the OpenSTLinux BSP packages|Download and install the latest Linux kernel]] | ||
|- | |- | ||
| {{CodeSource | meta-st-stm32mp | recipes-kernel/linux/linux-stm32mp/README.HOW_TO.txt | Helper file for the '''Linux kernel''' build, and update on board}} | | {{CodeSource | meta-st-stm32mp | recipes-kernel/linux/linux-stm32mp/README.HOW_TO.txt | Helper file for the '''Linux kernel''' build, and update on board}} | ||
Line 281: | Line 465: | ||
|| '''gcnano-driver''' | || '''gcnano-driver''' | ||
|- | |- | ||
| [[ | | [[#Installing the OpenSTLinux BSP packages|Download and install the latest gcnano-driver]] | ||
|- | |- | ||
| {{CodeSource | meta-st-stm32mp | recipes-bsp/drivers/gcnano-driver-stm32mp/README.HOW_TO.txt | Helper file for the '''gcnano-driver''' build, and update on board}} | | {{CodeSource | meta-st-stm32mp | recipes-bsp/drivers/gcnano-driver-stm32mp/README.HOW_TO.txt | Helper file for the '''gcnano-driver''' build, and update on board}} | ||
Line 287: | Line 471: | ||
| | '''U-Boot''' | | | '''U-Boot''' | ||
|- | |- | ||
| [[ | | [[#Installing the OpenSTLinux BSP packages|Download and install the latest U-Boot]] | ||
|- | |- | ||
| {{CodeSource | meta-st-stm32mp | recipes-bsp/u-boot/u-boot-stm32mp/README.HOW_TO.txt | Helper file for the '''U-Boot''' build, and update on board}} | | {{CodeSource | meta-st-stm32mp | recipes-bsp/u-boot/u-boot-stm32mp/README.HOW_TO.txt | Helper file for the '''U-Boot''' build, and update on board}} | ||
Line 293: | Line 477: | ||
| | '''TF-A''' | | | '''TF-A''' | ||
|- | |- | ||
| [[ | | [[#Installing the OpenSTLinux BSP packages|Download and install the latest TF-A]] | ||
|- | |- | ||
| {{CodeSource | meta-st-stm32mp | recipes-bsp/trusted-firmware-a/tf-a-stm32mp/README.HOW_TO.txt | Helper file for the '''TF-A''' build, and update on board}} | | {{CodeSource | meta-st-stm32mp | recipes-bsp/trusted-firmware-a/tf-a-stm32mp/README.HOW_TO.txt | Helper file for the '''TF-A''' build, and update on board}} | ||
Line 299: | Line 483: | ||
| | '''OP-TEE''' | | | '''OP-TEE''' | ||
|- | |- | ||
| [[ | | [[#Installing the OpenSTLinux BSP packages|Download and install the latest OP-TEE]] | ||
|- | |- | ||
| {{CodeSource | meta-st-stm32mp | recipes-security/optee/optee-os/README.HOW_TO.txt | Helper file for the '''OP-TEE''' build, and update on board}} | | {{CodeSource | meta-st-stm32mp | recipes-security/optee/optee-os/README.HOW_TO.txt | Helper file for the '''OP-TEE''' build, and update on board}} | ||
Line 307: | Line 491: | ||
| [[How to cross-compile with the Developer Package#Adding a "hello world" user space example|Simple user space application]] | | [[How to cross-compile with the Developer Package#Adding a "hello world" user space example|Simple user space application]] | ||
|- | |- | ||
|| '''STM32CubeMPU Package''' only for {{MicroprocessorDevice | device=15}} | || '''STM32CubeMPU Package''' only for {{MicroprocessorDevice | device=15}} and {{MicroprocessorDevice | device=25}} | ||
|- | |- | ||
| [[ | | [[STM32CubeMP15 Package - Getting started#Developer Package for STM32CubeMP15|Download and install the latest STM32CubeMP1 Package]] | ||
|- | |- | ||
| [[STM32CubeMP1 Package#Developer Package for | | [[STM32CubeMP15 Package - Getting started#Developer Package for STM32CubeMP15|Create or modify a STM32CubeMP1 project]] | ||
|- | |||
| [[STM32CubeMP2 Package - Getting started#Developer Package for STM32CubeMP2|Download and install the latest STM32CubeMP2 Package]] | |||
|- | |||
| [[STM32CubeMP2 Package - Getting started#Developer Package for STM32CubeMP2|Create or modify a STM32CubeMP2 project]] | |||
|} | |} | ||
==How to go further?== | ==How to go further?== | ||
Now that your developments are ready, you might want to switch to the [[ | Now that your developments are ready, you might want to switch to the [[STM32MPU Distribution Package]], in order to create your own distribution and to generate your own SDK and image. | ||
<noinclude> | <noinclude> | ||
[[Category:STM32 MPU boards]] | [[Category:STM32 MPU boards]] | ||
Line 326: | Line 513: | ||
* Check that the following transcluded articles deal with the last ecosystem release, and that the "Release note" row of these transcluded articles refer to their "Archives" section (see details in the "Contributors:Ecosystem release delivery" article) | * Check that the following transcluded articles deal with the last ecosystem release, and that the "Release note" row of these transcluded articles refer to their "Archives" section (see details in the "Contributors:Ecosystem release delivery" article) | ||
{{:STM32MP1 Developer Package - SDK}} | {{:STM32MP1 Developer Package - SDK}} | ||
{{: | {{:STM32MP2 Developer Package - OpenSTLinux BSP}} | ||
{{:STM32MP1 Developer Package - STM32CubeMP1 Package}} | {{:STM32MP1 Developer Package - STM32CubeMP1 Package}} | ||
* Make the modifications indicated by {{UpdateNeededForNewRelease}} | * Make the modifications indicated by {{UpdateNeededForNewRelease}} | ||
}} | }} | ||
{{PublicationRequestId | 31763| 2024-07-22 | }} | |||
</noinclude> | </noinclude> |
Latest revision as of 05:58, 21 August 2024
This article describes how to get and use the Developer Package of the STM32MPU Embedded Software for any development platform of the STM32MP1 series (STM32MP15 boards and STM32MP13 boards) and STM32MP2 unknown microprocessor device (STM32MP25 boards), in order to modify some of its pieces of software, or to add applications on top of it.
It lists some prerequisites in terms of knowledge and development environment, and gives the step-by-step approach to download and install the STM32MPU Embedded Software components for this Package.
Finally, it proposes some guidelines to upgrade (add, remove, configure, improve...) any piece of software.
1. Developer Package content
If you are not yet familiar with the STM32MPU Embedded Software distribution and its Packages, read the following articles:
- Which STM32MPU Embedded Software Package better suits your needs (and especially the Developer Package chapter)
- STM32MPU Embedded Software distribution
If you are already familiar with the Developer Package for the STM32MPU Embedded Software distribution, the fast links to essential commands might interest you.
To sum up, this Developer Package provides:
- for the OpenSTLinux distribution (development on Arm® Cortex®-A processor):
- the software development kit (SDK), based on Yocto SDK, for cross-development on a host PC
- the following pieces of software in source code:
- Linux® kernel
- gcnano-driver
- U-Boot
- Trusted Firmware-A (TF-A)
- Open source Trusted Execution Environment (OP-TEE)
- External device tree (for STM32MP25 unknown microprocessor device only)
- for the Cortex®-M processor firmware development (only for STM32MP15x lines
and STM32MP25 unknown microprocessor device):
- the integrated development environment (IDE) (STM32CubeIDE)
- the STM32CubeMPU Package including all pieces of software (BSP, HAL, middlewares, and applications) in source code
- the Trusted Firmware-M (TF-M) in source code (for STM32MP25 unknown microprocessor device only)
- the debug symbol files for Linux® kernel, U-Boot, TF-A, OP-TEE, and TF-M (for STM32MP25 unknown microprocessor device only)
Note that the application frameworks for the OpenSTLinux distribution are not available as source code in this Package.

TF-M is available only for STM32MP25 unknown microprocessor device
2. Developer Package step-by-step overview
The steps to get the STM32MPU Embedded Software Developer Package ready for your developments are:
☐ Checking the prerequisites
☐ Installing the Starter Package for your board
☐ Installing the components to develop software running on Arm® Cortex®-A (OpenSTLinux distribution)
- ☐ Installing the SDK (mandatory for any development on Arm® Cortex®-A)
- ☐ Installing the OpenSTLinux BSP package (mandatory only if you plan to modify the Linux kernel, to add external out-of-tree Linux kernel modules, to modify U-Boot, TF-A, OP-TEE OS)
- ☐ Installing the debug symbol files (mandatory only if you plan to debug Linux® kernel, U-Boot, OP-TEE, or TF-A with GDB)
☐ Installing the components to develop software running Arm Cortex-M (STM32CubeMPU Package)
- ☐ Installing STM32CubeIDE (mandatory for any development on Arm® Cortex®-M)
- ☐ Installing the STM32CubeMPU Package (mandatory only if you plan to modify the STM32Cube firmware)
Once these steps are achieved, you are able to:
- develop software running on Arm Cortex-A
- develop software running on Arm Cortex-M (only on STM32MP15x lines
and STM32MP25 unknown microprocessor device)
3. Checking the prerequisites
3.1. Knowledges
The STM32MPU Developer Package aims at enriching a Linux-based software for the targeted product: basic knowledge about Linux are recommended to make the most of this Package.
Having a look at the STM32MPU Embedded Software architecture overview is also highly recommended.
3.2. Development setup
The recommended setup for the development PC (host) is specified in the following article: PC prerequisites.
Whatever the development platform (board) and development PC (host) used, the range of possible development setups is illustrated by the picture below.
The following components are mandatory:
- Host PC for cross-compilation and cross-debugging, installed as specified above
- Board assembled and configured as specified in the associated Starter Package article
- Mass storage device (for example, microSD card) to load and update the software images (binaries)
The following components are optional, but recommended:
- A serial link between the host PC (through Terminal program) and the board for traces (even early boot traces), and access to the board from the remote PC (command lines)
- An Ethernet link between the host PC and the board for cross-development and cross-debugging through a local network. This is an alternative or a complement to the serial (or USB) link
- A display connected to the board, depending on the technologies available on the board: DSI LCD display, HDMI monitor (or TV) and so on
- A mouse and a keyboard connected through USB ports
Additional optional components can be added by means of the connectivity capabilities of the board: cameras, displays, JTAG, sensors, actuators, and much more.
4. Installing the Starter Package
Before developing with the Developer Package, it is essential to start up your board thanks to its Starter Package. All articles relative to Starter Packages are found in Category:Starter Package: find the one that corresponds to your board, and follow the installation instructions (if not yet done), before going further.
In brief, it means that:
- your board boots successfully
- the flashed image comes from the same release of the STM32MPU Embedded Software distribution as the components that will be downloaded in this article
Thanks to the Starter Package, all Flash partitions are populated.
Then, with the Developer Package, it is possible to modify or to upgrade the partitions independently one from the others.
For example, if you only want to modify the Linux kernel (part of bootfs partition), installing the SDK and the Linux kernel are enough; no need to install anything else.
5. Installing the components to develop software running on Arm Cortex-A (OpenSTLinux distribution)
5.1. Installing the SDK
Optional step: it is mandatory only if you want to modify or add software running on Arm Cortex-A (for example Linux kernel, Linux user space applications...).
The SDK for OpenSTLinux distribution provides a stand-alone cross-development toolchain and libraries tailored to the contents of the specific image flashed in the board. If you want to know more about this SDK, read the SDK for OpenSTLinux distribution article.
For STM32MP1 series
The STM32MP1 SDK is delivered through two tarball file named :
- en.SDK-x86_64-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz for x86_64 host architecture
- en.SDK-aarch64-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz for arm64 host architecture
Download and install the STM32MP1 SDK. The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
STM32MP1 Developer Package SDK - STM32MP1-Ecosystem-v5.0.0 release | |
---|---|
Download |
You need to be logged on my.st.com before accessing the following link: |
Installation | For x86_64 host architecture
tar xvf en.SDK-x86_64-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
chmod +x stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sdk/st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.sh
./stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sdk/st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.sh -d <working directory absolute path>/Developer-Package/SDK
ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21
===================================================================================================================================
You are about to install the SDK to "<working directory absolute path>/Developer-Package/SDK". Proceed [Y/n]?
Extracting SDK.........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
|
For arm64 host architecture
tar xvf en.SDK-aarch64-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
chmod +x stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sdk/st-image-weston-openstlinux-weston-stm32mp1-aarch64-toolchain-4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.sh
./stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sdk/st-image-weston-openstlinux-weston-stm32mp1-aarch64-toolchain-4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.sh -d <working directory absolute path>/Developer-Package/SDK
ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 4.2.1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21
===================================================================================================================================
You are about to install the SDK to "<working directory absolute path>/Developer-Package/SDK". Proceed [Y/n]?
Extracting SDK.........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
| |
Release note |
Details about the content of the SDK are available in the associated STM32 MPU ecosystem release note.
|
- The SDK is in the <SDK installation directory>:
<SDK installation directory> SDK for OpenSTLinux distribution: details in Standard SDK directory structure article ├── environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi Environment setup script for Developer Package ├── site-config-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi ├── sysroots │ ├── cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi Target sysroot (libraries, headers, and symbols) │ │ └── [...] │ └── x86_64-ostl_sdk-linux Native sysroot (libraries, headers, and symbols) │ └── [...] └── version-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
For arm64 host architecture
<SDK installation directory> SDK for OpenSTLinux distribution: details in Standard SDK directory structure article ├── environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi Environment setup script for Developer Package ├── site-config-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi ├── sysroots │ ├── cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi Target sysroot (libraries, headers, and symbols) │ │ └── [...] │ └── aarch64-ostl_sdk-linux Native sysroot (libraries, headers, and symbols) │ └── [...] └── version-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
For STM32MP25 unknown microprocessor device
The STM32MP2 SDK is delivered through two tarball file named :
- unknown revision for x86_64 host architecture
- unknown revision for arm64 host architecture
Download and install the STM32MP2 SDK. The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
STM32MP2 Developer Package SDK - STM32MP2-Ecosystem-v5.1.0 release | |
---|---|
Download |
|
Installation | For x86_64 host architecture
unknown revisiontar xvf
unknown revision /unknown revisionchmod +x
unknown revision /unknown revision -d <working directory absolute path>/Developer-Package/SDK./
ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 4.2.4-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26
===================================================================================================================================
You are about to install the SDK to "<working directory absolute path>/Developer-Package/SDK". Proceed [Y/n]?
Extracting
SDK.........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa35-ostl-linux
|
For arm64 host architecture unknown revisiontar xvf
unknown revision /unknown revisionchmod +x
unknown revision /unknown revision -d <working directory absolute path>/Developer-Package/SDK./
ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 4.2.4-openstlinux-6.1-yocto-mickledore-mpu-v24.06.26
===================================================================================================================================
You are about to install the SDK to "<working directory absolute path>/Developer-Package/SDK". Proceed [Y/n]?
Extracting
SDK.........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa35-ostl-linux
| |
Release note |
Details about the content of the SDK are available in the associated STM32 MPU ecosystem release note.
|
- The SDK is in the <SDK installation directory>:
<SDK installation directory> SDK for OpenSTLinux distribution: details in Standard SDK directory structure article ├── environment-setup-cortexa35-ostl-linux Environment setup script for Developer Package ├── site-config-cortexa35-ostl-linux ├── sysroots │ ├── cortexa35-ostl-linux Target sysroot (libraries, headers, and symbols) │ │ └── [...] │ └── x86_64-ostl_sdk-linux Native sysroot (libraries, headers, and symbols) │ └── [...] └── version-cortexa35-ostl-linux
For arm64 host architecture
<SDK installation directory> SDK for OpenSTLinux distribution: details in Standard SDK directory structure article ├── environment-setup-cortexa35-ostl-linux Environment setup script for Developer Package ├── site-config-cortexa35-ostl-linux ├── sysroots │ ├── cortexa35-ostl-linux Target sysroot (libraries, headers, and symbols) │ │ └── [...] │ └── aarch64-ostl_sdk-linux Native sysroot (libraries, headers, and symbols) │ └── [...] └── version-cortexa35-ostl-linux
5.1.1. Starting up the SDK
The SDK environment setup script must be run once in each new working terminal in which you cross-compile:
For STM32MP1 series
<SDK installation directory>/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabisource
The following checkings allow to ensure that the environment is correctly setup:
- Check the target architecture
echo $ARCH
arm
- Check the toolchain binary prefix for the target tools
echo $CROSS_COMPILE
arm-ostl-linux-gnueabi-
- Check the C compiler version
$CC --version
arm-ostl-linux-gnueabi-gcc (GCC) <GCC version>
[...]
- Check that the SDK version is the expected one
echo $OECORE_SDK_VERSION
<expected SDK version>
For STM32MP25 unknown microprocessor device
<SDK installation directory>/environment-setup-cortexa35-ostl-linuxsource
The following checkings allow to ensure that the environment is correctly setup:
- Check the target architecture
echo $ARCH
arm64
- Check the toolchain binary prefix for the target tools
echo $CROSS_COMPILE
aarch64-ostl-linux-
- Check the C compiler version
$CC --version
aarch64-ostl-linux-gcc (GCC) <GCC version>
[...]
- Check that the SDK version is the expected one
echo $OECORE_SDK_VERSION
<expected SDK version>
If any of these commands fails or does not return the expected result, try to reinstall the SDK.
5.2. Installing the OpenSTLinux BSP packages
Optional step: it is mandatory only if you want to modify the BSP (Linux kernel, TF-A, U-Boot, OP-TEE OS), or to add external out-of-tree Linux kernel modules.
For STM32MP1 series:
The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
- The OpenSTLinux BSP package is delivered through a tarball file named en.SOURCES-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz for STM32MP157x-EV1
, STM32MP157x-DKx
and STM32MP135x-DK
boards.
- Download and install the STM32MP1 OpenSTLinux BSP package.
STM32MP1 Developer Package - STM32MP1 ecosystem v5.0.0 release | |
---|---|
Download |
|
Installation |
<working directory path>/Developer-Packagecd
tar xvf en.SOURCES-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz
|
Release note |
Details about the content of the OpenSTLinux BSP package are available in the associated STM32 MPU OpenSTLinux release note.
|
- In the <Developer Package installation directory>/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/sources/arm-ostl-linux-gnueabi/, a tarball archive of the OpenSTLinux BSP components can be found.
- The Linux kernel installation directory is named linux-stm32mp-<kernel version>:
linux-stm32mp-6.1.28-stm32mp-r1-r0 Linux kernel installation directory ├── [*].patch ST patches to apply during the Linux kernel preparation (see next chapter) ├── fragment-[*].config ST configuration fragments to apply during the Linux kernel configuration (see next chapter) ├── optional-fragment-[*].config Optional ST configuration fragments to apply during the Linux kernel configuration depending on your needs (SMP or not, signature or not, ...) ├── linux-6.1.28.tar.xz Tarball file of the Linux kernel source code ├── README.HOW_TO.txt Helper file for Linux kernel management: reference for Linux kernel build └── series List of all ST patches to apply
- The gcnano driver installation directory is named gcnano-driver-stm32mp-<gcnano driver version>:
gcnano-driver-stm32mp-6.4.13-stm32mp-r1-r0 gcnano-driver installation directory ├── gcnano-driver-stm32mp-6.4.13-stm32mp-r1-r0.tar.xz Tarball file of the gcnano-driver source code └── README.HOW_TO.txt Helper file for gcnano-driver management: reference for gcnano-driver build
- The U-Boot installation directory is named u-boot-stm32mp-<U-Boot version>:
u-boot-stm32mp-v2022.10-stm32mp-r1-r0 U-Boot installation directory ├── [*].patch ST patches to apply during the U-Boot preparation (see next chapter) ├── u-boot-stm32mp-v2022.10-stm32mp-r1 U-Boot source code directory ├── Makefile.sdk Makefile for the U-Boot compilation ├── README.HOW_TO.txt Helper file for U-Boot management: reference for U-Boot build ├── series List of all ST patches to apply └── u-boot-stm32mp-v2022.10-stm32mp-r1-r0.tar.xz Tarball file of the U-Boot source code
- The TF-A installation directory is named tf-a-stm32mp-<TF-A version>:
tf-a-stm32mp-v2.8.6-stm32mp-r1-r0 TF-A installation directory ├── [*].patch ST patches to apply during the TF-A preparation (see next chapter) ├── tf-a-stm32mp-v2.8.6-stm32mp-r1 TF-A source code directory ├── Makefile.sdk Makefile for the TF-A compilation ├── README.HOW_TO.txt Helper file for TF-A management: reference for TF-A build ├── series List of all ST patches to apply └── tf-a-stm32mp-v2.8.6-stm32mp-r1-r0.tar.xz Tarball file of the TF-A source code
- The OP-TEE installation directory is named optee-os-stm32mp-<OP-TEE version>:
optee-os-stm32mp-3.19.0-stm32mp-r1-r0 OP-TEE installation directory ├── [*].patch ST patches to apply during the OP-TEE preparation (see next chapter) ├── optee-os-stm32mp-3.19.0-stm32mp-r1 OP-TEE source code directory ├── fonts.tar.gz fonts for OPTEE-OS ├── Makefile.sdk Makefile for the OP-TEE compilation ├── optee-os-stm32mp-3.19.0-stm32mp-r1-r0.tar.xz Tarball file of the OP-TEE source code ├── README.HOW_TO.txt Helper file for OP-TEE management: reference for OP-TEE build └── series List of all ST patches to apply
- The FIP artifacts directory is named FIP_artifacts:
FIP_artifacts ├── arm-trusted-firmware │ ├── fwconfig │ │ ├── stm32mp13[*]-fw-config-optee.dtb Device tree for FW config → STM32MP13 boards │ │ └── stm32mp15[*]-fw-config-optee.dtb Device tree for FW config → STM32MP15 boards │ ├── metada.bin Store boot information │ ├── tf-a-stm32mp13[*].stm32 FSBL binary→ STM32MP13 boards │ └── tf-a-stm32mp15[*].stm32 FSBL binary → STM32MP15 boards ├── optee │ ├── tee-header_v2-stm32mp13[*].bin Binary file for OP-TEE OS → STM32MP13 boards │ ├── tee-header_v2-stm32mp15[*].bin Binary file for OP-TEE OS → STM32MP15 kits │ ├── tee-pageable_v2-stm32mp13[*].bin Binary file for OP-TEE OS → STM32MP13 boards │ ├── tee-pageable_v2-stm32mp15[*].bin Binary file for OP-TEE OS → STM32MP15 boards │ ├── tee-pager_v2-stm32mp13[*].bin Binary file for OP-TEE OS → STM32MP13 boards │ └── tee-pager_v2-stm32mp15[*].bin Binary file for OP-TEE OS → STM32MP15 boards └── u-boot ├── u-boot-nodtb-stm32mp13.bin ├── u-boot-nodtb-stm32mp15.bin ├── u-boot-stm32mp13[*].dtb Device tree for U-Boot → STM32MP13 boards └── u-boot-stm32mp15[*].dtb Device tree for U-Boot → STM32MP15 boards
- The debug symbol files are located under the <Developer Package installation directory>/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/images/stm32mp1 directory:
For STM32MP25 unknown microprocessor device:
The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
- The OpenSTLinux BSP package is delivered through a tarball file named unknown revision for unknown board type identifier and unknown board type identifier boards.
- Download and install the STM32MPU OpenSTLinux BSP package.
STM32MPU Developer Package - STM32MPU ecosystem v5.1.0 release | |
---|---|
Download |
|
Installation |
<working directory path>/Developer-Packagecd unknown revisiontar xvf |
Release note |
Details about the content of the OpenSTLinux BSP package are available in the associated STM32 MPU OpenSTLinux release note.
|
- In sub-directories from <Developer Package installation directory>/unknown revision , several tarball archive of the OpenSTLinux BSP components can be found.
- The external device tree directory is named external-dt-<ext-dt version>:
unknown revision unknown request external device tree installation directory ├── unknown revision Tarball file of the external device tree source code └── README.HOW_TO.txt Helper file for external device tree management: reference for external device tree usage
- The Linux kernel installation directory is named linux-stm32mp-<kernel version>:
unknown revision Linux kernel installation directory ├── [*].patch ST patches to apply during the Linux kernel preparation (see next chapter) ├── fragment-[*].config ST configuration fragments to apply during the Linux kernel configuration (see next chapter) ├── optional-fragment-[*].config Optional ST configuration fragments to apply during the Linux kernel configuration depending on your needs (SMP or not, signature or not, ...) ├── unknown revision Tarball file of the Linux kernel source code ├── README.HOW_TO.txt Helper file for Linux kernel management: reference for Linux kernel build └── series List of all ST patches to apply
- The gcnano driver installation directory is named gcnano-driver-stm32mp-<gcnano driver version>:
unknown revision gcnano-driver installation directory ├── [*].patch ST patches to apply during the gcnano driver preparation (see next chapter) ├── unknown revision Tarball file of the gcnano-driver source code ├── README.HOW_TO.txt Helper file for gcnano-driver management: reference for gcnano-driver build └── series List of all ST patches to apply
- The ddr phy installation directory is named stm32mp-ddr-phy-<ddr phy version>:
unknown revision unknown request ddr-phy installation directory ├── unknown revision Tarball file of the stm32mp-ddr-phy binaries └── README.HOW_TO.txt Helper file for ddr phy management: reference for ddr-phy use
- The OP-TEE installation directory is named optee-os-stm32mp-<OP-TEE version>:
unknown revision OP-TEE installation directory ├── [*].patch ST patches to apply during the OP-TEE preparation (see next chapter) ├── fiptool-stm32mp tool for fip generation ├── fonts.tar.gz fonts for OPTEE-OS ├── Makefile.sdk Makefile for the OP-TEE compilation ├── unknown revision Tarball file of the OP-TEE source code ├── README.HOW_TO.txt Helper file for OP-TEE management: reference for OP-TEE build └── series List of all ST patches to apply
- The U-Boot installation directory is named u-boot-stm32mp-<U-Boot version>:
unknown revision U-Boot installation directory ├── [*].patch ST patches to apply during the U-Boot preparation (see next chapter) ├── fiptool-stm32mp tool for fip generation ├── fragment-[*].fb_cfg ST configuration fragments to apply during the U-Boot configuration to support fastboot ├── Makefile.sdk Makefile for the U-Boot compilation ├── README.HOW_TO.txt Helper file for U-Boot management: reference for U-Boot build ├── series List of all ST patches to apply └── unknown revision Tarball file of the U-Boot source code
- The TF-A installation directory is named tf-a-stm32mp-<TF-A version>:
unknown revision TF-A installation directory ├── [*].patch ST patches to apply during the TF-A preparation (see next chapter) ├── fiptool-stm32mp tool for fip generation ├── Makefile.sdk Makefile for the TF-A compilation ├── README.HOW_TO.txt Helper file for TF-A management: reference for TF-A build ├── series List of all ST patches to apply ├── tf-a-st-ddr.tar.gz Tarball file of the DDR firmware └── unknown revision Tarball file of the TF-A source code
- The FIP artifacts directory is named FIP_artifacts:
FIP_artifacts ├── arm-trusted-firmware │ ├── bl2 │ │ ├── tf-a-stm32mp257f-dk-[*]-optee-emmc.bin TF-A binary for FSBL partition (eMMC boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── tf-a-stm32mp257f-dk-[*]-optee-sdcard.bin TF-A binary for FSBL partition (microSD card boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── tf-a-stm32mp257f-dk-[*]-uart.bin TF-A binary for uart serial boot partition (STM32CubeProgrammer) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── tf-a-stm32mp257f-dk-[*]-usb.bin TF-A binary for usb serial boot partition (STM32CubeProgrammer) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── tf-a-stm32mp257f-dk-optee-emmc.bin │ │ ├── tf-a-stm32mp257f-dk-optee-sdcard.bin │ │ ├── tf-a-stm32mp257f-dk-uart.bin │ │ ├── tf-a-stm32mp257f-dk-usb.bin │ │ ├── tf-a-stm32mp257f-ev1-[*]-optee-emmc.bin TF-A binary for FSBL partition (eMMC boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── tf-a-stm32mp257f-ev1-[*]-optee-sdcard.bin TF-A binary for FSBL partition (microSD card boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── tf-a-stm32mp257f-ev1-[*]-uart.bin TF-A binary for uart serial boot partition (STM32CubeProgrammer) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── tf-a-stm32mp257f-ev1-[*]-usb.bin TF-A binary for usb serial boot partition (STM32CubeProgrammer) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── tf-a-stm32mp257f-ev1-optee-emmc.bin │ │ ├── tf-a-stm32mp257f-ev1-optee-nor.bin │ │ ├── tf-a-stm32mp257f-ev1-optee-sdcard.bin │ │ ├── tf-a-stm32mp257f-ev1-uart.bin │ │ └── tf-a-stm32mp257f-ev1-usb.bin │ ├── bl31 │ │ ├── stm32mp257f-dk-[*]-bl31-optee-emmc.dtb TF-A dtb for eMMC boot device for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── stm32mp257f-dk-[*]-bl31-optee-sdcard.dtb TF-A dtb for sdcard boot device for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── stm32mp257f-ev1-[*]-bl31-optee-emmc.dtb TF-A dtb for eMMC boot device for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── stm32mp257f-ev1-[*]-bl31-optee-nor.dtb TF-A dtb for nor boot device for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── stm32mp257f-ev1-[*]-bl31-optee-sdcard.dtb TF-A dtb for sdcard boot device for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── tf-a-bl31-stm32mp25-optee-emmc.bin │ │ ├── tf-a-bl31-stm32mp25-optee-nor.bin │ │ └── tf-a-bl31-stm32mp25-optee-sdcard.bin │ ├── ddr │ │ ├── ddr_pmu-stm32mp257f-dk-[*]-optee-emmc.bin Trained DDR for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── ddr_pmu-stm32mp257f-dk-[*]-optee-sdcard.bin Trained DDR for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── ddr_pmu-stm32mp257f-dk-[*]-uart.bin Trained DDR for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── ddr_pmu-stm32mp257f-dk-[*]-usb.bin Trained DDR for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ │ ├── ddr_pmu-stm32mp257f-ev1-[*]-optee-emmc.bin Trained DDR for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── ddr_pmu-stm32mp257f-ev1-[*]-optee-nor.bin Trained DDR for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── ddr_pmu-stm32mp257f-ev1-[*]-optee-sdcard.bin Trained DDR for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ ├── ddr_pmu-stm32mp257f-ev1-[*]-uart.bin Trained DDR for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ │ └── ddr_pmu-stm32mp257f-ev1-[*]-usb.bin Trained DDR for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ ├── fwconfig │ │ ├── stm32mp257f-dk-[*]-fw-config-optee-emmc.dtb │ │ ├── stm32mp257f-dk-[*]-fw-config-optee-sdcard.dtb │ │ ├── stm32mp257f-ev1-[*]-fw-config-optee-emmc.dtb │ │ ├── stm32mp257f-ev1-[*]-fw-config-optee-nor.dtb │ │ └── stm32mp257f-ev1-[*]-fw-config-optee-sdcard.dtb │ ├── metadata.bin │ ├── tf-a-stm32mp257f-dk-[*]-optee-emmc.stm32 TF-A binary for FSBL partition (eMMC boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ ├── tf-a-stm32mp257f-dk-[*]-optee-sdcard.stm32 TF-A binary for FSBL partition (microSD card boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ ├── tf-a-stm32mp257f-dk-[*]-uart.stm32 TF-A binary for uart serial boot partition (nor boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ ├── tf-a-stm32mp257f-dk-[*]-usb.stm32 TF-A binary for usb serial boot partition (nor boot device) for STM32MP257F-DK OSTL → STM32MP25 Discovery boards │ ├── tf-a-stm32mp257f-ev1-[*]-optee-emmc.stm32 TF-A binary for FSBL partition (eMMC boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ ├── tf-a-stm32mp257f-ev1-[*]-optee-nor.stm32 TF-A binary for FSBL partition (nor boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ ├── tf-a-stm32mp257f-ev1-[*]-optee-sdcard.stm32 TF-A binary for FSBL partition (microSD card boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ ├── tf-a-stm32mp257f-ev1-[*]-uart.stm32 TF-A binary for uart serial boot partition (nor boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards │ └── tf-a-stm32mp257f-ev1-[*]-usb.stm32 TF-A binary for usb serial boot partition (nor boot device) for STM32MP257F-EV1 OSTL → STM32MP25 Evaluation boards ├── optee │ ├── tee-header_v2-stm32mp25[*].bin │ ├── tee-pageable_v2-stm32mp25[*].bin │ └── tee-pager_v2-stm32mp25[*].bin └── u-boot ├── u-boot-nodtb-stm32mp25-default.bin U-Boot binary → STM32MP5 boards ├── u-boot-nodtb-stm32mp25-fastboot-emmc.bin U-Boot binary with fastboot on eMMC→ STM32MP5 boards ├── u-boot-nodtb-stm32mp25-fastboot-sdcard.bin U-Boot binary with fastboot on SD-Card→ STM32MP5 boards └── u-boot-stm32mp25[*].dtb Device tree for U-Boot → STM32MP5 boards
- The debug symbol files are located under the <Developer Package installation directory>/unknown revision directory:
5.2.1. Building and deploying the external device tree for the first time (only on STM32MP25 unknown microprocessor device)
Prerequisite: the SDK is installed.
Open the <external device tree installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the external device tree (optional but recommended)
☐ export the path of external device tree directory into the variable EXTDT_DIR
The external device tree is now set-up and can be used during compilation.
5.2.2. Building and deploying the Linux kernel for the first time
Prerequisite: the SDK is installed. It is mandatory to execute once the steps specified below before modifying the Linux kernel, or adding external out-of-tree Linux kernel modules.
The partitions related to the Linux kernel are:
- the bootfs partition that contains the Linux kernel U-Boot image (uImage) and device tree
- the rootfs partition that contains the Linux kernel modules
The Linux kernel might be cross-compiled, either in the source code directory, or in a dedicated directory different from the source code directory.
This last method is recommended as it clearly separates the files generated by the cross-compilation from the source code files.
Open the <Linux kernel installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the Linux kernel (optional but recommended)
☐ prepare the Linux kernel (applying the ST patches)
☐ configure the Linux kernel (applying the ST fragments)
☐ cross-compile the Linux kernel
☐ deploy the Linux kernel (that is, update the software on board)
The Linux kernel is now installed: let's modify the Linux kernel.
5.2.3. Building and deploying the gcnano-driver for the first time (only on STM32MP15x lines
and STM32MP25 unknown microprocessor device)
Prerequisite:
- the SDK is installed.
- the Linux kernel is built as explained here
It is mandatory to execute once the steps specified below before modifying gcnano-driver.
A kernel module depends on the Linux kernel version. If kernel module is not built with the correct Linux kernel, the kernel could refuse the module to be loaded.
Open the <gcnano-driver installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the gcnano-driver (optional but recommended)
☐ cross-compile the gcnano-driver
☐ deploy the gcnano-driver (that is, update the software on board)
The gcnano-driver is now installed.
5.2.4. Building and deploying the U-Boot for the first time
Prerequisite: the SDK is installed. It is mandatory to execute once the steps specified below before modifying the U-Boot.
As explained in the boot chain overview, the trusted boot chain is the default solution delivered by STMicroelectronics.
Within this scope, the partition related to the U-Boot is the ssbl one that contains the U-Boot and its device tree blob.
Open the <U-Boot installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the U-Boot (optional but recommended)
☐ prepare the U-Boot (applying the ST patches)
☐ cross-compile the U-Boot
☐ deploy the U-Boot (that is, update the software on board)
The U-Boot is now installed: let's modify the U-Boot.
5.2.5. Building and deploying the TF-A for the first time
Prerequisite: the SDK is installed. It is mandatory to execute once the steps specified below before modifying the TF-A.
As explained in the boot chain overview, the trusted boot chain is the default solution delivered by STMicroelectronics.
Within this scope, the partition related to the TF-A is the fsbl one.
Open the <TF-A installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the TF-A (optional but recommended)
☐ prepare the TF-A (applying the ST patches)
☐ cross-compile the TF-A
☐ deploy the TF-A (that is, update the software on board)
The TF-A is now installed: let's modify the TF-A.
5.2.6. Building and deploying the OP-TEE for the first time
Prerequisite: the SDK is installed. It is mandatory to execute once the steps specified below before modifying the OP-TEE.
As explained in the boot chain overview, the trusted boot chain is the default solution delivered by STMicroelectronics. Within this scope, the partition related to the OP-TEE is the fsbl one.
Open the <OP-TEE installation directory>/README.HOW_TO.txt helper file, and execute its instructions to:
☐ setup a software configuration management (SCM) system (git) for the OP-TEE (optional but recommended)
☐ prepare the OP-TEE (applying the ST patches)
☐ cross-compile the OP-TEE
☐ deploy the OP-TEE (that is, update the software on board)
The OP-TEE is now installed: let's modify the OP-TEE.
5.3. Installing the debug symbol files
Optional step: it is mandatory only if you want to debug Linux® kernel, U-Boot, OP-TEE, or TF-A with GDB.
5.3.1. Using the debug symbol files
These files are used to debug the Linux® kernel, U-Boot, OP-TEE, or TF-A with GDB. Especially, the Debug OpenSTLinux BSP components chapter explains how to load the debug symbol files in GDB.
6. Installing the components to develop software running on Arm Cortex-M (STM32CubeMPU Package) ( only on STM32MP15x lines
and STM32MP25 unknown microprocessor device)
6.1. Installing STM32CubeIDE
Optional step: it is needed if you want to modify or add software running on Arm Cortex-M.
The table below explains how to download and install STM32CubeIDE which addresses STM32 MCU, and also provides support for Cortex-M inside STM32 MPU.
STM32 MPU support, inside STM32CubeIDE, is available on Linux® and Windows® host PCs, but it is NOT on macOS®.
STM32CubeIDE for Linux® host PC | STM32CubeIDE for Windows® host PC | |
---|---|---|
Download |
Version 1.13.0
|
Version 1.13.0
|
Installation guide | ||
User manual | ||
Detailed release note |
|
Minor releases may be available from the update site. Check chapter 10 in (UM2609) for more information on how to update STM32CubeIDE.
6.2. Installing the STM32CubeMPU Package
Optional step: it is mandatory only if you want to modify the STM32CubeMPU Package.
Prerequisite: the STM32CubeIDE is installed.
For STM32MP1 series:
- The STM32CubeMP1 Package is delivered through an archive file named en.STM32Cube_FW_MP1_V1.6.0.zip.
- Download and install the STM32CubeMP1 Package
The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
STM32MP1 Developer Package STM32CubeMP1 Package - v5.0.0 release | |
---|---|
Download |
|
Installation |
<working directory path>/Developer-Packagecd
unzip en.STM32Cube_FW_MP1_V1.6.0.zip
|
Release note |
Details about the content of the STM32CubeMP1 Package are available in the STM32Cube_FW_MP1_V1.6.0/Release_Notes.html file.
|
- The STM32CubeMP1 Package installation directory is in the <Developer Package installation directory> directory, and is named STM32Cube_FW_MP1_V1.6.0:
unknown revision STM32CubeMP1 Package: details in STM32CubeMP1 Package content article ├── Drivers │ ├── BSP BSP drivers for the supported STM32MP1 boards │ │ └── [...] │ ├── CMSIS │ │ └── [...] │ └── STM32MP1xx_HAL_Driver HAL drivers for the supported STM32MP1 devices │ └── [...] ├── _htmresc │ └── [...] ├── License.md ├── Middlewares │ └── [...] ├── package.xml ├── Projects │ ├── STM32CubeProjectsList.html List of examples and applications for STM32CubeMP1 Package │ ├── STM32MP157C-DK2 Set of examples and applications → STM32MP15 Discovery kits │ │ └── [...] │ └── STM32MP157C-EV1 Set of examples and applications → STM32MP15 Evaluation boards │ └── [...] ├── Readme.md ├── Release_Notes.html Release note for STM32CubeMP1 Package └── Utilities └── [...]
For STM32MP25 unknown microprocessor device:
- The STM32CubeMP2 Package is delivered through an archive file named unknown revision .
- Download and install the STM32CubeMP2 Package
The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the [[unknown distribution#Top Software license agreement (SLA) and third-party licences|software license agreement (SLA)]]. The detailed content licenses can be found [[unknown distribution|here]].
STM32MP2 Developer Package STM32CubeMP2 Package - v5.1.0 release | |
---|---|
Download |
|
Installation |
<working directory path>/Developer-Packagecd
unknown revisionunzip |
Release note |
Details about the content of the STM32CubeMP2Package are available in the STM32CubeMP2/Release_Notes.html file.
|
- The STM32CubeMP2 Package installation directory is in the <Developer Package installation directory> directory, and is named unknown revision :
unknown revision STM32CubeMP2 Package: details in STM32CubeMP2 Package content article ├── Drivers │ ├── BSP BSP drivers for the supported STM32MP2 boards │ │ └── [...] │ ├── CMSIS │ │ └── [...] │ └── STM32MP2xx_HAL_Driver HAL drivers for the supported STM32MP2 devices │ └── [...] ├── _htmresc │ └── [...] ├── License.md ├── Middlewares │ └── [...] ├── package.xml ├── Projects │ ├── STM32CubeProjectsList.html List of examples and applications for STM32CubeMP2 Package │ └── STM32MP257F-EV1 Set of examples and applications → STM32MP25 Evaluation boards │ └── [...] ├── Readme.md ├── Release_Notes.html Release note for STM32CubeMP2 Package └── Utilities └── [...]
The STM32CubeMPU Package is now installed: let's develop software running on Arm Cortex-M.
7. Developing software running on Arm Cortex-A
7.1. Modifying the Linux kernel
Prerequisites:
The <Linux kernel installation directory>/README.HOW_TO.txt helper file gives the commands to:
☐ configure the Linux kernel
☐ cross-compile the Linux kernel
☐ deploy the Linux kernel (that is, update the software on board)
You can refer to the following simple examples:
- Modification of the kernel configuration
- Modification of the device tree
- Modification of a built-in device driver
- Modification of an external in-tree module
7.2. Adding external out-of-tree Linux kernel modules
Prerequisites:
Most device drivers (or modules) in the Linux kernel can be compiled either into the kernel itself (built-in, or internal module) or as Loadable Kernel Modules (LKMs, or external modules) that need to be placed in the root file system under the /lib/modules directory. An external module can be in-tree (in the kernel tree structure), or out-of-tree (outside the kernel tree structure).
External Linux kernel modules are compiled taking reference to a Linux kernel source tree and a Linux kernel configuration file (.config).
Thus, a makefile for an external Linux kernel module points to the Linux kernel directory that contains the source code and the configuration file, with the "-C <Linux kernel path>" option.
This makefile also points to the directory that contains the source file(s) of the Linux kernel module to compile, with the "M=<Linux kernel module path>" option.
A generic makefile for an external out-of-tree Linux kernel module looks like the following:
<module source file(s)>.o # Path to the directory that contains the Linux kernel source code # and the configuration file (.config) KERNEL_DIR ?= <Linux kernel path> # Path to the directory that contains the generated objects DESTDIR ?= <Linux kernel installation directory> # Path to the directory that contains the source file(s) to compile PWD := $(shell pwd) default: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules install: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) INSTALL_MOD_PATH=$(DESTDIR) modules_install clean: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean# Makefile for external out-of-tree Linux kernel module # Object file(s) to be built obj-m :=
Such module is then cross-compiled with the following commands:
$ make clean
$ make
$ make install
You can refer to the following simple example:
7.3. Adding Linux user space applications
Prerequisites:
- the SDK is installed
- the SDK is started up
Once a suitable cross-toolchain (OpenSTLinux SDK) is installed, it is easy to develop a project outside of the OpenEmbedded build system.
There are different ways to use the SDK toolchain directly, among which Makefile and Autotools.
Whatever the method, it relies on:
- the sysroot that is associated with the cross-toolchain, and that contains the header files and libraries needed for generating binaries (see target sysroot)
- the environment variables created by the SDK environment setup script (see SDK startup)
You can refer to the following simple example:
7.4. Modifying the U-Boot
Prerequisites:
The <U-Boot installation directory>/README.HOW_TO.txt helper file gives the commands to:
☐ cross-compile the U-Boot
☐ deploy the U-Boot (that is, update the software on board)
You can refer to the following simple example:
7.5. Modifying the TF-A
Prerequisites:
The <TF-A installation directory>/README.HOW_TO.txt helper file gives the commands to:
☐ cross-compile the TF-A
☐ deploy the TF-A (that is, update the software on board)
You can refer to the following simple example:
7.6. Modifying the OP-TEE
Prerequisites:
The <OP-TEE installation directory>/README.HOW_TO.txt helper file gives the commands to:
☐ cross-compile the OP-TEE
☐ deploy the OP-TEE (that is, update the software on board)
You can refer to the following simple example:
8. Developing software running on Arm Cortex-M
Following chapters are valid only on STM32MP15x lines and STM32MP25 unknown microprocessor device.
8.1. How to create a STM32CubeMPU project from scratch or open/modify an existing one from STM32CubeMPU package
Refer to:
- STM32CubeMP15 Package for STM32MP15x lines
- STM32CubeMP2 Package for STM32MP25 unknown microprocessor device
9. Fast links to essential commands
If you are already familiar with the Developer Package for the STM32MPU Embedded Software distribution, fast links to the essential commands are listed below.
10. How to go further?
Now that your developments are ready, you might want to switch to the STM32MPU Distribution Package, in order to create your own distribution and to generate your own SDK and image.