Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Each STM32MP2 EV1 comes pre-loaded with U-Boot. U-Boot runs as the primary firmware from the on-module eMMC Flash on each power-on / reset.

U-Boot is probably the most popular firmware monitor for Linux. It is developed and maintained by DENX Software Engineering (www.denx.de). If you need detailed information on any aspects of U-Boot operation, DENX publishes extensive U-Boot user documentation at their web site.

On the STM32MP2 EV1, U-Boot image is stored in the eMMC device. On a power-on / reset, U-Boot is relocated to DDR RAM.

As soon as the module is powered on or reset, the core proceeds to boot the U-Boot firmware printing the following output to the serial console:

U-Boot 2022.10-stm32mp-r2-head-10040637 (Oct 03 2022 - 19:25:32 +0000)

CPU: STM32MP257FAI Rev.Y
Model: STMicroelectronics STM32MP257F-EV1 Evaluation Board
Board: stm32mp2 (st,stm32mp257f-ev1)
Board: MB1936 Var1.0 Rev.D-01
DRAM:  4 GiB
optee optee: OP-TEE: revision 3.19 (afacf356)
Core:  423 devices, 40 uclasses, devicetree: board
WDT:   Started watchdog with servicing (32s timeout)
NAND:  0 MiB
MMC:   STM32 SD/MMC: 0, STM32 SD/MMC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:   eth1: eth1@482c0000, eth0: eth2@482d0000
No EFI system partition
Hit any key to stop autoboot:  0 
STM32MP>

If you hit any key on the serial console before the number of seconds defined by the U-Boot bootdelay variable has elapsed, you will enter the U-Boot interactive command monitor. From the command monitor you can run U-Boot commands to examine memory, load an image from Ethernet, boot Linux from a loaded image or perform any other action supported by U-Boot.

U-Boot makes use of the so-called environment variables to define various aspects of the target functionality. On the STM32MP2 EV1, the U-Boot environment is stored in the eMMC Flash and is persistent across power or reset cycles. Parameters defined by the U-boot environment variables include: target IP address, target MAC address, location in RAM where a Linux bootable image will be loaded, and many others.

To manipulate the U-Boot environment the following commands are used:

  • printenv <var> - print the value of the variable var. Without arguments, prints all environment variables:

    STM32MP> printenv
    arch=arm
    autoload=0
    baudrate=115200
    board=stm32mp2
    board_name=stm32mp257f-ev1
    ...
    STM32MP>
  • setenv <var> <val> - set the variable var to the value val:

    STM32MP> setenv image vlad/imx8m/my.Image
    STM32MP>

Running setenv <var> will unset (undefine) a specified U-Boot variable.

  • saveenv - save the up-to-date U-Boot environment, possibly updated using setenv commands, into the Flash. Running saveenv makes sure that any updates you have made to the U-Boot environment are persistent across power cycles and resets.

    STM32MP> saveenv
    Saving Environment to MMC... Writing to MMC(1)... OK
    STM32MP>

The autoboot sequence in U-Boot is controlled by the two environment variables called bootdelay and bootcmd.

The bootdelay variable defines a delay, in seconds, before running the autoboot command defined by bootcmd. During the bootdelay countdown, you can interrupt the autobooting by pressing any key. This will let you enter the U-Boot command line interface.

The bootcmd variable defines a command executed by U-Boot automatically after the bootdelay countdown is over. Typically, this would be run netboot to boot Linux from TFTP during development or run flashboot to boot Linux from the on-module Flash on deployed units.

In deployed configurations, where boot time to the service provided by your embedded device is critical, you will probably want to set bootdelay to 0:

STM32MP> set bootdelay 0
STM32MP> saveenv

This will make sure that on each power on / reset U-Boot immediately executes the command defined by bootcmd, typically booting Linux from the on-module Flash.

With bootdelay set to 0 the U-Boot countdown is disabled, so there is a question how you enter the U-Boot command monitor, should you need to enter it for some reason. To do so, push the Ctrl-C keys down and don't release them until you have hit the reset button on the baseboard. This will interrupt the U-Boot bootcmd sequence and let you enter the U-Boot command monitor:

U-Boot 2022.10-stm32mp-r2-head-10040637 (Oct 03 2022 - 19:25:32 +0000)
...
Hit any key to stop autoboot:  0
STM32MP> <INTERRUPT>

From the command monitor, you would be able to reset bootdelay to 3 or whatever value makes sense to you.

  • No labels