Colibri imx8x kernel compilation

Hi, we recently buyed a colibri im8x som and try to make an “Easy installer” image for it (we have one for imx6ull with success). We are not capable to compile the kernel following the steps:

on Release Matrix - Kernel/U-Boot Version | Toradex Developer Center we have this data:

Colibri iMX8X
BSP: 7.5.0
Kernel: Downstream Toradex v6.6.119 based on NXP BSP L6.6.52_2.2.2
Yocto: 5.0 (Scarthgap)
U-Boot: Downstream Toradex i.MX 2024.04 based on NXP lf_v2024.04
SCFW firmware: Toradex 1.17 based on NXP 1.17
SCU firmware: NXP i.MX SECO 5.9.4
TF-A firmware: NXP lf-6.6.52-2.2.1
Release: 01/2026

so following Build Linux Kernel from Source Code | Toradex Developer Center
we have the Downstream kernel:
git clone -b toradex_6.6-2.2.x-imx git://git.toradex.com/linux-toradex.git

get the artifacts from JFrog

wget -c https://artifacts.toradex.com/artifactory/tdxref-oe-prod-frankfurt/scarthgap-7.x.y/release/11/colibri-imx8x/tdx-xwayland/tdx-reference-minimal-image/oedeploy/kernel-config -O kernel-config-colibri-imx8x-minimal-14

and to compile:

cp kernel-config-colibri-imx8x-minimal .config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output olddefconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output menuconfig (nothing new… only save)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output -j24 zImage

and kernel compilation exits with this warnings of undefined dependencies:

L_MOD_PATH=output -j24 zImage
SYNC include/config/auto.conf

WARNING: unmet direct dependencies detected for HAVE_ARM_SMCCC_DISCOVERY
Depends on [n]: ARM_PSCI_FW [=n]
Selected by [y]:

  • ARM_GIC_V3 [=y]

WARNING: unmet direct dependencies detected for HAVE_ARM_SMCCC_DISCOVERY
Depends on [n]: ARM_PSCI_FW [=n]
Selected by [y]:

  • ARM_GIC_V3 [=y]

and exits with errors:

drivers/soc/imx/busfreq-imx8mq.c:304:6: error: redefinition of ‘request_bus_freq’
304 | void request_bus_freq(enum bus_freq_mode mode)
| ^~~~~~~~~~~~~~~~
In file included from drivers/soc/imx/busfreq-imx8mq.c:16:
./include/linux/busfreq-imx.h:58:20: note: previous definition of ‘request_bus_freq’ with type ‘void(enum bus_freq_mode)’
58 | static inline void request_bus_freq(enum bus_freq_mode mode)
| ^~~~~~~~~~~~~~~~
drivers/soc/imx/busfreq-imx8mq.c:340:6: error: redefinition of ‘release_bus_freq’
340 | void release_bus_freq(enum bus_freq_mode mode)
| ^~~~~~~~~~~~~~~~
./include/linux/busfreq-imx.h:61:20: note: previous definition of ‘release_bus_freq’ with type ‘void(enum bus_freq_mode)’
61 | static inline void release_bus_freq(enum bus_freq_mode mode)
| ^~~~~~~~~~~~~~~~
drivers/soc/imx/busfreq-imx8mq.c:393:5: error: redefinition of ‘get_bus_freq_mode’
393 | int get_bus_freq_mode(void)
| ^~~~~~~~~~~~~~~~~
./include/linux/busfreq-imx.h:72:19: note: previous definition of ‘get_bus_freq_mode’ with type ‘int(void)’
72 | static inline int get_bus_freq_mode(void)
| ^~~~~~~~~~~~~~~~~
make[5]: *** [scripts/Makefile.build:243: drivers/soc/imx/busfreq-imx8mq.o] Error 1

when we make the menuconfig options, on “system type” → “Freescale i.MX Family” there is no imx8x…. can this be the problem? we have download the wrong version of kernel branch?

thank you in advance!

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


I can help you troubleshoot the kernel compilation issues for your Colibri iMX8X. The errors you’re encountering indicate a configuration mismatch - you’re using ARM 32-bit compilation settings for an ARM64 module.

Key Issue: Architecture Mismatch

The Colibri iMX8X is an ARM64 module, but you’re using ARM 32-bit compilation parameters(1). The correct architecture settings should be:

export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-

(1)

Correct Compilation Steps

Based on the Toradex documentation, here are the proper steps for cross-compilation(1):

1. Set Up the Toolchain

$ cd ~
$ wget -O arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz?rev=cf8baa0ef2e54e9286f0409cdda4f66c&hash=4E1BA6BFC2C09EA04DBD36C393C9DD3A"
$ tar xvf arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz && rm arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
$ ln -s arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu gcc-linaro-aarch64

(1)

2. Create Environment Setup File

Create an export-compiler-64 file with:

export ARCH=arm64
export PATH=${HOME}/gcc-linaro-aarch64/bin/:${PATH}
export DTC_FLAGS='-@'
export CROSS_COMPILE=aarch64-none-linux-gnu-

(1)

3. Source the Environment and Compile

$ source ~/export-compiler-64
$ cp kernel-config-colibri-imx8x-minimal .config
$ make olddefconfig
$ make -j$(nproc) Image

(1)

Why You’re Seeing Those Errors

  • Missing iMX8X in menuconfig: This happens because you’re compiling for ARM 32-bit instead of ARM64
  • Busfreq redefinition errors: These occur due to the architecture mismatch causing incorrect driver compilation
  • Dependency warnings: ARM_PSCI_FW dependencies are ARM64-specific and won’t resolve correctly with ARM 32-bit compilation

Alternative Approach: Use Yocto

For creating Easy Installer images, consider using the Yocto build system instead, which handles all cross-compilation complexities automatically(2). The comprehensive guide for building reference images is available in the Toradex documentation(2).

Try the corrected ARM64 compilation steps above, and the kernel should compile successfully for your Colibri iMX8X module.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

how abot compiling dtb? imx8x-colibri-eval-v3.dtb

Compiling Device Tree Blob (DTB) for Colibri iMX8X

To compile the imx8x-colibri-eval-v3.dtb file, you’ll use the same ARM64 environment setup from the kernel compilation, but target the device tree specifically.

Steps for DTB Compilation

Using the same environment setup as before:

$ source ~/export-compiler-64

(1)

Then compile the device tree:

$ make imx8qxp-colibri-eval-v3.dtb

(2)

Device Tree Structure for Colibri iMX8X

The device tree follows Toradex’s modular approach with three levels (2):

  • SoC level: imx8qxp.dtsi - contains SoC-level definitions
  • SoM level: imx8qxp-colibri.dtsi - contains specific SoM-level definitions
  • Board level: imx8qxp-colibri-eval-v3.dts - board-level definitions for the carrier board

The naming convention follows ${soc}-${module}-${board}.dtb format (2).

Alternative: Compile All DTBs

If you want to compile all device tree files:

$ make dtbs

(1)

This will generate all .dtb files including imx8qxp-colibri-eval-v3.dtb in the arch/arm64/boot/dts/freescale/ directory.

Verification

After compilation, you should find your DTB file at:

arch/arm64/boot/dts/freescale/imx8qxp-colibri-eval-v3.dtb

Make sure you’re using the ARM64 toolchain (aarch64-none-linux-gnu-) as the Colibri iMX8X is an ARM64 module, not ARM 32-bit.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.