.. SPDX-License-Identifier: CC-BY-SA-2.0-UK

************************
Advanced Kernel Concepts
************************

Yocto Project Kernel Development and Maintenance
================================================

Kernels available through the Yocto Project (Yocto Linux kernels), like
other kernels, are based off the Linux kernel releases from
https://www.kernel.org. At the beginning of a major Linux kernel
development cycle, the Yocto Project team chooses a Linux kernel based
on factors such as release timing, the anticipated release timing of
final upstream ``kernel.org`` versions, and Yocto Project feature
requirements. Typically, the Linux kernel chosen is in the final stages
of development by the Linux community. In other words, the Linux kernel
is in the release candidate or "rc" phase and has yet to reach final
release. But, by being in the final stages of external development, the
team knows that the ``kernel.org`` final release will clearly be within
the early stages of the Yocto Project development window.

This balance allows the Yocto Project team to deliver the most
up-to-date Yocto Linux kernel possible, while still ensuring that the
team has a stable official release for the baseline Linux kernel
version.

As implied earlier, the ultimate source for Yocto Linux kernels are
released kernels from ``kernel.org``. In addition to a foundational
kernel from ``kernel.org``, the available Yocto Linux kernels contain a
mix of important new mainline developments, non-mainline developments
(when no alternative exists), Board Support Package (BSP) developments,
and custom features. These additions result in a commercially released
Yocto Project Linux kernel that caters to specific embedded designer
needs for targeted hardware.

You can find a web interface to the Yocto Linux kernels in the
:ref:`overview-manual/development-environment:yocto project source repositories`
at :yocto_git:`/`. If you look at the interface, you will see to
the left a grouping of Git repositories titled "Yocto Linux Kernel".
Within this group, you will find several Linux Yocto kernels developed
and included with Yocto Project releases:

-  *linux-yocto-4.1:* The stable Yocto Project kernel to use with
   the Yocto Project Release 2.0. This kernel is based on the Linux 4.1
   released kernel.

-  *linux-yocto-4.4:* The stable Yocto Project kernel to use with
   the Yocto Project Release 2.1. This kernel is based on the Linux 4.4
   released kernel.

-  *linux-yocto-4.6:* A temporary kernel that is not tied to any
   Yocto Project release.

-  *linux-yocto-4.8:* The stable yocto Project kernel to use with
   the Yocto Project Release 2.2.

-  *linux-yocto-4.9:* The stable Yocto Project kernel to use with
   the Yocto Project Release 2.3. This kernel is based on the Linux 4.9
   released kernel.

-  *linux-yocto-4.10:* The default stable Yocto Project kernel to
   use with the Yocto Project Release 2.3. This kernel is based on the
   Linux 4.10 released kernel.

-  *linux-yocto-4.12:* The default stable Yocto Project kernel to
   use with the Yocto Project Release 2.4. This kernel is based on the
   Linux 4.12 released kernel.

-  *yocto-kernel-cache:* The ``linux-yocto-cache`` contains patches
   and configurations for the linux-yocto kernel tree. This repository
   is useful when working on the linux-yocto kernel. For more
   information on this "Advanced Kernel Metadata", see the
   ":doc:`/kernel-dev/advanced`" Chapter.

-  *linux-yocto-dev:* A development kernel based on the latest
   upstream release candidate available.

.. note::

   Long Term Support Initiative (LTSI) for Yocto Linux kernels is as
   follows:

   -  For Yocto Project releases 1.7, 1.8, and 2.0, the LTSI kernel is
      ``linux-yocto-3.14``.

   -  For Yocto Project releases 2.1, 2.2, and 2.3, the LTSI kernel is
      ``linux-yocto-4.1``.

   -  For Yocto Project release 2.4, the LTSI kernel is
      ``linux-yocto-4.9``

   -  ``linux-yocto-4.4`` is an LTS kernel.

Once a Yocto Linux kernel is officially released, the Yocto Project team
goes into their next development cycle, or upward revision (uprev)
cycle, while still continuing maintenance on the released kernel. It is
important to note that the most sustainable and stable way to include
feature development upstream is through a kernel uprev process.
Back-porting hundreds of individual fixes and minor features from
various kernel versions is not sustainable and can easily compromise
quality.

During the uprev cycle, the Yocto Project team uses an ongoing analysis
of Linux kernel development, BSP support, and release timing to select
the best possible ``kernel.org`` Linux kernel version on which to base
subsequent Yocto Linux kernel development. The team continually monitors
Linux community kernel development to look for significant features of
interest. The team does consider back-porting large features if they
have a significant advantage. User or community demand can also trigger
a back-port or creation of new functionality in the Yocto Project
baseline kernel during the uprev cycle.

Generally speaking, every new Linux kernel both adds features and
introduces new bugs. These consequences are the basic properties of
upstream Linux kernel development and are managed by the Yocto Project
team's Yocto Linux kernel development strategy. It is the Yocto Project
team's policy to not back-port minor features to the released Yocto
Linux kernel. They only consider back-porting significant technological
jumps - and, that is done after a complete gap analysis. The reason
for this policy is that back-porting any small to medium sized change
from an evolving Linux kernel can easily create mismatches,
incompatibilities and very subtle errors.

The policies described in this section result in both a stable and a
cutting edge Yocto Linux kernel that mixes forward ports of existing
Linux kernel features and significant and critical new functionality.
Forward porting Linux kernel functionality into the Yocto Linux kernels
available through the Yocto Project can be thought of as a "micro
uprev". The many "micro uprevs" produce a Yocto Linux kernel version
with a mix of important new mainline, non-mainline, BSP developments and
feature integrations. This Yocto Linux kernel gives insight into new
features and allows focused amounts of testing to be done on the kernel,
which prevents surprises when selecting the next major uprev. The
quality of these cutting edge Yocto Linux kernels is evolving and the
kernels are used in leading edge feature and BSP development.

Yocto Linux Kernel Architecture and Branching Strategies
========================================================

As mentioned earlier, a key goal of the Yocto Project is to present the
developer with a kernel that has a clear and continuous history that is
visible to the user. The architecture and mechanisms, in particular the
branching strategies, used achieve that goal in a manner similar to
upstream Linux kernel development in ``kernel.org``.

You can think of a Yocto Linux kernel as consisting of a baseline Linux
kernel with added features logically structured on top of the baseline.
The features are tagged and organized by way of a branching strategy
implemented by the Yocto Project team using the Source Code Manager
(SCM) Git.

.. note::

   -  Git is the obvious SCM for meeting the Yocto Linux kernel
      organizational and structural goals described in this section. Not
      only is Git the SCM for Linux kernel development in ``kernel.org``
      but, Git continues to grow in popularity and supports many
      different work flows, front-ends and management techniques.

   -  You can find documentation on Git at https://git-scm.com/doc. You can
      also get an introduction to Git as it applies to the Yocto Project in the
      ":ref:`overview-manual/development-environment:git`" section in the Yocto Project
      Overview and Concepts Manual. The latter reference provides an
      overview of Git and presents a minimal set of Git commands that
      allows you to be functional using Git. You can use as much, or as
      little, of what Git has to offer to accomplish what you need for
      your project. You do not have to be a "Git Expert" in order to use
      it with the Yocto Project.

Using Git's tagging and branching features, the Yocto Project team
creates kernel branches at points where functionality is no longer
shared and thus, needs to be isolated. For example, board-specific
incompatibilities would require different functionality and would
require a branch to separate the features. Likewise, for specific kernel
features, the same branching strategy is used.

This "tree-like" architecture results in a structure that has features
organized to be specific for particular functionality, single kernel
types, or a subset of kernel types. Thus, the user has the ability to
see the added features and the commits that make up those features. In
addition to being able to see added features, the user can also view the
history of what made up the baseline Linux kernel.

Another consequence of this strategy results in not having to store the
same feature twice internally in the tree. Rather, the kernel team
stores the unique differences required to apply the feature onto the
kernel type in question.

.. note::

   The Yocto Project team strives to place features in the tree such
   that features can be shared by all boards and kernel types where
   possible. However, during development cycles or when large features
   are merged, the team cannot always follow this practice. In those
   cases, the team uses isolated branches to merge features.

BSP-specific code additions are handled in a similar manner to
kernel-specific additions. Some BSPs only make sense given certain
kernel types. So, for these types, the team creates branches off the end
of that kernel type for all of the BSPs that are supported on that
kernel type. From the perspective of the tools that create the BSP
branch, the BSP is really no different than a feature. Consequently, the
same branching strategy applies to BSPs as it does to kernel features.
So again, rather than store the BSP twice, the team only stores the
unique differences for the BSP across the supported multiple kernels.

While this strategy can result in a tree with a significant number of
branches, it is important to realize that from the developer's point of
view, there is a linear path that travels from the baseline
``kernel.org``, through a select group of features and ends with their
BSP-specific commits. In other words, the divisions of the kernel are
transparent and are not relevant to the developer on a day-to-day basis.
From the developer's perspective, this path is the development branch.
The developer does not need to be aware of the existence of
any other branches at all. Of course, it can make sense to have these
branches in the tree, should a person decide to explore them. For
example, a comparison between two BSPs at either the commit level or at
the line-by-line code ``diff`` level is now a trivial operation.

The following illustration shows the conceptual Yocto Linux kernel.

.. image:: figures/kernel-architecture-overview.png
   :width: 100%

In the illustration, the "Kernel.org Branch Point" marks the specific
spot (or Linux kernel release) from which the Yocto Linux kernel is
created. From this point forward in the tree, features and differences
are organized and tagged.

The "Yocto Project Baseline Kernel" contains functionality that is
common to every kernel type and BSP that is organized further along in
the tree. Placing these common features in the tree this way means
features do not have to be duplicated along individual branches of the
tree structure.

From the "Yocto Project Baseline Kernel", branch points represent
specific functionality for individual Board Support Packages (BSPs) as
well as real-time kernels. The illustration represents this through
three BSP-specific branches and a real-time kernel branch. Each branch
represents some unique functionality for the BSP or for a real-time
Yocto Linux kernel.

In this example structure, the "Real-time (rt) Kernel" branch has common
features for all real-time Yocto Linux kernels and contains more
branches for individual BSP-specific real-time kernels. The illustration
shows three branches as an example. Each branch points the way to
specific, unique features for a respective real-time kernel as they
apply to a given BSP.

The resulting tree structure presents a clear path of markers (or
branches) to the developer that, for all practical purposes, is the
Yocto Linux kernel needed for any given set of requirements.

.. note::

   Keep in mind the figure does not take into account all the supported
   Yocto Linux kernels, but rather shows a single generic kernel just
   for conceptual purposes. Also keep in mind that this structure
   represents the
   :ref:`overview-manual/development-environment:yocto project source repositories`
   that are either pulled from during the build or established on the
   host development system prior to the build by either cloning a
   particular kernel's Git repository or by downloading and unpacking a
   tarball.

Working with the kernel as a structured tree follows recognized
community best practices. In particular, the kernel as shipped with the
product, should be considered an "upstream source" and viewed as a
series of historical and documented modifications (commits). These
modifications represent the development and stabilization done by the
Yocto Project kernel development team.

Because commits only change at significant release points in the product
life cycle, developers can work on a branch created from the last
relevant commit in the shipped Yocto Project Linux kernel. As mentioned
previously, the structure is transparent to the developer because the
kernel tree is left in this state after cloning and building the kernel.

Kernel Build File Hierarchy
===========================

Upstream storage of all the available kernel source code is one thing,
while representing and using the code on your host development system is
another. Conceptually, you can think of the kernel source repositories
as all the source files necessary for all the supported Yocto Linux
kernels. As a developer, you are just interested in the source files for
the kernel on which you are working. And, furthermore, you need them
available on your host system.

Kernel source code is available on your host system several different
ways:

-  *Files Accessed While using devtool:* ``devtool``, which is
   available with the Yocto Project, is the preferred method by which to
   modify the kernel. See the ":ref:`kernel-dev/intro:kernel modification workflow`" section.

-  *Cloned Repository:* If you are working in the kernel all the time,
   you probably would want to set up your own local Git repository of
   the Yocto Linux kernel tree. For information on how to clone a Yocto
   Linux kernel Git repository, see the
   ":ref:`kernel-dev/common:preparing the build host to work on the kernel`"
   section.

-  *Temporary Source Files from a Build:* If you just need to make some
   patches to the kernel using a traditional BitBake workflow (i.e. not
   using the ``devtool``), you can access temporary kernel source files
   that were extracted and used during a kernel build.

The temporary kernel source files resulting from a build using BitBake
have a particular hierarchy. When you build the kernel on your
development system, all files needed for the build are taken from the
source repositories pointed to by the
:term:`SRC_URI` variable and gathered
in a temporary work area where they are subsequently used to create the
unique kernel. Thus, in a sense, the process constructs a local source
tree specific to your kernel from which to generate the new kernel
image.

The following figure shows the temporary file structure created on your
host system when you build the kernel using BitBake. This
:term:`Build Directory` contains all the
source files used during the build.

.. image:: figures/kernel-overview-2-generic.png
   :align: center
   :width: 70%

Again, for additional information on the Yocto Project kernel's
architecture and its branching strategy, see the
":ref:`kernel-dev/concepts-appx:yocto linux kernel architecture and branching strategies`"
section. You can also reference the
":ref:`kernel-dev/common:using \`\`devtool\`\` to patch the kernel`"
and
":ref:`kernel-dev/common:using traditional kernel development to patch the kernel`"
sections for detailed example that modifies the kernel.

Determining Hardware and Non-Hardware Features for the Kernel Configuration Audit Phase
=======================================================================================

This section describes part of the kernel configuration audit phase that
most developers can ignore. For general information on kernel
configuration including ``menuconfig``, ``defconfig`` files, and
configuration fragments, see the
":ref:`kernel-dev/common:configuring the kernel`" section.

During this part of the audit phase, the contents of the final
``.config`` file are compared against the fragments specified by the
system. These fragments can be system fragments, distro fragments, or
user-specified configuration elements. Regardless of their origin, the
OpenEmbedded build system warns the user if a specific option is not
included in the final kernel configuration.

By default, in order to not overwhelm the user with configuration
warnings, the system only reports missing "hardware" options as they
could result in a boot failure or indicate that important hardware is
not available.

To determine whether or not a given option is "hardware" or
"non-hardware", the kernel Metadata in ``yocto-kernel-cache`` contains
files that classify individual or groups of options as either hardware
or non-hardware. To better show this, consider a situation where the
``yocto-kernel-cache`` contains the following files::

   yocto-kernel-cache/features/drm-psb/hardware.cfg
   yocto-kernel-cache/features/kgdb/hardware.cfg
   yocto-kernel-cache/ktypes/base/hardware.cfg
   yocto-kernel-cache/bsp/mti-malta32/hardware.cfg
   yocto-kernel-cache/bsp/qemu-ppc32/hardware.cfg
   yocto-kernel-cache/bsp/qemuarma9/hardware.cfg
   yocto-kernel-cache/bsp/mti-malta64/hardware.cfg
   yocto-kernel-cache/bsp/arm-versatile-926ejs/hardware.cfg
   yocto-kernel-cache/bsp/common-pc/hardware.cfg
   yocto-kernel-cache/bsp/common-pc-64/hardware.cfg
   yocto-kernel-cache/features/rfkill/non-hardware.cfg
   yocto-kernel-cache/ktypes/base/non-hardware.cfg
   yocto-kernel-cache/features/aufs/non-hardware.kcf
   yocto-kernel-cache/features/ocf/non-hardware.kcf
   yocto-kernel-cache/ktypes/base/non-hardware.kcf
   yocto-kernel-cache/ktypes/base/hardware.kcf
   yocto-kernel-cache/bsp/qemu-ppc32/hardware.kcf

Here are explanations for the various files:

-  ``hardware.kcf``: Specifies a list of kernel Kconfig files that
   contain hardware options only.

-  ``non-hardware.kcf``: Specifies a list of kernel Kconfig files that
   contain non-hardware options only.

-  ``hardware.cfg``: Specifies a list of kernel ``CONFIG_`` options that
   are hardware, regardless of whether or not they are within a Kconfig
   file specified by a hardware or non-hardware Kconfig file (i.e.
   ``hardware.kcf`` or ``non-hardware.kcf``).

-  ``non-hardware.cfg``: Specifies a list of kernel ``CONFIG_`` options
   that are not hardware, regardless of whether or not they are within a
   Kconfig file specified by a hardware or non-hardware Kconfig file
   (i.e. ``hardware.kcf`` or ``non-hardware.kcf``).

Here is a specific example using the
``kernel-cache/bsp/mti-malta32/hardware.cfg``::

   CONFIG_SERIAL_8250
   CONFIG_SERIAL_8250_CONSOLE
   CONFIG_SERIAL_8250_NR_UARTS
   CONFIG_SERIAL_8250_PCI
   CONFIG_SERIAL_CORE
   CONFIG_SERIAL_CORE_CONSOLE
   CONFIG_VGA_ARB

The kernel configuration audit automatically detects
these files (hence the names must be exactly the ones discussed here),
and uses them as inputs when generating warnings about the final
``.config`` file.

A user-specified kernel Metadata repository, or recipe space feature,
can use these same files to classify options that are found within its
``.cfg`` files as hardware or non-hardware, to prevent the OpenEmbedded
build system from producing an error or warning when an option is not in
the final ``.config`` file.
