Linux Kernel

A common and unified Linux® Kernel source tree is provided and used by the Linux microPlatform. The latest continuous release is available at github.com/foundriesio/linux.

The Linux Kernel recipe can be found in the Meta-LMP layer, under the meta-lmp-base/recipes-kernel/linux directory.

Linux microPlatform Kernel Configuration Fragments

Together with the unified Linux Kernel tree, the Linux microPlatform also provides an additional repository for the kernel configuration fragments. The latest continuous release for the kernel configuration fragments is available at github.com/foundriesio/lmp-kernel-cache.

You can find the list of supported BSP definitions and configuration fragments used under the lmp-kernel-cache/bsp directory.

The fragments repository works similarly to the upstream yocto-kernel-cache repository, so the same development workflow and documentation applies. See the Yocto Project Linux Kernel Development Manual for more information on how to work and manage the kernel metadata and configuration fragments.

The Porting Guide includes the section How To Configure the Linux Kernel on on how to add a custom Linux Kernel configuration which can be used to add:

  • the complete machine configuration.
  • fragments: a set of CONFIG_ variables working to change a default machine configuration.

Linux microPlatform with Real-Time Linux Kernel

The recipe meta-lmp/meta-lmp-base/recipes-kernel/linux/linux-lmp-rt_git.bb or meta-lmp/meta-lmp-base/recipes-kernel/linux/linux-lmp-fslc-imx-rt_git.bb can be used for real-time Linux. This is based on the linux-lmp recipe, but extended to include the PREEMPT_RT patch-set (updated along with stable kernel updates).

The instructions to change the default Linux kernel to real-time are described in the following sections. After the changes, build the Linux microPlatform image as usual.

Building Linux microPlatform with linux-lmp-rt

Set PREFERRED_PROVIDER_virtual/kernel to linux-lmp-rt in meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc:

$ cat meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc
PREFERRED_PROVIDER_virtual/kernel:intel-corei7-64 = "linux-lmp-rt"

Building Linux microPlatform with linux-lmp-fslc-imx-rt

Set PREFERRED_PROVIDER_virtual/kernel to linux-lmp-fslc-imx-rt in meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc:

$ cat meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc
PREFERRED_PROVIDER_virtual/kernel:mx6ull-nxp-bsp = "linux-lmp-fslc-imx-rt"

Linux microPlatform with the Real-Time Xenomai4 Core

The recipe meta-lmp/meta-lmp-base/recipes-kernel/linux/linux-lmp-fslc-imx-xeno4_git.bb can be used to enable the Xenomai4 co-kernel on iMX boards.

Like its predecessors in the Xenomai core series, Xenomai4 with the EVL core brings real-time capabilities to Linux by embedding a companion core into the kernel, which specifically deals with tasks requiring ultra low and bounded response time to events.

In this model, the general purpose kernel and the real-time core operate almost asynchronously, both serving their own set of tasks, always giving the latter precedence over the former.

Building Linux microPlatform with linux-lmp-fslc-imx-xeno4

Set PREFERRED_PROVIDER_virtual/kernel to linux-lmp-fslc-imx-xeno4 and MACHINE_FEATURES:append to xeno4 in meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc:

$ cat meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc
PREFERRED_PROVIDER_virtual/kernel:mx8mm-nxp-bsp = "linux-lmp-fslc-imx-xeno4"
MACHINE_FEATURES:append = " xeno4"

Linux microPlatform with Linux upstream

The recipe meta-lmp/meta-lmp-base/recipes-kernel/linux/linux-lmp-dev.bb can be used to build the Linux microPlatform with the upstream kernel tree instead of the LmP unified tree. linux-lmp-dev also uses the Linux microPlatform Kernel Configuration Fragments repository for a compatible configuration.

Building Linux microPlatform with linux-lmp-dev

Set the PREFERRED_PROVIDER_virtual/kernel to linux-lmp-dev in meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc:

$ cat meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-lmp-dev"

Now just build any of the supported Linux microPlatform images.

Specifying Linux Git Tree, Branch and Commit Revision

The following variables can be also set in meta-subscriber-overrides/conf/machine/include/lmp-factory-custom.inc in order to build linux-lmp-dev using a specific Linux tree, branch or commit revision:

KERNEL_REPO = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git" # Kernel git repository
KERNEL_BRANCH = "master" # Git kernel branch (default: master)
KERNEL_COMMIT = "94710cac0e" # Kernel commit revision (default: HEAD)
KERNEL_META_REPO = "git://github.com/foundriesio/lmp-kernel-cache.git" # Kernel configuration fragments repository
KERNEL_META_BRANCH = "master" # Git kernel meta branch (default: master)
KERNEL_META_COMMIT = "1c67180cfe" # Kernel meta commit revision (default: HEAD)
LINUX_VERSION = "4.19-rc" # Linux kernel base version (base package version)