Booting an Image

Boot Chain Overview

After powering up the device, the BootROM code in the i.MX tries to load a first stage bootloader which is U-Boot SPL in our case. From there, the chain continues with loading of TF-A (Trusted-Firmware-ARM, only for i.MX8MM) and U-Boot. Finally we load the Linux Kernel and Devicetrees.

Boot Stage Name Description Filename in Yocto-Build Image Format
1 BootROM Fixed program in the SoC - -
2 U-Boot SPL Secondary Program Loader flash.bin Raw Binary
3* TF-A BL31 Trusted-Firmware-ARM BL31 u-boot.itb FIT
4 U-Boot Main Bootloader u-boot.itb FIT
5 Linux Linux Kernel + Devicetrees fitImage FIT

* only i.MX8MM

SPL

The U-Boot SPL brings up the most important parts of the SoC, such as the core and the DDR-RAM. Afterwards it loads a FIT image from a fixed offset on the boot device (NOR, SD card, eMMC) to the DDR RAM and jumps to the TF-A or U-Boot entrypoint. It also prints a few lines to the debug UART interface. You should see something like the following:

U-Boot SPL 2020.01_ktn-zeus_3.0.0-alpha2-dirty+gc6e6927046 (Feb 20 2020 - 10:00:34 +0000)
1GB RAM detected, assuming Kontron N801x module...
Normal Boot
Trying to boot from MMC2

TF-A BL31 (only i.MX8MM)

The TF-A BL31 is run at EL3 (exception level 3). It sets up the default security settings for peripherals and can act as a secure monitor for code running in the non-secure world (Linux). For more information about the TF-A and the overall firmware design, see the TF-A documentation.

In our configuration TF-A BL31 also prints a few lines to the debug UART interface. You should see something like the following:

NOTICE:  BL31: v2.2(release):v2.2-dirty
NOTICE:  BL31: Built : 10:25:02, Feb 13 2020

U-Boot

U-Boot acts as a main bootloader. It has a command line interface and runs from DDR RAM. It has support for filesystems and many other things. The typical output from U-Boot will look something like this:

U-Boot 2020.01_ktn-zeus_3.0.0-alpha2-dirty+gc6e6927046 (Feb 20 2020 - 10:00:34 +0000)

CPU:   Freescale i.MX8MMQ rev1.0 at 1200 MHz
Reset cause: POR
Model: Kontron i.MX8MM N8011 S
DRAM:  1 GiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
Net:   eth0: ethernet@30be0000 [PRIME]

Booting from SD Card

You can use the prebuilt images from files.kontron-electronics.de or the images from your Yocto build. To write the image onto the SD card using a Linux host, use the following command and adjust the image file name and the device filename for the SD card to your needs.

Danger

The usage of the dd command in combination with sudo can be dangerous. If you use wrong parameters, this might cause severe loss of data on your hard disk or other drives!

gunzip -c image-ktn-kontron-mx8mm-ktn-zeus-v3.0.0-alpha2-20200203.rootfs.wic.gz | sudo dd of=/dev/<mmcdevice> bs=1M iflag=fullblock oflag=direct conv=fsync status=progress