OpenEmbedded / Yocto Project Layers

The Linux microPlatform is composed of several OpenEmbedded and Yocto Project layers, including the core build system, distribution, images and BSPs.

Linux microPlatform Base Layers

Layer Description
OpenEmbedded-Core (Base) This is the main collaboration point when working on OpenEmbedded projects and is part of the core recipes. It is distro-less and contains only emulated machine support. It also provides the default toolchain used by the Linux microPlatform (lmp) distribution.
Meta-OpenEmbedded This layer houses a collection of layers and recipes for the OE-core universe. Since the reduction in recipes to the core, meta-openembedded was created for everything else. There are currently approximately 650 recipes in this layer. It is used by the Linux microPlatform for additional utilities and network support.
Meta-Virtualization This layer provides support for building Docker, LXC, Xen, KVM, Libvirt, and associated packages necessary for constructing OE-based virtualized / container solutions. It is used by the Linux microPlatform for Docker container runtime support.
Meta-Clang This layer provides clang/llvm as alternative to system C/C++ compiler for OpenEmbedded/Yocto Project based distributions.
Meta-Updater This layer provides support for OTA Software Updates using OSTree and TUF / Uptane.
Meta-Security This layer provides security tools, hardening tools for Linux kernels and libraries for implementing security mechanisms.
Meta-LMP (Base) This layer provides the Linux microPlatform distribution configuration, unified Kernel and images.

Linux microPlatform BSP Layers

Layer Description
Meta-LMP (BSP) This layer provides the Linux microPlatform BSP definitions and configurations for the officially supported targets.
Meta-ARM This layer provides support for general recipes for the ARM architecture and BSP support for ARM reference platforms.
Meta-Intel This is the board support layer for Intel based devices.
Meta-RaspberryPi This is the board support layer for the Raspberry Pi boards.
Meta-RISC-V This is the general hardware specific BSP overlay for RISC-V based devices.
Meta-Yocto This is the board support layer for the Yocto Project hardware references, such as BeagleBone Black.
Meta-Freescale This is the board support layer for the Freescale platforms.
Meta-Freescale-3rdparty This is an additional board support layer for Freescale platforms (not officially supported by Meta-Freescale maintainers).
Meta-Xilinx This layer provides support for Xilinx BSPs (e.g. ZynqMP).
Meta-Xilinx-Tools This layer provides support for using Xilinx tools on supported architectures (e.g. ZynqMP).

Linux microPlatform Meta-LMP Base Layer

The Meta-LMP-Base layer provides the Linux microPlatform distribution configuration and a base set of recipes and configs, such as a unified Linux kernel and a set of standard images.

The Linux microPlatform distribution configuration can be found at conf/distro/lmp.conf and conf/distro/include/lmp.inc.

The lmp-base-console-image recipe can be found at recipes-samples/images/lmp-base-console-image.bb. You can find the default set of packages used by the image via the CORE_IMAGE_BASE_INSTALL variable.

Linux microPlatform Meta-LMP BSP Layer

The Meta-LMP-BSP layer provides the Linux microPlatform BSP support for the supported targets, by providing kernel recipes, u-boot configuration fragments, WIC files, manufacturing tools scripts and so on.

This layer is meant to be used as an extension of the vendor BSP layers (e.g. meta-freescale), but it can also handle board configuration files for cases where the vendor layer can’t be easily compatible with LmP (e.g. layer based on an older Yocto Project release).

The main configuration file provided by this layer can be found at conf/machine/include/lmp-machine-custom.inc, which gets included by meta-lmp-base/classes/lmp.bbclass if available (users can decide to use meta-lmp-base only).

Here is an example of how a BSP configuration gets extended from the vendor BSP layer:

# Beaglebone
PREFERRED_PROVIDER_virtual/bootloader:beaglebone-yocto = "u-boot-fio"
PREFERRED_PROVIDER_u-boot:beaglebone-yocto = "u-boot-fio"
WKS_FILE_DEPENDS:append:beaglebone-yocto = " u-boot-default-script"
PREFERRED_PROVIDER_u-boot-default-script:beaglebone-yocto = "u-boot-ostree-scr-fit"
SOTA_CLIENT_FEATURES:append:beaglebone-yocto = " ubootenv"
OSTREE_KERNEL_ARGS:beaglebone-yocto ?= "console=ttyS0,115200n8 ${OSTREE_KERNEL_ARGS_COMMON}"
KERNEL_DEVICETREE:append:beaglebone-yocto = " am335x-boneblack-wireless.dtb"
IMAGE_BOOT_FILES:beaglebone-yocto = "u-boot.img MLO boot.itb"
KERNEL_IMAGETYPE:beaglebone-yocto = "fitImage"
KERNEL_CLASSES:beaglebone-yocto = " kernel-lmp-fitimage "

When adding or changing the LmP BSP configuration values, please use meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc instead, which gets parsed after lmp-machine-custom.inc and is factory specific.

lmp-machine-custom.inc should be used for LmP upstream BSP support only.

Customizing Linux microPlatform BSP layers list

The Linux microPlatform is composed by a set of base layers plus an extensive list of BSP layers that are all enabled by default (see Linux microPlatform BSP Layers).

As this might not necessarily be desired by everyone, LmP also allows any Factory user to easily customize the default BSP layers enabled and used by a Factory.

To define your own set of BSP layers (used by Bitbake), modify (or create if your Factory was created before LmP v76) the lmp-manifest/conf/bblayers-factory.inc bblayers include fragment, replacing the BSPLAYERS variable with your own list of BSP layers. Make sure meta-lmp-bsp is also included by default, unless you want to completely define your own BSP configuration.

An example for enabling only the meta-intel BSP layer:

$ cat conf/bblayers-factory.inc
# This is a FoundriesFactory bblayers include file

# Meta-subscriber-overrides is the main FoundriesFactory layer
# Do not remove unless you really know what you are doing.
BASELAYERS += "${OEROOT}/layers/meta-subscriber-overrides"

# Customize list of default BSP layers included by LMP by uncommenting
# the following lines and manually including your own list (= to replace).
# You can find the standard BSP list at the bblayers-bsp.inc file, which
# gets parsed before this file.
#
BSPLAYERS = " \
  ${OEROOT}/layers/meta-intel \
  ${OEROOT}/layers/meta-lmp/meta-lmp-bsp \
"