SBL EMMC Linux Multistage
Note
SBL EMMC Linux boots from the boot partition 1 of eMMC and does not use a filesystem boot. The appimage is flashed to the offsets in eMMC as configured using syscfg.
Attention
Care should be taken to ensure that the R5, M4 appimage and the Linux appimage flashed does NOT overwrite the Linux binaries in eMMC.
Note
The load address of resource table for R5 and M4 cores must be consistant with the address in the Linux dts file.
Introduction
This is a bootloader example, which shows an example of booting Linux on A53 core and RTOS/NORTOS applications on WKUP R5, MCU R5 cores from eMMC.
The booting is done in 2 stages(2 bootloader applications).
The stage1 of the bootloader runs from the HSM RAM. It initializes the DDR. Then it loads the stage2 of the bootloader with Device Manager to DDR and starts running it.
Stage2 is a multithreaded application which boots HSM-M4, RTOS on MCU-R5F, Linux on A53 in bootloader thread and sciserver will be running in another thread.
The SBL uses 5 appimages
A Linux appimage containing the Linux binaries (ATF, OPTEE, A53 SPL).
tiboot3.bin with SBL stage1, TIFS, BoardConfig
Appimage for WKUP R5 with SBL stage2
Appimage for MCU R5
Appimage for HSM M4
The bootloader does SOC initializations and parses the multicore appimage present in eMMC boot partition 1, splits it into RPRCs for each core applicable. Each core is then initialized, RPRC image is loaded, entry points are set and the core is released from reset.
For booting Linux, SBL parses the Linux appimage present in eMMC boot partition, splits it into individual linux binaries (ATF, OPTEE, SPL). SBL loads the Linux binaries, entry point is set to the start address of ATF and A53 core is released from reset.
Refer SBL Booting Linux From eMMC for more details on the EMMC bootflow.
Note
The default appimages in the SDK are built with authentication type 0 and load address 0x84000000. The gAppimage section in the bootloader application also has to be linked to the same address (0x84000000). If gAppimage section address is changed or multiple gAppimage buffers are used in the bootloader application, please ensure application’s makefile is also updated with the corresponding load address.
Falcon Boot
With Falcon Boot, devices can achieve fast boot times, making it an ideal solution for applications where boot times are critical.
In order to boot faster,
Linux appimage can be packaged with the Linux kernel and DTB in falcon mode (Linux Appimage Generator Tool).
To boot using falcon mode with EMMC (see Falcon Boot Support)
Refer to Processor SDK Linux - Boot time Optimizations on how to create a buildable Kernel and DTB.
Parameter |
Value |
|---|---|
CPU + OS |
wkup-r5fss0-0 nortos |
Toolchain |
ti-arm-clang |
Board |
am62px-sk |
Example folder |
examples/drivers/boot/sbl_emmc_linux_multistage |
Steps to Run the Example
Build the example
When using CCS projects to build, import the CCS project for the required combination and build it using the CCS project menu (see Using SDK with CCS Projects).
When using makefiles to build, note the required combination and build using make command (see Using SDK with Makefiles)
Create Linux Appimage
Note
Change DEVICE_TYPE to HS in ${SDK_INSTALL_PATH}/devconfig/devconfig.mak and then generate Linux Appimage for HS-SE device.
Create a Linux Appimage containing the Linux binaries (ATF, OPTEE, A53 SPL)
This can be done by running the makefile at {SDK_INSTALL_PATH}/tools/boot/linuxAppimageGen after setting the PSDK path in file
config.makRefer Linux Appimage Generator Tool for more details
Create HSM Appimage
Create a HSM Appimage
This can be done by running the makefile at {SDK_INSTALL_PATH}/tools/boot/HSMAppimageGen
Refer HSM Appimage Generator Tool for more details
Run the example
This example is the SBL which needs to be flashed on the eMMC, along with sample application images for R5, M4 CPUs and Linux Appimage.
There is a default flash config file as shown below which flashes this SBL and the IPC RPMsg Linux echo applications
${SDK_INSTALL_PATH}/tools/boot/sbl_prebuilt/{{ VAR_BOARD_NAME_LOWER }}/default_sbl_emmc_linux.cfg
Note
Use default_sbl_emmc_linux_hs.cfg when flashing to HS-SE devices
Note
Use default_sbl_emmc_linux_hs_fs.cfg when flashing to HS-FS devices - Make sure IPC rpmsg linux echo application is built before running the flash script. (see IPC RP Message Linux Echo)
Note
For IPC rpmsg linux echo, the resource table entity must be placed at the beginning of remoteproc memory section as mentoined in Linux dts file.
To flash to the EVM, refer to Flash a Hello World example . Only when giving the flash config file, point to the
default_sbl_emmc_linux.cfgshown above.Example, assuming SDK is installed at
C:/ti/mcu_plus_sdkand this example and IPC application is built using makefiles, and Linux Appimage is already created, in Windows,cd C:/ti/mcu_plus_sdk/tools/boot python uart_uniflash.py -p COM13 --cfg=C:/ti/mcu_plus_sdk/tools/boot/sbl_prebuilt/{{ VAR_BOARD_NAME_LOWER }}/default_sbl_emmc_linux.cfgIf Linux PC is used, assuming SDK is installed at `~PSDK_LINUX_HS_IMAGE_PATH~/ti/mcu_plus_sdk/tools/boot/sbl_prebuilt/am62px-sk//default_sbl_emmc_linux.cfg
Boot the EVM in eMMC boot mode to boot Linux on A53 and RTOS/Baremetal application on R5 and M4 cores.
Refer to Processor SDK Linux - Boot time Optimizations guide to optimize the time taken by bootloader in the boot sequence.
Sample Output
After flashing and booting the EVM, you will see below output on the UART console (Complete log is not shown)
[KPI] Boot Media : eMMC
[KPI] Boot Media Clock : 200.000 MHz
[KPI] Boot Image Size : 139 KB
[KPI] Cores present :
wkup-r5f0-0
[KPI] System_init : 38955us
[KPI] Drivers_open : 0us
[KPI] SBL Drivers_open : 19425us
[KPI] Board_driversOpen : 0us
[KPI] App_loadSelfcoreImage : 35864us
[KPI] SBL Total Time Taken : 94246us
Image loading done, switching to application ...
Starting 2nd stage bootloader
[KPI] Boot Media : eMMC
[KPI] Boot Media Clock : 200.000 MHz
[KPI] Boot Image Size : 853 KB
[KPI] Cores present :
hsm-m4f0-0
mcu-r5f0-0
a530-0
[KPI] System_init : 2104us
[KPI] Board_init : 0us
[KPI] FreeRtosTask Create : 192us
[KPI] SciserverInit : 15884us
[KPI] SBL Drivers_open : 14602us
[KPI] App_loadImages : 3035us
[KPI] App_loadMCUImages : 4730us
[KPI] App_loadLinuxImages : 21217us
[KPI] SBL Total Time Taken : 61768us
Image loading done, switching to application ...
Starting linux and RTOS/Baremetal applications
NOTICE: BL31: v2.9(release):v2.9.0-dirty
NOTICE: BL31: Built : 14:12:59, May 22 2023
U-Boot SPL 2023.04-g48c1296285 (Sep 14 2023 - 21:24:43 +0000)
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.6--w09.00.04-am62p (Kool Ko')
Trying to boot from MMC1
Authentication passed
Authentication passed
U-Boot 2023.04-g48c1296285 (Sep 14 2023 - 21:24:43 +0000)
SoC: AM62PX SR1.0 HS-FS
Model: Texas Instruments AM62P5 SK
DRAM: 2 GiB (effective 8 GiB)
Core: 81 devices, 29 uclasses, devicetree: separate
MMC: mmc@fa10000: 0, mmc@fa00000: 1, mmc@fa20000: 2
.
.
.
.
.
.
_____ _____ _ _
| _ |___ ___ ___ ___ | _ |___ ___ ||__ __| | | |—|—| | _ | .’ | | __ | __ | | ___ | ___ |
Arago Project am62pxx-evm -
Arago 2023.04 am62pxx-evm -
am62pxx-evm login: