U-Boot environment and boot script
The last step to configure U-Boot in LmP is to provide the boot
environment (for lmp-base
) and the boot command. The user can start by
using the reference board support and adjusting the files according to the
target board.
For the lmp-base
distro, provide the boot environment input file
(uEnv.txt.in
), which sets the needed variables for booting:
u-boot-base-scr/imx8mmevk/uEnv.txt.in
:
devnum=2
devtype=mmc
bootcmd_args=setenv bootargs console=tty1 console=${console} root=/dev/mmcblk2p2 rootfstype=ext4 rootwait rw
bootcmd_dtb=fatload ${devtype} ${devnum}:1 ${fdt_addr} ${fdt_file}
bootcmd_load_k=fatload ${devtype} ${devnum}:1 ${loadaddr} ${image}
bootcmd_run=booti ${loadaddr} - ${fdt_addr}
bootcmd=run bootcmd_args; run bootcmd_dtb; run bootcmd_load_k; run bootcmd_run
The user needs to define the devnum
and bootcmd_args
root parameters to
meet the eMMC index on their board. Other board specific variables can
be set in this file if needed, like fdt_file
or console configurations.
After uEnv.txt.in
is in place, provide boot.cmd
, which loads this
environment and boots to kernel:
u-boot-base-scr/imx8mmevk/boot.cmd
:
fatload mmc ${emmc_dev}:1 ${loadaddr} /uEnv.txt
env import -t ${loadaddr} ${filesize}
run bootcmd
For the lmp-base
distro, these files live in u-boot-base-scr
:
recipes-bsp/u-boot/
├── u-boot-base-scr
│ └── <board>
│ ├── boot.cmd
│ └── uEnv.txt.in
└── u-boot-base-scr.bbappend
Also for the lmp
distro, the only file that needs to be provided is boot.cmd
,
but in this case it handles both the environment as well as the boot
command:
u-boot-ostree-scr-fit/imx8mmevk/boot.cmd
:
echo "Using freescale_${fdt_file}"
# Default boot type and device
setenv bootlimit 3
setenv devtype mmc
setenv devnum 2
setenv bootpart 1
setenv rootpart 2
# Boot image files
setenv fdt_file_final freescale_${fdt_file}
setenv fit_addr ${initrd_addr}
# Boot firmware updates
setenv bootloader 42
setenv bootloader2 300
setenv bootloader_s 1042
setenv bootloader2_s 1300
setenv bootloader_image "imx-boot"
setenv bootloader_s_image ${bootloader_image}
setenv bootloader2_image "u-boot.itb"
setenv bootloader2_s_image ${bootloader2_image}
setenv uboot_hwpart 1
@@INCLUDE_COMMON@@
The user needs to define devnum
as expected by the board and make sure
the initrd_addr
is set in U-Boot correctly, otherwise the user may need
to set the initrd_addr
(as well as any other missing addresses) in this
file.
Note
If porting to a new SoC not supported in LmP, the boot firmware offsets also need to be calculated and adjusted as the procedure described here TF-A/OP-TEE.
The boot.cmd for the lmp
distro lives in:
recipes-bsp/u-boot/
├── u-boot-ostree-scr-fit
│ └── <board>
│ └── boot.cmd
└── u-boot-ostree-scr-fit.bbappend
After providing these files, LmP has all the needed configuration to boot U-Boot and get to the kernel.