Most of our machines are interchangeable with each other and have many different configurations with our carrier boards and displays. To suit this everchanging environment they come equipped with different device trees to adapt them to the specific configuration needed.
In this specific case, we will use our SmarCore 8MPlus on our carrier Multimedia 4K.
Note: The OS used in this example is derived from the Yocto Version Honister.
Change Device Tree
Start up the machine e stop the countdown by pressing any key as in the following example:
U-Boot SPL 2021.04+fslc+g8be9f0ca23 (Mar 01 2023 - 13:01:59 +0000) DDRINFO: start DRAM init DDRINFO: DRAM rate 4000MTS DDRINFO:ddrphy calibration done DDRINFO: ddrmix config done SEC0: RNG instantiated Normal Boot WDT: Not found! Trying to boot from BOOTROM image offset 0x8000, pagesize 0x200, ivt offset 0x0 NOTICE: BL31: v2.4(release):lf-5.15.5-1.0.0-0-g05f788b9b NOTICE: BL31: Built : 05:49:10, Mar 2 2022 U-Boot 2021.04+fslc+g8be9f0ca23 (Mar 01 2023 - 13:01:59 +0000) CPU: i.MX8MP rev1.1 1600 MHz (running at 1200 MHz) CPU: Industrial temperature grade (-40C to 105C) at 31C Reset cause: POR Model: Engicam i.MX8MPlus Smarcore DRAM: 2 GiB MMC: FSL_SDHC: 1, FSL_SDHC: 2 Loading Environment from MMC... *** Warning - bad CRC, using default environment Fail to setup video link In: serial Out: serial Err: serial SEC0: RNG instantiated BuildInfo: - ATF 05f788b switch to partitions #0, OK mmc1 is the current device flash target is MMC:1 Net: Warning: ethernet@30bf0000 (eth1) using random MAC address - b2:62:8c:04:89:33 eth1: ethernet@30bf0000 [PRIME] Fastboot: Normal Normal Boot Hit any key to stop autoboot: 0 u-boot=>
Once you reach this point you can access the U-Boot terminal.
Note: to see all the different available commands you can use the command help.
To print the U-Boot variable use the command printenv:
u-boot=> printenv fdtfile fdtfile=imx8mp-smarcore-multimedia-4k.dtb
Now the next step would be to list all available device trees in the boot partition of the device you are booting from (in this case we are using an SDCard so mmc 1):
u-boot=> fatls mmc 1 30792192 Image 57554 imx8mp-smarcore-multimedia-4k-hdmi.dtb 58647 imx8mp-smarcore-multimedia-4k-lvds.dtb 59156 imx8mp-smarcore-multimedia-4k-ov5640.dtb 57712 imx8mp-smarcore-multimedia-4k-pcie.dtb 57242 imx8mp-smarcore-multimedia-4k.dtb 6 file(s), 0 dir(s)
Note: if you are booting directly from eMMC the device would be mmc 2.
All of these device trees work with the same board but each one of them enables a different peripheral. Now we will load the device tree relative to the LVDS and save the variable to keep the change permanent:
u-boot=> setenv fdtfile imx8mp-smarcore-multimedia-4k-lvds.dtb u-boot=> printenv fdtfile fdtfile=imx8mp-smarcore-multimedia-4k-lvds.dtb u-boot=> saveenv Saving Environment to MMC... Writing to MMC(1)... OK u-boot=> boot
Once the Rootfs is fully loaded you should see the LVDS is working! Lastly, to check if the device tree loaded is the correct one you can use:
root@imx8mp-smarcore:~# dmesg | grep model [ 0.000000] Machine model: Engicam SmarCore i.MX8MPlus Multimedia 4K board with LVDS (AMPIRE 10')