Single Yocto image for multiple machines

Hi, may I know is it possible to build a single Yocto image that boot for multiple machines (e.g. apalis-imx8 with Carrier Board A, apalis-imx8x with Carrier Board B)?

If yes, what are the additional steps required compared to building image for single machine type?


Hi @kh_ong , sorry for the late response. The CPU type, RAM size, and other features e.g. GPU, VPU are always different among machines(Apalis iMX8 and Apalis iMX8X). It is impossible to build a single binary image for multiple machines.

Thanks @benjamin.tx for the input. Some follow up questions:

Are those features you mentioned (CPU type, RAM size, and other features e.g. GPU, VPU) configured in the boot ROM, bootloader or Device Tree?
If they are configured in the Device Tree, can we augment the bootloader so that it load the right Device Tree after it detected the machine type? E.g. if u-boot detect the SOM/board is Machine A, then it load Machine A Device Tree. If u-boot detect the SOM/board is Machine B, then it load Machine B Device Tree.

I’m wondering how those generic distribution (like Ubuntu) can be installed in different machines, and if we can follow the same way as well.

Hi @kh_ong , apalis imx8 and apalis imx8x share the same kernel configuration toradex_defconfig but the device trees are different. U-Boot is possible to differentiate SoC and load the right device tree. But it is not implemented in our default U-boot. Additionally, U-Boot should be capable to decide the carrier board. For example, an EEPROM on carrier board. The file system will include all files needed by all SoCs, peripherals, etc. The most important is that apalis imx8 and apalis imx8x need boot container and it can never be shared.

1 Like