Hi all,
I want to make QSPI NOR Flash booting image for i.MX8M nano EVK(8MNANOLPD4-EVK).
I built the environment referring to IMXLXYOCTOUG (Rev. LF6.1.22_2.0.0.0 - 30 June 2023) and IMXBSPPG (Rev. LF6.1.22_2.0.0.0 - 30 June 2023).
I used the following commands to confirm that binary files are created.
1)export CROSS_COMPILE=aarch64-linux-gnu-
2)make imx8mn_ddr4_evk_defconfig
3)make
4)u-boot.bin and u-boot-spl.bin are ready.
Please let me know. I don't know how to create an image to write to flash memory.
Best Regards,
Shinji
Hi Shinji,
I tested it again on a fresh Linux machine and it worked for me. I executed the following script on my Ubuntu 20.04 machine and the boot image was successfully created:
# Build script for 8M Nano boot image
# Version: 6.1.22-mickledore
# Requires ARMv8 toolchain. Please adapt path below.
mkdir firmware-imx
git clone https://github.com/nxp-imx/uboot-imx
git clone https://github.com/nxp-imx/imx-atf
git clone https://github.com/nxp-imx/imx-mkimage
cd firmware-imx
wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.20.bin
chmod a+x firmware-imx-8.20.bin
./firmware-imx-8.20.bin
cd ..
cd uboot-imx
git checkout -b lf_v2023.04 origin/lf_v2023.04
# Adapt path to your toolchain here. The toolchain was created with Yocto and provides
# the following setup script ($ bitbake imx-image-multimedia -c populate_sdk)
# If you created it differently, please make sure you run the correct initializations.
. /opt/toolchains/imx-wayland/6.1-mickledore/environment-setup-armv8a-poky-linux
make imx8mn_evk_defconfig
make
cd ..
cd imx-atf
git checkout -b lf_v2.8 origin/lf_v2.8
unset LDFLAGS
make PLAT=imx8mn bl31
cd ..
cd imx-mkimage
cp ../uboot-imx/spl/u-boot-spl.bin iMX8M
cp ../uboot-imx/u-boot-nodtb.bin iMX8M
cp ../uboot-imx/arch/arm/dts/imx8mn-evk.dtb iMX8M
cp ../imx-atf/build/imx8mn/release/bl31.bin iMX8M
cp ../firmware-imx/firmware-imx-8.20/firmware/ddr/synopsys/lpddr4_pmu_train_* iMX8M
cp ../uboot-imx/tools/mkimage iMX8M/mkimage_uboot
# With "DEV=flexspi" a boot image for Serial Flash is built
# Default (no parameter) would build for eMMC/SD-card
make SOC=iMX8MN DEV=flexspi flash_evk
cd ..
A log file for the build is attached as well.
Regards,
Bernhard.
Hi Bernhard,
Thank you for your assistance with the detailed build procedure.
I followed the build procedure and the flash.bin file was created.
However, when I check the flash.bin file, there is no FlexSPI Configuration Block or IVT HEADER.
Please let me know how to add FlexSPI Configuration Block and IVT HEADER.
Best regards,
Shinji
i.MX RT is a different architecture compared to i.MX 8M (Mini/Nano/Plus), so the procedure from the mentioned app note AN12108 will not work.
A few notes:
uuu.exe -b qspi qspi_bootloader_image
uuu.exe imx-boot-imx8mnevk-fspi.bin-flash_evk_flexspi qspi_bootloader_image
\ u-boot image used as programming manager / \ image to program /
In fact if you use the build in script (-b qspi), then it's doing the same thing.
There are other ways to program the QSPI, you could boot from eMMC/SD card and stop in u-boot and program the QSPI from there.
Regards,
Bernhard
Dear Bernhard,
Thanks for the reply and information.
I want to rewrite the SPI flash with an in-circuit emulator.
To do this, I want to create a single image file.
I have written the pre-built "imx-boot-imx8mn-ddr4-evk-fspi.bin-flash_ddr4_evk_flexspi.bin" and it works.
I think that IVT is required at the first address of SPI flash when i.MX8M nano is activated with SPI flash.
However, there is no IVT in u-boot.bin and u-boot-spl.bin that I built.
Please tell me how to make a binary equivalent to "imx-boot-imx8mn-ddr4-evk-fspi.bin-flash_ddr4_evk_flexspi.bin" using the u-boot.bin and u-boot-spl.bin that I built.
Regards,
Shinji
Hello Shinji,
you are missing a few steps in the boot image build process. See an example (one way to do this) for 8M Nano and BSP 6.1.22 below:
Get u-boot repo from Github:
============================
git clone https://github.com/nxp-imx/uboot-imx
Change to repository folder and check for latest version:
cd uboot-imx
git branch -a
git checkout -b lf_v2023.04 origin/lf_v2023.04
Set the cross compiler environment variables for the 8M Nano:
source ~/opt/fsl-imx-wayland/6.1-mickledore/environment-setup-aarch64-poky-linux
export ARCH=arm
Configure the project with the board you want to build:
make imx8mn_evk_defconfig
Build u-boot:
make
Download and build the ARM Trusted Firmware, change to the base directory first:
================================================================================
cd ..
git clone https://github.com/nxp-imx/imx-atf
cd imx-atf
git checkout -b lf_v2.8 origin/lf_v2.8
make PLAT=imx8mn bl31
In case of an error "aarch64-poky-linux-ld.bfd:unrecognized option 'WI,-O1':
unset LDFLAGS
make PLAT=imx8mn bl31
Download LPDDR4 training firmware binaries: Check the version in the Linux BSP Release document.
================================================================================================
cd ..
mkdir firmware-imx
cd firmware-imx
wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.20.bin
chmod a+x firmware-imx-8.20.bin
./firmware-imx-8.20.bin
Download imx-mkimage utility: Please note, "imx-mkimage" is not the same as "mkimage"
=====================================================================================
cd ..
git clone https://github.com/nxp-imx/imx-mkimage
cd imx-mkimage
git checkout -b imx_5.4.3_2.0.0 origin/imx_5.4.3_2.0.0
Stay in the folder "imx-mkimage" and copy all required files and build the boot image:
======================================================================================
cp ../uboot-imx/spl/u-boot-spl.bin iMX8M
cp ../uboot-imx/u-boot-nodtb.bin iMX8M
cp ../uboot-imx/arch/arm/dts/imx8mn-evk.dtb iMX8M
cp ../imx-atf/build/imx8mn/release/bl31.bin iMX8M
cp ../firmware-imx/firmware-imx-8.5/firmware/ddr/synopsys/lpddr4_pmu_train_* iMX8M
cp ../uboot-imx/tools/mkimage iMX8M/mkimage_uboot
make SOC=iMX8MN DEV=flexspi flash_evk (take care of large and lower case!)
The resulting output binary "flash.bin" for the 8M Nano can then be found in the folder "iMX8M".
Regards,
Bernhard.
Dear Bernhard,
Thanks for the reply and the process.
I get an error when I do the last make.
Please let me know how to deal with it.
+++++
$ make SOC=iMX8MN DEV=flexspi flash_evk
make[1]: *** No rule to make target 'fsl-imx8mn-evk.dtb', needed by 'u-boot.itb'. Stop.
make: *** [Makefile:23: flash_evk] Error 2
+++++
Best Regards,
Shinji
Hello Shinji,
I detected two typos in the procedure, maybe this causes the problem. I corrected them in script above.
Please check:
Get u-boot repo from Github:
============================
git clone https://github.com/nxp-imx/uboot-imx
Change to repository folder and check for latest version:
cd uboot-imx
git branch -a
git checkout -b lf_v2023.04 origin/imx_v2023.04 --> This should be lf
Download and build the ARM Trusted Firmware, change to the base directory first:
================================================================================
cd ..
git clone https://github.com/nxp-imx/imx-atf
cd imx-atf
git checkout -b lf_v2.8 origin/lf_v2.8- --> The dash here is wrong
make PLAT=imx8mn bl31
Regards,
Bernhard.
Dear Bernhard,
Thank you for your many replies.
I get the following error when I run make
$ make SOC=iMX8MN DEV=flexspi flash_evk
make: *** No rule to make target 'flash_evk'. Stop.
Best regards,
Shinji
Dear Bernhard,
Thank you for your reply.
I once again built and re-built the build environment.
This resulted in an error.
+++++
$make SOC=iMX8MN DEV=flexspi flash_evk
Compiling mkimage_imx8
PLAT=imx8mn HDMI=no
Compiling mkimage_imx8
cc -O2 -Wall -std=c99 -static mkimage_imx8.c -o mkimage_imx8 -lz
31736+1 records in
31737+0 records out
126948 bytes (127 kB, 124 KiB) copied, 0.0287526 s, 4.4 MB/s
make[1]: *** No rule to make target 'fsl-imx8mn-evk.dtb', needed by 'u-boot.itb'. Stop.
make: *** [Makefile:23: flash_evk] Error 2
+++++
Best regards,
Shinji
To create a bootable image for QSPI NOR Flash on the i.MX8M nano EVK, you can follow the steps outlined in the NXP application note 'How to Enable Boot from QSPI Flash' (AN12108). This document provides a detailed guide on how to program a bootable image into an external storage device.
Here are the general steps you would need to follow:
Also, you might find the application note 'Deploying Linux Kernel and Root File System Images on QorIQ LS1046ARDB' (AN5340) helpful. It provides information on how to deploy U-Boot, Linux kernel, and the root file system to a board using NXP SDK images.