Build U-Boot from source BSP 6.x.y for i.MX8M Mini

Hello everyone,

i followed the manual about Build U-Boot from Source and the specifics for i.MX8M Mini in the BSP 6.x.y version.

In the final build step i get this error:

If a copy all lpddr4_pmu_train_*.bin files from the firmware-imx-8.10.1 then the error appears again but the build runs to the end and i get the flash.bin.

root@dee8f329826c:~/workspace/imx-mkimage# make clean; make SOC=iMX8MM flash_evk_emmc_fastboot
include misc.mak
include m4.mak
include android.mak
include test.mak
include autobuild.mak
include alias.mak
imx8qm clean done
include misc.mak
include m4.mak
include android.mak
include test.mak
include autobuild.mak
include alias.mak
imx8qx clean done
include misc.mak
include m4.mak
include android.mak
include test.mak
include autobuild.mak
imx8dxl clean done
imx8ulp clean done
Compiling mkimage_imx8
PLAT=imx8mm HDMI=no
Compiling mkimage_imx8
cc -O2 -Wall -std=c99 -static mkimage_imx8.c -o mkimage_imx8 -lz
mkimage_imx8.c: In function ‘copy_file.constprop’:
mkimage_imx8.c:345:21: warning: ‘write’ reading 5 bytes from a region of size 4 [-Wstringop-overread]
345 | if (write(ifd, (char *)&zero, 4-tail) != 4-tail) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mkimage_imx8.c:303:13: note: source object ‘zero’ of size 4
303 | int zero = 0;
| ^~~~
In file included from mkimage_imx8.c:24:
/usr/include/unistd.h:378:16: note: in a call to function ‘write’ declared with attribute ‘access (read_only, 2, 3)’
378 | extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur
| ^~~~~
33587+1 records in
33588+0 records out
134352 bytes (134 kB, 131 KiB) copied, 0.0394794 s, 3.4 MB/s
./…/scripts/dtb_check.sh imx8mm-evk.dtb evk.dtb
Use u-boot DTB: fsl-imx8mm-evk.dtb
./…/scripts/pad_image.sh tee.bin
Pad file tee.bin NOT found
./…/scripts/pad_image.sh bl31.bin
./…/scripts/pad_image.sh u-boot-nodtb.bin evk.dtb
u-boot-nodtb.bin + evk.dtb are padded to 814096
BL32=tee.bin DEK_BLOB_LOAD_ADDR=0x40400000 TEE_LOAD_ADDR=0xbe000000 ATF_LOAD_ADDR=0x00920000 ./mkimage_fit_atf.sh evk.dtb > u-boot.its
bl31.bin size:
43488
u-boot-nodtb.bin size:
755416
evk.dtb size:
58680
./mkimage_uboot -E -p 0x3000 -f u-boot.its u-boot.itb
FIT description: Configuration to load ATF before U-Boot
Created: Fri Feb 21 10:30:17 2025
Image 0 (uboot-1)
Description: U-Boot (64-bit)
Created: Fri Feb 21 10:30:17 2025
Type: Standalone Program
Compression: uncompressed
Data Size: 755416 Bytes = 737.71 KiB = 0.72 MiB
Architecture: AArch64
Load Address: 0x40200000
Entry Point: unavailable
Image 1 (fdt-1)
Description: evk
Created: Fri Feb 21 10:30:17 2025
Type: Flat Device Tree
Compression: uncompressed
Data Size: 58680 Bytes = 57.30 KiB = 0.06 MiB
Architecture: Unknown Architecture
Image 2 (atf-1)
Description: ARM Trusted Firmware
Created: Fri Feb 21 10:30:17 2025
Type: Firmware
Compression: uncompressed
Data Size: 43488 Bytes = 42.47 KiB = 0.04 MiB
Architecture: AArch64
OS: Unknown OS
Load Address: 0x00920000
Default Configuration: ‘config-1’
Configuration 0 (config-1)
Description: evk
Kernel: unavailable
Firmware: uboot-1
FDT: fdt-1
Loadables: atf-1
./mkimage_imx8 -version v1 -dev emmc_fastboot -fit -loader u-boot-spl-ddr.bin 0x7E1000 -second_loader u-boot.itb 0x40200000 0x60000 -out flash.bin
Platform: i.MX8M (mScale)
ROM VERSION: v1
BOOT DEVICE: emmc_fastboot
Using FIT image
LOADER IMAGE: u-boot-spl-ddr.bin start addr: 0x007e1000
SECOND LOADER IMAGE: u-boot.itb start addr: 0x40200000 offset: 0x00060000
Output: flash.bin
========= IVT HEADER [HDMI FW] =========
header.tag: 0x0
header.length: 0x0
header.version: 0x0
entry: 0x0
reserved1: 0x0
dcd_ptr: 0x0
boot_data_ptr: 0x0
self: 0x0
csf: 0x0
reserved2: 0x0
boot_data.start: 0x0
boot_data.size: 0x0
boot_data.plugin: 0x0
========= IVT HEADER [PLUGIN] =========
header.tag: 0x0
header.length: 0x0
header.version: 0x0
entry: 0x0
reserved1: 0x0
dcd_ptr: 0x0
boot_data_ptr: 0x0
self: 0x0
csf: 0x0
reserved2: 0x0
boot_data.start: 0x0
boot_data.size: 0x0
boot_data.plugin: 0x0
========= IVT HEADER [LOADER IMAGE] =========
header.tag: 0xd1
header.length: 0x2000
header.version: 0x41
entry: 0x7e1000
reserved1: 0x0
dcd_ptr: 0x0
boot_data_ptr: 0x7e0fe0
self: 0x7e0fc0
csf: 0x8163c0
reserved2: 0x0
boot_data.start: 0x7e0bc0
boot_data.size: 0x37860
boot_data.plugin: 0x0
========= OFFSET dump =========
Loader IMAGE:
header_image_off 0x0
dcd_off 0x0
image_off 0x40
csf_off 0x35400
spl hab block: 0x7e0fc0 0x0 0x35400

Second Loader IMAGE:
sld_header_off 0x5fc00
sld_csf_off 0x60c20
sld hab block: 0x401fcdc0 0x5fc00 0x1020

This U-Boot is bootable on my hardware:

  • Verdin imx8m mini (PN 0055)
  • Mallow Carrier Board

Is there an issue in the manual or did i something wrong?

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

It seems you’re encountering an issue during the U-Boot build process for the i.MX8M Mini, particularly with the handling of binary files like lpddr4_pmu_train_*.bin. Here are some steps to help you resolve this:

  1. Verify Binary Files: Ensure all necessary binary files are correctly placed in the expected directories. These files are crucial for the build process, and any missing or misplaced files can cause errors.

  2. Check the imx-mkimage Utility: Make sure you have the correct version of the imx-mkimage utility and that it is properly configured for your SoC. This utility should be able to locate and use the necessary binary files.

  3. Review Build Steps: Double-check the build steps you followed against the official Toradex documentation for building U-Boot for the i.MX8M Mini. Ensure all prerequisites are met, including the correct setup of the cross-compilation environment and the installation of necessary dependencies.

  4. Analyze Error Messages: Pay close attention to any error messages or warnings during the build process. These can provide clues about what might be going wrong. For example, the warning about write suggests a potential issue with data handling in the code.

  5. Configuration Files: Ensure your U-Boot configuration files are correctly set up for the i.MX8M Mini. Incorrect configurations can lead to build errors or non-functional binaries.

  6. Consult Known Issues: Check for any known issues related to the BSP version you are using. There might be specific patches or workarounds required for your setup.

By carefully reviewing these aspects, you should be able to identify and resolve the issue with your U-Boot build process. If the problem persists, consider revisiting the documentation to ensure no steps were missed or misinterpreted.

Best regards,
Toradex AI Assistant

Please, also check if these links can help you solve your problem:

Build & Deploying U-Boot to Verdin-imx8mm.

Some additional notes:

  • i use docker to build it, based on ubuntu 22.04
  • instead of building the “Device Tree Compiler” from source i installed it via “apt-get install device-tree-compiler” → 1.6.1
  • imx-mkimage git branch: lf-5.15.32-2.0.0 instead of lf-5.15.32_2.0.0 (maybe a typo issue on the website: - vs _)