diff --git a/poky/documentation/kernel-dev/history.rst b/poky/documentation/kernel-dev/history.rst
index 3ffb7ea..761b506 100644
--- a/poky/documentation/kernel-dev/history.rst
+++ b/poky/documentation/kernel-dev/history.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 ***********************
 Manual Revision History
diff --git a/poky/documentation/kernel-dev/kernel-dev-advanced.rst b/poky/documentation/kernel-dev/kernel-dev-advanced.rst
index 36133ca..eeb8f87 100644
--- a/poky/documentation/kernel-dev/kernel-dev-advanced.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-advanced.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 *******************************************************
 Working with Advanced Metadata (``yocto-kernel-cache``)
diff --git a/poky/documentation/kernel-dev/kernel-dev-advanced.xml b/poky/documentation/kernel-dev/kernel-dev-advanced.xml
deleted file mode 100644
index 3717796..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-advanced.xml
+++ /dev/null
@@ -1,1257 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<chapter id='kernel-dev-advanced'>
-<title>Working with Advanced Metadata (<filename>yocto-kernel-cache</filename>)</title>
-
-<section id='kernel-dev-advanced-overview'>
-    <title>Overview</title>
-
-    <para>
-        In addition to supporting configuration fragments and patches, the
-        Yocto Project kernel tools also support rich
-        <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink> that you can
-        use to define complex policies and Board Support Package (BSP) support.
-        The purpose of the Metadata and the tools that manage it is
-        to help you manage the complexity of the configuration and sources
-        used to support multiple BSPs and Linux kernel types.
-    </para>
-
-    <para>
-        Kernel Metadata exists in many places.
-        One area in the Yocto Project
-        <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
-        is the <filename>yocto-kernel-cache</filename> Git repository.
-        You can find this repository grouped under the "Yocto Linux Kernel"
-        heading in the
-        <ulink url='&YOCTO_GIT_URL;'>Yocto Project Source Repositories</ulink>.
-    </para>
-
-    <para>
-        Kernel development tools ("kern-tools") exist also in the Yocto
-        Project Source Repositories under the "Yocto Linux Kernel" heading
-        in the <filename>yocto-kernel-tools</filename> Git repository.
-        The recipe that builds these tools is
-        <filename>meta/recipes-kernel/kern-tools/kern-tools-native_git.bb</filename>
-        in the
-        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
-        (e.g. <filename>poky</filename>).
-    </para>
-</section>
-
-<section id='using-kernel-metadata-in-a-recipe'>
-    <title>Using Kernel Metadata in a Recipe</title>
-
-    <para>
-        As mentioned in the introduction, the Yocto Project contains kernel
-        Metadata, which is located in the
-        <filename>yocto-kernel-cache</filename> Git repository.
-        This Metadata defines Board Support Packages (BSPs) that
-        correspond to definitions in linux-yocto recipes for corresponding BSPs.
-        A BSP consists of an aggregation of kernel policy and enabled
-        hardware-specific features.
-        The BSP can be influenced from within the linux-yocto recipe.
-        <note>
-            A Linux kernel recipe that contains kernel Metadata (e.g.
-            inherits from the <filename>linux-yocto.inc</filename> file)
-            is said to be a "linux-yocto style" recipe.
-        </note>
-    </para>
-
-    <para>
-        Every linux-yocto style recipe must define the
-        <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>
-        variable.
-        This variable is typically set to the same value as the
-        <filename>MACHINE</filename> variable, which is used by
-        <ulink url='&YOCTO_DOCS_REF_URL;#bitbake-term'>BitBake</ulink>.
-        However, in some cases, the variable might instead refer to the
-        underlying platform of the <filename>MACHINE</filename>.
-    </para>
-
-    <para>
-        Multiple BSPs can reuse the same <filename>KMACHINE</filename>
-        name if they are built using the same BSP description.
-        Multiple Corei7-based BSPs could share the same "intel-corei7-64"
-        value for <filename>KMACHINE</filename>.
-        It is important to realize that <filename>KMACHINE</filename> is
-        just for kernel mapping, while <filename>MACHINE</filename>
-        is the machine type within a BSP Layer.
-        Even with this distinction, however, these two variables can hold
-        the same value.
-        See the <link linkend='bsp-descriptions'>BSP Descriptions</link>
-        section for more information.
-    </para>
-
-    <para>
-        Every linux-yocto style recipe must also indicate the Linux kernel
-        source repository branch used to build the Linux kernel.
-        The <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink>
-        variable must be set to indicate the branch.
-        <note>
-            You can use the <filename>KBRANCH</filename> value to define an
-            alternate branch typically with a machine override as shown here
-            from the <filename>meta-yocto-bsp</filename> layer:
-            <literallayout class='monospaced'>
-     KBRANCH_edgerouter = "standard/edgerouter"
-            </literallayout>
-        </note>
-    </para>
-
-    <para>
-        The linux-yocto style recipes can optionally define the following
-        variables:
-        <literallayout class='monospaced'>
-     KERNEL_FEATURES
-     LINUX_KERNEL_TYPE
-        </literallayout>
-    </para>
-
-    <para>
-        <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></ulink>
-        defines the kernel type to be
-        used in assembling the configuration.
-        If you do not specify a <filename>LINUX_KERNEL_TYPE</filename>,
-        it defaults to "standard".
-        Together with <filename>KMACHINE</filename>,
-        <filename>LINUX_KERNEL_TYPE</filename> defines the search
-        arguments used by the kernel tools to find the
-        appropriate description within the kernel Metadata with which to
-        build out the sources and configuration.
-        The linux-yocto recipes define "standard", "tiny", and "preempt-rt"
-        kernel types.
-        See the "<link linkend='kernel-types'>Kernel Types</link>" section
-        for more information on kernel types.
-    </para>
-
-    <para>
-        During the build, the kern-tools search for the BSP description
-        file that most closely matches the <filename>KMACHINE</filename>
-        and <filename>LINUX_KERNEL_TYPE</filename> variables passed in from the
-        recipe.
-        The tools use the first BSP description it finds that match
-        both variables.
-        If the tools cannot find a match, they issue a warning.
-    </para>
-
-    <para>
-        The tools first search for the <filename>KMACHINE</filename> and
-        then for the <filename>LINUX_KERNEL_TYPE</filename>.
-        If the tools cannot find a partial match, they will use the
-        sources from the <filename>KBRANCH</filename> and any configuration
-        specified in the
-        <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
-    </para>
-
-    <para>
-        You can use the
-        <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
-        variable
-        to include features (configuration fragments, patches, or both) that
-        are not already included by the <filename>KMACHINE</filename> and
-        <filename>LINUX_KERNEL_TYPE</filename> variable combination.
-        For example, to include a feature specified as
-        "features/netfilter/netfilter.scc",
-        specify:
-        <literallayout class='monospaced'>
-     KERNEL_FEATURES += "features/netfilter/netfilter.scc"
-        </literallayout>
-        To include a feature called "cfg/sound.scc" just for the
-        <filename>qemux86</filename> machine, specify:
-        <literallayout class='monospaced'>
-     KERNEL_FEATURES_append_qemux86 = " cfg/sound.scc"
-        </literallayout>
-        The value of the entries in <filename>KERNEL_FEATURES</filename>
-        are dependent on their location within the kernel Metadata itself.
-        The examples here are taken from the
-        <filename>yocto-kernel-cache</filename> repository.
-        Each branch of this repository contains "features" and "cfg"
-        subdirectories at the top-level.
-        For more information, see the
-        "<link linkend='kernel-metadata-syntax'>Kernel Metadata Syntax</link>"
-        section.
-    </para>
-</section>
-
-<section id='kernel-metadata-syntax'>
-    <title>Kernel Metadata Syntax</title>
-
-    <para>
-        The kernel Metadata consists of three primary types of files:
-        <filename>scc</filename>
-        <footnote>
-            <para>
-                <filename>scc</filename> stands for Series Configuration
-                Control, but the naming has less significance in the
-                current implementation of the tooling than it had in the
-                past.
-                Consider <filename>scc</filename> files to be description files.
-            </para>
-        </footnote>
-        description files, configuration fragments, and patches.
-        The <filename>scc</filename> files define variables and include or
-        otherwise reference any of the three file types.
-        The description files are used to aggregate all types of kernel
-        Metadata into
-        what ultimately describes the sources and the configuration required
-        to build a Linux kernel tailored to a specific machine.
-    </para>
-
-    <para>
-        The <filename>scc</filename> description files are used to define two
-        fundamental types of kernel Metadata:
-        <itemizedlist>
-            <listitem><para>Features</para></listitem>
-            <listitem><para>Board Support Packages (BSPs)</para></listitem>
-        </itemizedlist>
-    </para>
-
-    <para>
-        Features aggregate sources in the form of patches and configuration
-        fragments into a modular reusable unit.
-        You can use features to implement conceptually separate kernel
-        Metadata descriptions such as pure configuration fragments,
-        simple patches, complex features, and kernel types.
-        <link linkend='kernel-types'>Kernel types</link> define general
-        kernel features and policy to be reused in the BSPs.
-    </para>
-
-    <para>
-        BSPs define hardware-specific features and aggregate them with kernel
-        types to form the final description of what will be assembled and built.
-    </para>
-
-    <para>
-        While the kernel Metadata syntax does not enforce any logical
-        separation of configuration fragments, patches, features or kernel
-        types, best practices dictate a logical separation of these types
-        of Metadata.
-        The following Metadata file hierarchy is recommended:
-        <literallayout class='monospaced'>
-     <replaceable>base</replaceable>/
-        bsp/
-        cfg/
-        features/
-        ktypes/
-        patches/
-        </literallayout>
-    </para>
-
-    <para>
-        The <filename>bsp</filename> directory contains the
-        <link linkend='bsp-descriptions'>BSP descriptions</link>.
-        The remaining directories all contain "features".
-        Separating <filename>bsp</filename> from the rest of the structure
-        aids conceptualizing intended usage.
-    </para>
-
-    <para>
-        Use these guidelines to help place your <filename>scc</filename>
-        description files within the structure:
-        <itemizedlist>
-            <listitem><para>If your file contains
-                only configuration fragments, place the file in the
-                <filename>cfg</filename> directory.</para></listitem>
-            <listitem><para>If your file contains
-                only source-code fixes, place the file in the
-                <filename>patches</filename> directory.</para></listitem>
-            <listitem><para>If your file encapsulates
-                a major feature, often combining sources and configurations,
-                place the file in <filename>features</filename> directory.
-                </para></listitem>
-            <listitem><para>If your file aggregates
-                non-hardware configuration and patches in order to define a
-                base kernel policy or major kernel type to be reused across
-                multiple BSPs, place the file in <filename>ktypes</filename>
-                directory.
-                </para></listitem>
-        </itemizedlist>
-    </para>
-
-    <para>
-        These distinctions can easily become blurred - especially as
-        out-of-tree features slowly merge upstream over time.
-        Also, remember that how the description files are placed is
-        a purely logical organization and has no impact on the functionality
-        of the kernel Metadata.
-        There is no impact because all of <filename>cfg</filename>,
-        <filename>features</filename>, <filename>patches</filename>, and
-        <filename>ktypes</filename>, contain "features" as far as the kernel
-        tools are concerned.
-    </para>
-
-    <para>
-        Paths used in kernel Metadata files are relative to
-        <replaceable>base</replaceable>, which is either
-        <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-        if you are creating Metadata in
-        <link linkend='recipe-space-metadata'>recipe-space</link>,
-        or the top level of
-        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache/tree/'><filename>yocto-kernel-cache</filename></ulink>
-        if you are creating
-        <link linkend='metadata-outside-the-recipe-space'>Metadata outside of the recipe-space</link>.
-    </para>
-
-    <section id='configuration'>
-        <title>Configuration</title>
-
-        <para>
-            The simplest unit of kernel Metadata is the configuration-only
-            feature.
-            This feature consists of one or more Linux kernel configuration
-            parameters in a configuration fragment file
-            (<filename>.cfg</filename>) and a <filename>.scc</filename> file
-            that describes the fragment.
-        </para>
-
-        <para>
-            As an example, consider the Symmetric Multi-Processing (SMP)
-            fragment used with the <filename>linux-yocto-4.12</filename>
-            kernel as defined outside of the recipe space (i.e.
-            <filename>yocto-kernel-cache</filename>).
-            This Metadata consists of two files: <filename>smp.scc</filename>
-            and <filename>smp.cfg</filename>.
-            You can find these files in the <filename>cfg</filename> directory
-            of the <filename>yocto-4.12</filename> branch in the
-            <filename>yocto-kernel-cache</filename> Git repository:
-            <literallayout class='monospaced'>
-     cfg/smp.scc:
-        define KFEATURE_DESCRIPTION "Enable SMP for 32 bit builds"
-        define KFEATURE_COMPATIBILITY all
-
-        kconf hardware smp.cfg
-
-     cfg/smp.cfg:
-        CONFIG_SMP=y
-        CONFIG_SCHED_SMT=y
-        # Increase default NR_CPUS from 8 to 64 so that platform with
-        # more than 8 processors can be all activated at boot time
-        CONFIG_NR_CPUS=64
-        # The following is needed when setting NR_CPUS to something
-        # greater than 8 on x86 architectures, it should be automatically
-        # disregarded by Kconfig when using a different arch
-        CONFIG_X86_BIGSMP=y
-            </literallayout>
-            You can find general information on configuration fragment files in
-            the
-            "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
-            section.
-        </para>
-
-        <para>
-            Within the <filename>smp.scc</filename> file, the
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-KFEATURE_DESCRIPTION'><filename>KFEATURE_DESCRIPTION</filename></ulink>
-            statement provides a short description of the fragment.
-            Higher level kernel tools use this description.
-        </para>
-
-        <para>
-            Also within the <filename>smp.scc</filename> file, the
-            <filename>kconf</filename> command includes the
-            actual configuration fragment in an <filename>.scc</filename>
-            file, and the "hardware" keyword identifies the fragment as
-            being hardware enabling, as opposed to general policy,
-            which would use the "non-hardware" keyword.
-            The distinction is made for the benefit of the configuration
-            validation tools, which warn you if a hardware fragment
-            overrides a policy set by a non-hardware fragment.
-            <note>
-                The description file can include multiple
-                <filename>kconf</filename> statements, one per fragment.
-            </note>
-        </para>
-
-        <para>
-            As described in the
-            "<link linkend='validating-configuration'>Validating Configuration</link>"
-            section, you can use the following BitBake command to audit your
-            configuration:
-            <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c kernel_configcheck -f
-            </literallayout>
-        </para>
-    </section>
-
-    <section id='patches'>
-        <title>Patches</title>
-
-        <para>
-            Patch descriptions are very similar to configuration fragment
-            descriptions, which are described in the previous section.
-            However, instead of a <filename>.cfg</filename> file, these
-            descriptions work with source patches (i.e.
-            <filename>.patch</filename> files).
-        </para>
-
-        <para>
-            A typical patch includes a description file and the patch itself.
-            As an example, consider the build patches used with the
-            <filename>linux-yocto-4.12</filename> kernel as defined outside of
-            the recipe space (i.e. <filename>yocto-kernel-cache</filename>).
-            This Metadata consists of several files:
-            <filename>build.scc</filename> and a set of
-            <filename>*.patch</filename> files.
-            You can find these files in the <filename>patches/build</filename>
-            directory of the <filename>yocto-4.12</filename> branch in the
-            <filename>yocto-kernel-cache</filename> Git repository.
-        </para>
-
-        <para>
-            The following listings show the <filename>build.scc</filename>
-            file and part of the
-            <filename>modpost-mask-trivial-warnings.patch</filename> file:
-            <literallayout class='monospaced'>
-     patches/build/build.scc:
-        patch arm-serialize-build-targets.patch
-        patch powerpc-serialize-image-targets.patch
-        patch kbuild-exclude-meta-directory-from-distclean-processi.patch
-
-        # applied by kgit
-        # patch kbuild-add-meta-files-to-the-ignore-li.patch
-
-        patch modpost-mask-trivial-warnings.patch
-        patch menuconfig-check-lxdiaglog.sh-Allow-specification-of.patch
-
-     patches/build/modpost-mask-trivial-warnings.patch:
-        From bd48931bc142bdd104668f3a062a1f22600aae61 Mon Sep 17 00:00:00 2001
-        From: Paul Gortmaker &lt;paul.gortmaker@windriver.com&gt;
-        Date: Sun, 25 Jan 2009 17:58:09 -0500
-        Subject: [PATCH] modpost: mask trivial warnings
-
-        Newer HOSTCC will complain about various stdio fcns because
-                          .
-                          .
-                          .
- 	        char *dump_write = NULL, *files_source = NULL;
- 	        int opt;
-        --
-        2.10.1
-
-        generated by cgit v0.10.2 at 2017-09-28 15:23:23 (GMT)
-            </literallayout>
-            The description file can include multiple patch statements where
-            each statement handles a single patch.
-            In the example <filename>build.scc</filename> file, five patch
-            statements exist for the five patches in the directory.
-        </para>
-
-        <para>
-            You can create a typical <filename>.patch</filename> file using
-            <filename>diff -Nurp</filename> or
-            <filename>git format-patch</filename> commands.
-            For information on how to create patches, see the
-            "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-            and
-            "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-            sections.
-        </para>
-    </section>
-
-    <section id='features'>
-        <title>Features</title>
-
-        <para>
-            Features are complex kernel Metadata types that consist
-            of configuration fragments, patches, and possibly other feature
-            description files.
-            As an example, consider the following generic listing:
-            <literallayout class='monospaced'>
-     features/<replaceable>myfeature</replaceable>.scc
-        define KFEATURE_DESCRIPTION "Enable <replaceable>myfeature</replaceable>"
-
-        patch 0001-<replaceable>myfeature</replaceable>-core.patch
-        patch 0002-<replaceable>myfeature</replaceable>-interface.patch
-
-        include cfg/<replaceable>myfeature</replaceable>_dependency.scc
-        kconf non-hardware <replaceable>myfeature</replaceable>.cfg
-            </literallayout>
-            This example shows how the <filename>patch</filename> and
-            <filename>kconf</filename> commands are used as well as
-            how an additional feature description file is included with
-            the <filename>include</filename> command.
-        </para>
-
-        <para>
-            Typically, features are less granular than configuration
-            fragments and are more likely than configuration fragments
-            and patches to be the types of things you want to specify
-            in the <filename>KERNEL_FEATURES</filename> variable of the
-            Linux kernel recipe.
-            See the "<link linkend='using-kernel-metadata-in-a-recipe'>Using Kernel Metadata in a Recipe</link>"
-            section earlier in the manual.
-        </para>
-    </section>
-
-    <section id='kernel-types'>
-        <title>Kernel Types</title>
-
-        <para>
-            A kernel type defines a high-level kernel policy by
-            aggregating non-hardware configuration fragments with
-            patches you want to use when building a Linux kernel of a
-            specific type (e.g. a real-time kernel).
-            Syntactically, kernel types are no different than features
-            as described in the "<link linkend='features'>Features</link>"
-            section.
-            The
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></ulink>
-            variable in the kernel recipe selects the kernel type.
-            For example, in the <filename>linux-yocto_4.12.bb</filename>
-            kernel recipe found in
-            <filename>poky/meta/recipes-kernel/linux</filename>, a
-            <ulink url='&YOCTO_DOCS_BB_URL;#require-inclusion'><filename>require</filename></ulink>
-            directive includes the
-            <filename>poky/meta/recipes-kernel/linux/linux-yocto.inc</filename>
-            file, which has the following statement that defines the default
-            kernel type:
-            <literallayout class='monospaced'>
-     LINUX_KERNEL_TYPE ??= "standard"
-            </literallayout>
-        </para>
-
-        <para>
-            Another example would be the real-time kernel (i.e.
-            <filename>linux-yocto-rt_4.12.bb</filename>).
-            This kernel recipe directly sets the kernel type as follows:
-            <literallayout class='monospaced'>
-     LINUX_KERNEL_TYPE = "preempt-rt"
-            </literallayout>
-            <note>
-                You can find kernel recipes in the
-                <filename>meta/recipes-kernel/linux</filename> directory of the
-                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
-                (e.g. <filename>poky/meta/recipes-kernel/linux/linux-yocto_4.12.bb</filename>).
-                See the "<link linkend='using-kernel-metadata-in-a-recipe'>Using Kernel Metadata in a Recipe</link>"
-                section for more information.
-            </note>
-        </para>
-
-        <para>
-            Three kernel types ("standard", "tiny", and "preempt-rt") are
-            supported for Linux Yocto kernels:
-            <itemizedlist>
-                <listitem><para>"standard":
-                    Includes the generic Linux kernel policy of the Yocto
-                    Project linux-yocto kernel recipes.
-                    This policy includes, among other things, which file
-                    systems, networking options, core kernel features, and
-                    debugging and tracing options are supported.
-                    </para></listitem>
-                <listitem><para>"preempt-rt":
-                    Applies the <filename>PREEMPT_RT</filename>
-                    patches and the configuration options required to
-                    build a real-time Linux kernel.
-                    This kernel type inherits from the "standard" kernel type.
-                    </para></listitem>
-                <listitem><para>"tiny":
-                    Defines a bare minimum configuration meant to serve as a
-                    base for very small Linux kernels.
-                    The "tiny" kernel type is independent from the "standard"
-                    configuration.
-                    Although the "tiny" kernel type does not currently include
-                    any source changes, it might in the future.
-                    </para></listitem>
-            </itemizedlist>
-        </para>
-
-        <para>
-            For any given kernel type, the Metadata is defined by the
-            <filename>.scc</filename> (e.g. <filename>standard.scc</filename>).
-            Here is a partial listing for the <filename>standard.scc</filename>
-            file, which is found in the <filename>ktypes/standard</filename>
-            directory of the <filename>yocto-kernel-cache</filename> Git
-            repository:
-            <literallayout class='monospaced'>
-     # Include this kernel type fragment to get the standard features and
-     # configuration values.
-
-     # Note: if only the features are desired, but not the configuration
-     #       then this should be included as:
-     #             include ktypes/standard/standard.scc nocfg
-     #       if no chained configuration is desired, include it as:
-     #             include ktypes/standard/standard.scc nocfg inherit
-
-
-
-     include ktypes/base/base.scc
-     branch standard
-
-     kconf non-hardware standard.cfg
-
-     include features/kgdb/kgdb.scc
-                .
-                .
-                .
-
-     include cfg/net/ip6_nf.scc
-     include cfg/net/bridge.scc
-
-     include cfg/systemd.scc
-
-     include features/rfkill/rfkill.scc
-            </literallayout>
-        </para>
-
-        <para>
-            As with any <filename>.scc</filename> file, a
-            kernel type definition can aggregate other
-            <filename>.scc</filename> files with
-            <filename>include</filename> commands.
-            These definitions can also directly pull in
-            configuration fragments and patches with the
-            <filename>kconf</filename> and <filename>patch</filename>
-            commands, respectively.
-        </para>
-
-        <note>
-            It is not strictly necessary to create a kernel type
-            <filename>.scc</filename> file.
-            The Board Support Package (BSP) file can implicitly define
-            the kernel type using a <filename>define
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'>KTYPE</ulink> myktype</filename>
-            line.
-            See the "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
-            section for more information.
-        </note>
-    </section>
-
-    <section id='bsp-descriptions'>
-        <title>BSP Descriptions</title>
-
-        <para>
-            BSP descriptions (i.e. <filename>*.scc</filename> files)
-            combine kernel types with hardware-specific features.
-            The hardware-specific Metadata is typically defined
-            independently in the BSP layer, and then aggregated with each
-            supported kernel type.
-            <note>
-                For BSPs supported by the Yocto Project, the BSP description
-                files are located in the <filename>bsp</filename> directory
-                of the
-                <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache/tree/bsp'><filename>yocto-kernel-cache</filename></ulink>
-                repository organized under the "Yocto Linux Kernel" heading
-                in the
-                <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
-            </note>
-        </para>
-
-        <para>
-            This section overviews the BSP description structure, the
-            aggregation concepts, and presents a detailed example using
-            a BSP supported by the Yocto Project (i.e. BeagleBone Board).
-            For complete information on BSP layer file hierarchy, see the
-            <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
-        </para>
-
-        <section id='bsp-description-file-overview'>
-            <title>Overview</title>
-
-            <para>
-                For simplicity, consider the following root BSP layer
-                description files for the BeagleBone board.
-                These files employ both a structure and naming convention
-                for consistency.
-                The naming convention for the file is as follows:
-                <literallayout class='monospaced'>
-     <replaceable>bsp_root_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
-                </literallayout>
-                Here are some example root layer BSP filenames for the
-                BeagleBone Board BSP, which is supported by the Yocto Project:
-                <literallayout class='monospaced'>
-     beaglebone-standard.scc
-     beaglebone-preempt-rt.scc
-                </literallayout>
-                Each file uses the root name (i.e "beaglebone") BSP name
-                followed by the kernel type.
-            </para>
-
-            <para>
-                Examine the <filename>beaglebone-standard.scc</filename>
-                file:
-                <literallayout class='monospaced'>
-     define KMACHINE beaglebone
-     define KTYPE standard
-     define KARCH arm
-
-     include ktypes/standard/standard.scc
-     branch beaglebone
-
-     include beaglebone.scc
-
-     # default policy for standard kernels
-     include features/latencytop/latencytop.scc
-     include features/profiling/profiling.scc
-                </literallayout>
-                Every top-level BSP description file should define the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>,
-                and <ulink url='&YOCTO_DOCS_REF_URL;#var-KARCH'><filename>KARCH</filename></ulink>
-                variables.
-                These variables allow the OpenEmbedded build system to identify
-                the description as meeting the criteria set by the recipe being
-                built.
-                This example supports the "beaglebone" machine for the
-                "standard" kernel and the "arm" architecture.
-            </para>
-
-            <para>
-                Be aware that a hard link between the
-                <filename>KTYPE</filename> variable and a kernel type
-                description file does not exist.
-                Thus, if you do not have the kernel type defined in your kernel
-                Metadata as it is here, you only need to ensure that the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_KERNEL_TYPE'><filename>LINUX_KERNEL_TYPE</filename></ulink>
-                variable in the kernel recipe and the
-                <filename>KTYPE</filename> variable in the BSP description
-                file match.
-            </para>
-
-            <para>
-                To separate your kernel policy from your hardware configuration,
-                you include a kernel type (<filename>ktype</filename>), such as
-                "standard".
-                In the previous example, this is done using the following:
-                <literallayout class='monospaced'>
-     include ktypes/standard/standard.scc
-                </literallayout>
-                This file aggregates all the configuration fragments, patches,
-                and features that make up your standard kernel policy.
-                See the "<link linkend='kernel-types'>Kernel Types</link>"
-                section for more information.
-            </para>
-
-            <para>
-                To aggregate common configurations and features specific to the
-                kernel for <replaceable>mybsp</replaceable>, use the following:
-                <literallayout class='monospaced'>
-     include <replaceable>mybsp</replaceable>.scc
-                </literallayout>
-                You can see that in the BeagleBone example with the following:
-                <literallayout class='monospaced'>
-     include beaglebone.scc
-                </literallayout>
-                For information on how to break a complete
-                <filename>.config</filename> file into the various
-                configuration fragments, see the
-                "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
-                section.
-            </para>
-
-            <para>
-                Finally, if you have any configurations specific to the
-                hardware that are not in a <filename>*.scc</filename> file,
-                you can include them as follows:
-                <literallayout class='monospaced'>
-     kconf hardware <replaceable>mybsp</replaceable>-<replaceable>extra</replaceable>.cfg
-                </literallayout>
-                The BeagleBone example does not include these types of
-                configurations.
-                However, the Malta 32-bit board does ("mti-malta32").
-                Here is the <filename>mti-malta32-le-standard.scc</filename>
-                file:
-                <literallayout class='monospaced'>
-     define KMACHINE mti-malta32-le
-     define KMACHINE qemumipsel
-     define KTYPE standard
-     define KARCH mips
-
-     include ktypes/standard/standard.scc
-     branch mti-malta32
-
-     include mti-malta32.scc
-     kconf hardware mti-malta32-le.cfg
-                </literallayout>
-            </para>
-        </section>
-
-        <section id='bsp-description-file-example-minnow'>
-            <title>Example</title>
-
-            <para>
-                Many real-world examples are more complex.
-                Like any other <filename>.scc</filename> file, BSP
-                descriptions can aggregate features.
-                Consider the Minnow BSP definition given the
-                <filename>linux-yocto-4.4</filename> branch of the
-                <filename>yocto-kernel-cache</filename> (i.e.
-                <filename>yocto-kernel-cache/bsp/minnow/minnow.scc</filename>):
-                <note>
-                    Although the Minnow Board BSP is unused, the Metadata
-                    remains and is being used here just as an example.
-                </note>
-                <literallayout class='monospaced'>
-         include cfg/x86.scc
-         include features/eg20t/eg20t.scc
-         include cfg/dmaengine.scc
-         include features/power/intel.scc
-         include cfg/efi.scc
-         include features/usb/ehci-hcd.scc
-         include features/usb/ohci-hcd.scc
-         include features/usb/usb-gadgets.scc
-         include features/usb/touchscreen-composite.scc
-         include cfg/timer/hpet.scc
-         include features/leds/leds.scc
-         include features/spi/spidev.scc
-         include features/i2c/i2cdev.scc
-         include features/mei/mei-txe.scc
-
-         # Earlyprintk and port debug requires 8250
-         kconf hardware cfg/8250.cfg
-
-         kconf hardware minnow.cfg
-         kconf hardware minnow-dev.cfg
-                </literallayout>
-            </para>
-
-            <para>
-                The <filename>minnow.scc</filename> description file includes
-                a hardware configuration fragment
-                (<filename>minnow.cfg</filename>) specific to the Minnow
-                BSP as well as several more general configuration
-                fragments and features enabling hardware found on the
-                machine.
-                This <filename>minnow.scc</filename> description file is then
-                included in each of the three
-                "minnow" description files for the supported kernel types
-                (i.e. "standard", "preempt-rt", and "tiny").
-                Consider the "minnow" description for the "standard" kernel
-                type (i.e. <filename>minnow-standard.scc</filename>:
-                <literallayout class='monospaced'>
-         define KMACHINE minnow
-         define KTYPE standard
-         define KARCH i386
-
-         include ktypes/standard
-
-         include minnow.scc
-
-         # Extra minnow configs above the minimal defined in minnow.scc
-         include cfg/efi-ext.scc
-         include features/media/media-all.scc
-         include features/sound/snd_hda_intel.scc
-
-         # The following should really be in standard.scc
-         # USB live-image support
-         include cfg/usb-mass-storage.scc
-         include cfg/boot-live.scc
-
-         # Basic profiling
-         include features/latencytop/latencytop.scc
-         include features/profiling/profiling.scc
-
-         # Requested drivers that don't have an existing scc
-         kconf hardware minnow-drivers-extra.cfg
-                </literallayout>
-                The <filename>include</filename> command midway through the file
-                includes the <filename>minnow.scc</filename> description that
-                defines all enabled hardware for the BSP that is common to
-                all kernel types.
-                Using this command significantly reduces duplication.
-            </para>
-
-            <para>
-                Now consider the "minnow" description for the "tiny" kernel
-                type (i.e. <filename>minnow-tiny.scc</filename>):
-                <literallayout class='monospaced'>
-        define KMACHINE minnow
-        define KTYPE tiny
-        define KARCH i386
-
-        include ktypes/tiny
-
-        include minnow.scc
-                </literallayout>
-                As you might expect, the "tiny" description includes quite a
-                bit less.
-                In fact, it includes only the minimal policy defined by the
-                "tiny" kernel type and the hardware-specific configuration
-                required for booting the machine along with the most basic
-                functionality of the system as defined in the base "minnow"
-                description file.
-            </para>
-
-            <para>
-                Notice again the three critical variables:
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>,
-                and
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KARCH'><filename>KARCH</filename></ulink>.
-                Of these variables, only <filename>KTYPE</filename>
-                has changed to specify the "tiny" kernel type.
-            </para>
-        </section>
-    </section>
-</section>
-
-<section id='kernel-metadata-location'>
-    <title>Kernel Metadata Location</title>
-
-    <para>
-        Kernel Metadata always exists outside of the kernel tree either
-        defined in a kernel recipe (recipe-space) or outside of the recipe.
-        Where you choose to define the Metadata depends on what you want
-        to do and how you intend to work.
-        Regardless of where you define the kernel Metadata, the syntax used
-        applies equally.
-    </para>
-
-    <para>
-        If you are unfamiliar with the Linux kernel and only wish
-        to apply a configuration and possibly a couple of patches provided to
-        you by others, the recipe-space method is recommended.
-        This method is also a good approach if you are working with Linux kernel
-        sources you do not control or if you just do not want to maintain a
-        Linux kernel Git repository on your own.
-        For partial information on how you can define kernel Metadata in
-        the recipe-space, see the
-        "<link linkend='modifying-an-existing-recipe'>Modifying an Existing Recipe</link>"
-        section.
-    </para>
-
-    <para>
-        Conversely, if you are actively developing a kernel and are already
-        maintaining a Linux kernel Git repository of your own, you might find
-        it more convenient to work with kernel Metadata kept outside the
-        recipe-space.
-        Working with Metadata in this area can make iterative development of
-        the Linux kernel more efficient outside of the BitBake environment.
-    </para>
-
-    <section id='recipe-space-metadata'>
-        <title>Recipe-Space Metadata</title>
-
-        <para>
-            When stored in recipe-space, the kernel Metadata files reside in a
-            directory hierarchy below
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>.
-            For a linux-yocto recipe or for a Linux kernel recipe derived
-            by copying and modifying
-            <filename>oe-core/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb</filename>
-            to a recipe in your layer, <filename>FILESEXTRAPATHS</filename>
-            is typically set to
-            <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-THISDIR'><filename>THISDIR</filename></ulink><filename>}/${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>.
-            See the "<link linkend='modifying-an-existing-recipe'>Modifying an Existing Recipe</link>"
-            section for more information.
-        </para>
-
-        <para>
-            Here is an example that shows a trivial tree of kernel Metadata
-            stored in recipe-space within a BSP layer:
-            <literallayout class='monospaced'>
-     meta-<replaceable>my_bsp_layer</replaceable>/
-     `-- recipes-kernel
-         `-- linux
-             `-- linux-yocto
-                 |-- bsp-standard.scc
-                 |-- bsp.cfg
-                 `-- standard.cfg
-            </literallayout>
-        </para>
-
-        <para>
-            When the Metadata is stored in recipe-space, you must take
-            steps to ensure BitBake has the necessary information to decide
-            what files to fetch and when they need to be fetched again.
-            It is only necessary to specify the <filename>.scc</filename>
-            files on the
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>.
-            BitBake parses them and fetches any files referenced in the
-            <filename>.scc</filename> files by the <filename>include</filename>,
-            <filename>patch</filename>, or <filename>kconf</filename> commands.
-            Because of this, it is necessary to bump the recipe
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>
-            value when changing the content of files not explicitly listed
-            in the <filename>SRC_URI</filename>.
-        </para>
-
-        <para>
-            If the BSP description is in recipe space, you cannot simply list
-            the <filename>*.scc</filename> in the <filename>SRC_URI</filename>
-            statement.
-            You need to use the following form from your kernel append file:
-            <literallayout class='monospaced'>
-     SRC_URI_append_<replaceable>myplatform</replaceable> = " \
-        file://<replaceable>myplatform</replaceable>;type=kmeta;destsuffix=<replaceable>myplatform</replaceable> \
-        "
-            </literallayout>
-        </para>
-    </section>
-
-    <section id='metadata-outside-the-recipe-space'>
-        <title>Metadata Outside the Recipe-Space</title>
-
-        <para>
-            When stored outside of the recipe-space, the kernel Metadata
-            files reside in a separate repository.
-            The OpenEmbedded build system adds the Metadata to the build as
-            a "type=kmeta" repository through the
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-            variable.
-            As an example, consider the following <filename>SRC_URI</filename>
-            statement from the <filename>linux-yocto_4.12.bb</filename>
-            kernel recipe:
-            <literallayout class='monospaced'>
-     SRC_URI = "git://git.yoctoproject.org/linux-yocto-4.12.git;name=machine;branch=${KBRANCH}; \
-                git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.12;destsuffix=${KMETA}"
-            </literallayout>
-            <filename>${KMETA}</filename>, in this context, is simply used to
-            name the directory into which the Git fetcher places the Metadata.
-            This behavior is no different than any multi-repository
-            <filename>SRC_URI</filename> statement used in a recipe (e.g.
-            see the previous section).
-        </para>
-
-        <para>
-            You can keep kernel Metadata in a "kernel-cache", which is a
-            directory containing configuration fragments.
-            As with any Metadata kept outside the recipe-space, you simply
-            need to use the <filename>SRC_URI</filename> statement with the
-            "type=kmeta" attribute.
-            Doing so makes the kernel Metadata available during the
-            configuration phase.
-        </para>
-
-        <para>
-            If you modify the Metadata, you must not forget to update the
-            <filename>SRCREV</filename> statements in the kernel's recipe.
-            In particular, you need to update the
-            <filename>SRCREV_meta</filename> variable to match the commit in
-            the <filename>KMETA</filename> branch you wish to use.
-            Changing the data in these branches and not updating the
-            <filename>SRCREV</filename> statements to match will cause the
-            build to fetch an older commit.
-        </para>
-    </section>
-</section>
-
-<section id='organizing-your-source'>
-    <title>Organizing Your Source</title>
-
-    <para>
-        Many recipes based on the <filename>linux-yocto-custom.bb</filename>
-        recipe use Linux kernel sources that have only a single
-        branch - "master".
-        This type of repository structure is fine for linear development
-        supporting a single machine and architecture.
-        However, if you work with multiple boards and architectures,
-        a kernel source repository with multiple branches is more
-        efficient.
-        For example, suppose you need a series of patches for one board to boot.
-        Sometimes, these patches are works-in-progress or fundamentally wrong,
-        yet they are still necessary for specific boards.
-        In these situations, you most likely do not want to include these
-        patches in every kernel you build (i.e. have the patches as part of
-        the lone "master" branch).
-        It is situations like these that give rise to multiple branches used
-        within a Linux kernel sources Git repository.
-    </para>
-
-    <para>
-        Repository organization strategies exist that maximize source reuse,
-        remove redundancy, and logically order your changes.
-        This section presents strategies for the following cases:
-        <itemizedlist>
-            <listitem><para>Encapsulating patches in a feature description
-                and only including the patches in the BSP descriptions of
-                the applicable boards.</para></listitem>
-            <listitem><para>Creating a machine branch in your
-                kernel source repository and applying the patches on that
-                branch only.</para></listitem>
-            <listitem><para>Creating a feature branch in your
-                kernel source repository and merging that branch into your
-                BSP when needed.</para></listitem>
-        </itemizedlist>
-    </para>
-
-    <para>
-        The approach you take is entirely up to you
-        and depends on what works best for your development model.
-    </para>
-
-    <section id='encapsulating-patches'>
-        <title>Encapsulating Patches</title>
-
-        <para>
-            if you are reusing patches from an external tree and are not
-            working on the patches, you might find the encapsulated feature
-            to be appropriate.
-            Given this scenario, you do not need to create any branches in the
-            source repository.
-            Rather, you just take the static patches you need and encapsulate
-            them within a feature description.
-            Once you have the feature description, you simply include that into
-            the BSP description as described in the
-            "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
-            section.
-        </para>
-
-        <para>
-            You can find information on how to create patches and BSP
-            descriptions in the "<link linkend='patches'>Patches</link>" and
-            "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
-            sections.
-        </para>
-    </section>
-
-    <section id='machine-branches'>
-        <title>Machine Branches</title>
-
-        <para>
-            When you have multiple machines and architectures to support,
-            or you are actively working on board support, it is more
-            efficient to create branches in the repository based on
-            individual machines.
-            Having machine branches allows common source to remain in the
-            "master" branch with any features specific to a machine stored
-            in the appropriate machine branch.
-            This organization method frees you from continually reintegrating
-            your patches into a feature.
-        </para>
-
-        <para>
-            Once you have a new branch, you can set up your kernel Metadata
-            to use the branch a couple different ways.
-            In the recipe, you can specify the new branch as the
-            <filename>KBRANCH</filename> to use for the board as
-            follows:
-            <literallayout class='monospaced'>
-     KBRANCH = "mynewbranch"
-            </literallayout>
-            Another method is to use the <filename>branch</filename> command
-            in the BSP description:
-            <literallayout class='monospaced'>
-     mybsp.scc:
-        define KMACHINE mybsp
-        define KTYPE standard
-        define KARCH i386
-        include standard.scc
-
-        branch mynewbranch
-
-        include mybsp-hw.scc
-            </literallayout>
-        </para>
-
-        <para>
-            If you find yourself with numerous branches, you might consider
-            using a hierarchical branching system similar to what the
-            Yocto Linux Kernel Git repositories use:
-            <literallayout class='monospaced'>
-     <replaceable>common</replaceable>/<replaceable>kernel_type</replaceable>/<replaceable>machine</replaceable>
-            </literallayout>
-        </para>
-
-        <para>
-            If you had two kernel types, "standard" and "small" for
-            instance, three machines, and <replaceable>common</replaceable>
-            as <filename>mydir</filename>, the branches in your
-            Git repository might look like this:
-            <literallayout class='monospaced'>
-     mydir/base
-     mydir/standard/base
-     mydir/standard/machine_a
-     mydir/standard/machine_b
-     mydir/standard/machine_c
-     mydir/small/base
-     mydir/small/machine_a
-            </literallayout>
-        </para>
-
-        <para>
-            This organization can help clarify the branch relationships.
-            In this case, <filename>mydir/standard/machine_a</filename>
-            includes everything in <filename>mydir/base</filename> and
-            <filename>mydir/standard/base</filename>.
-            The "standard" and "small" branches add sources specific to those
-            kernel types that for whatever reason are not appropriate for the
-            other branches.
-            <note>
-                The "base" branches are an artifact of the way Git manages
-                its data internally on the filesystem: Git will not allow you
-                to use <filename>mydir/standard</filename> and
-                <filename>mydir/standard/machine_a</filename> because it
-                would have to create a file and a directory named "standard".
-            </note>
-        </para>
-    </section>
-
-    <section id='feature-branches'>
-        <title>Feature Branches</title>
-
-        <para>
-            When you are actively developing new features, it can be more
-            efficient to work with that feature as a branch, rather than
-            as a set of patches that have to be regularly updated.
-            The Yocto Project Linux kernel tools provide for this with
-            the <filename>git merge</filename> command.
-        </para>
-
-        <para>
-            To merge a feature branch into a BSP, insert the
-            <filename>git merge</filename> command after any
-            <filename>branch</filename> commands:
-            <literallayout class='monospaced'>
-     mybsp.scc:
-        define KMACHINE mybsp
-        define KTYPE standard
-        define KARCH i386
-        include standard.scc
-
-        branch mynewbranch
-        git merge myfeature
-
-        include mybsp-hw.scc
-            </literallayout>
-        </para>
-    </section>
-</section>
-
-<section id='scc-reference'>
-    <title>SCC Description File Reference</title>
-
-    <para>
-        This section provides a brief reference for the commands you can use
-        within an SCC description file (<filename>.scc</filename>):
-        <itemizedlist>
-            <listitem><para>
-                <filename>branch [ref]</filename>:
-                Creates a new branch relative to the current branch
-                (typically <filename>${KTYPE}</filename>) using
-                the currently checked-out branch, or "ref" if specified.
-                </para></listitem>
-            <listitem><para>
-                <filename>define</filename>:
-                Defines variables, such as
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>,
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KARCH'><filename>KARCH</filename></ulink>,
-                and
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KFEATURE_DESCRIPTION'><filename>KFEATURE_DESCRIPTION</filename></ulink>.
-                </para></listitem>
-            <listitem><para>
-                <filename>include SCC_FILE</filename>:
-                Includes an SCC file in the current file.
-                The file is parsed as if you had inserted it inline.
-                </para></listitem>
-            <listitem><para>
-                <filename>kconf [hardware|non-hardware] CFG_FILE</filename>:
-                Queues a configuration fragment for merging into the final
-                Linux <filename>.config</filename> file.</para></listitem>
-            <listitem><para>
-                <filename>git merge GIT_BRANCH</filename>:
-                Merges the feature branch into the current branch.
-                </para></listitem>
-            <listitem><para>
-                <filename>patch PATCH_FILE</filename>:
-                Applies the patch to the current Git branch.
-                </para></listitem>
-        </itemizedlist>
-    </para>
-</section>
-
-</chapter>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-common.rst b/poky/documentation/kernel-dev/kernel-dev-common.rst
index d4b60a9..64235f3 100644
--- a/poky/documentation/kernel-dev/kernel-dev-common.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-common.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 ************
 Common Tasks
diff --git a/poky/documentation/kernel-dev/kernel-dev-common.xml b/poky/documentation/kernel-dev/kernel-dev-common.xml
deleted file mode 100644
index 8e8a6db..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-common.xml
+++ /dev/null
@@ -1,2730 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<chapter id='kernel-dev-common'>
-<title>Common Tasks</title>
-
-    <para>
-        This chapter presents several common tasks you perform when you
-        work with the Yocto Project Linux kernel.
-        These tasks include preparing your host development system for
-        kernel development, preparing a layer, modifying an existing recipe,
-        patching the kernel, configuring the kernel, iterative development,
-        working with your own sources, and incorporating out-of-tree modules.
-        <note>
-            The examples presented in this chapter work with the Yocto Project
-            2.4 Release and forward.
-        </note>
-    </para>
-
-    <section id='preparing-the-build-host-to-work-on-the-kernel'>
-        <title>Preparing the Build Host to Work on the Kernel</title>
-
-        <para>
-            Before you can do any kernel development, you need to be
-            sure your build host is set up to use the Yocto Project.
-            For information on how to get set up, see the
-            "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-preparing-the-build-host'>Preparing the Build Host</ulink>"
-            section in the Yocto Project Development Tasks Manual.
-            Part of preparing the system is creating a local Git
-            repository of the
-            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
-            (<filename>poky</filename>) on your system.
-            Follow the steps in the
-            "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
-            section in the Yocto Project Development Tasks Manual to set up your
-            Source Directory.
-            <note>
-                Be sure you check out the appropriate development branch or
-                you create your local branch by checking out a specific tag
-                to get the desired version of Yocto Project.
-                See the
-                "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
-                and
-                "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
-                sections in the Yocto Project Development Tasks Manual for more
-                information.
-            </note>
-        </para>
-
-        <para>
-            Kernel development is best accomplished using
-            <ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename></ulink>
-            and not through traditional kernel workflow methods.
-            The remainder of this section provides information for both
-            scenarios.
-        </para>
-
-        <section id='getting-ready-to-develop-using-devtool'>
-            <title>Getting Ready to Develop Using <filename>devtool</filename></title>
-
-            <para>
-                Follow these steps to prepare to update the kernel image using
-                <filename>devtool</filename>.
-                Completing this procedure leaves you with a clean kernel image
-                and ready to make modifications as described in the
-                "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-                section:
-                <orderedlist>
-                    <listitem><para>
-                        <emphasis>Initialize the BitBake Environment:</emphasis>
-                        Before building an extensible SDK, you need to
-                        initialize the BitBake build environment by sourcing the
-                        build environment script
-                        (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>):
-                        <literallayout class='monospaced'>
-     $ cd ~/poky
-     $ source oe-init-build-env
-                        </literallayout>
-                        <note>
-                            The previous commands assume the
-                            <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
-                            (i.e. <filename>poky</filename>) have been cloned
-                            using Git and the local repository is named
-                            "poky".
-                        </note>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Prepare Your <filename>local.conf</filename> File:</emphasis>
-                        By default, the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
-                        variable is set to "qemux86-64", which is fine if you are
-                        building for the QEMU emulator in 64-bit mode.
-                        However, if you are not, you need to set the
-                        <filename>MACHINE</filename> variable appropriately in
-                        your <filename>conf/local.conf</filename> file found in
-                        the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
-                        (i.e. <filename>~/poky/build</filename> in this
-                        example).</para>
-
-                        <para>Also, since you are preparing to work on the
-                        kernel image, you need to set the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
-                        variable to include kernel modules.</para>
-
-                        <para>In this example we wish to build for qemux86 so
-                        we must set the <filename>MACHINE</filename> variable
-                        to "qemux86" and also add the "kernel-modules". As described
-                        we do this by appending to <filename>conf/local.conf</filename>:
-                        <literallayout class='monospaced'>
-     MACHINE = "qemux86"
-     MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Create a Layer for Patches:</emphasis>
-                        You need to create a layer to hold patches created
-                        for the kernel image.
-                        You can use the
-                        <filename>bitbake-layers create-layer</filename>
-                        command as follows:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake-layers create-layer ../../meta-mylayer
-     NOTE: Starting bitbake server...
-     Add your new layer with 'bitbake-layers add-layer ../../meta-mylayer'
-     $
-                        </literallayout>
-                        <note>
-                            For background information on working with
-                            common and BSP layers, see the
-                            "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
-                            section in the Yocto Project Development Tasks
-                            Manual and the
-                            "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
-                            section in the Yocto Project Board Support (BSP)
-                            Developer's Guide, respectively.
-                            For information on how to use the
-                            <filename>bitbake-layers create-layer</filename>
-                            command to quickly set up a layer, see the
-                            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
-                            section in the Yocto Project Development Tasks
-                            Manual.
-                        </note>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Inform the BitBake Build Environment About
-                        Your Layer:</emphasis>
-                        As directed when you created your layer, you need to
-                        add the layer to the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
-                        variable in the <filename>bblayers.conf</filename> file
-                        as follows:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake-layers add-layer ../../meta-mylayer
-     NOTE: Starting bitbake server...
-     $
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Build the Extensible SDK:</emphasis>
-                        Use BitBake to build the extensible SDK specifically
-                        for use with images to be run using QEMU:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake core-image-minimal -c populate_sdk_ext
-                        </literallayout>
-                        Once the build finishes, you can find the SDK installer
-                        file (i.e. <filename>*.sh</filename> file) in the
-                        following directory:
-                        <literallayout class='monospaced'>
-     ~/poky/build/tmp/deploy/sdk
-                        </literallayout>
-                        For this example, the installer file is named
-                        <filename>poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh</filename>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Install the Extensible SDK:</emphasis>
-                        Use the following command to install the SDK.
-                        For this example, install the SDK in the default
-                        <filename>~/poky_sdk</filename> directory:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build/tmp/deploy/sdk
-     $ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh
-     Poky (Yocto Project Reference Distro) Extensible SDK installer version &DISTRO;
-     ============================================================================
-     Enter target directory for SDK (default: ~/poky_sdk):
-     You are about to install the SDK to "/home/scottrif/poky_sdk". Proceed [Y/n]? Y
-     Extracting SDK......................................done
-     Setting it up...
-     Extracting buildtools...
-     Preparing build system...
-     Parsing recipes: 100% |#################################################################| Time: 0:00:52
-     Initializing tasks: 100% |############## ###############################################| Time: 0:00:04
-     Checking sstate mirror object availability: 100% |######################################| Time: 0:00:00
-     Parsing recipes: 100% |#################################################################| Time: 0:00:33
-     Initializing tasks: 100% |##############################################################| Time: 0:00:00
-     done
-     SDK has been successfully set up and is ready to be used.
-     Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
-      $ . /home/scottrif/poky_sdk/environment-setup-i586-poky-linux
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para id='setting-up-the-esdk-terminal'>
-                        <emphasis>Set Up a New Terminal to Work With the
-                        Extensible SDK:</emphasis>
-                        You must set up a new terminal to work with the SDK.
-                        You cannot use the same BitBake shell used to build the
-                        installer.</para>
-
-                        <para>After opening a new shell, run the SDK environment
-                        setup script as directed by the output from installing
-                        the SDK:
-                        <literallayout class='monospaced'>
-     $ source ~/poky_sdk/environment-setup-i586-poky-linux
-     "SDK environment now set up; additionally you may now run devtool to perform development tasks.
-     Run devtool --help for further details.
-                        </literallayout>
-                        <note>
-                            If you get a warning about attempting to use the
-                            extensible SDK in an environment set up to run
-                            BitBake, you did not use a new shell.
-                        </note>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Build the Clean Image:</emphasis>
-                        The final step in preparing to work on the kernel is to
-                        build an initial image using
-                        <filename>devtool</filename> in the new terminal you
-                        just set up and initialized for SDK work:
-                        <literallayout class='monospaced'>
-     $ devtool build-image
-     Parsing recipes: 100% |##########################################| Time: 0:00:05
-     Parsing of 830 .bb files complete (0 cached, 830 parsed). 1299 targets, 47 skipped, 0 masked, 0 errors.
-     WARNING: No packages to add, building image core-image-minimal unmodified
-     Loading cache: 100% |############################################| Time: 0:00:00
-     Loaded 1299 entries from dependency cache.
-     NOTE: Resolving any missing task queue dependencies
-     Initializing tasks: 100% |#######################################| Time: 0:00:07
-     Checking sstate mirror object availability: 100% |###############| Time: 0:00:00
-     NOTE: Executing SetScene Tasks
-     NOTE: Executing RunQueue Tasks
-     NOTE: Tasks Summary: Attempted 2866 tasks of which 2604 didn't need to be rerun and all succeeded.
-     NOTE: Successfully built core-image-minimal. You can find output files in /home/scottrif/poky_sdk/tmp/deploy/images/qemux86
-                        </literallayout>
-                        If you were building for actual hardware and not for
-                        emulation, you could flash the image to a USB stick
-                        on <filename>/dev/sdd</filename> and boot your device.
-                        For an example that uses a Minnowboard, see the
-                        <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/KernelDevelopmentWithEsdk'>TipsAndTricks/KernelDevelopmentWithEsdk</ulink>
-                        Wiki page.
-                        </para></listitem>
-                </orderedlist>
-            </para>
-
-            <para>
-                At this point you have set up to start making modifications to
-                the kernel by using the extensible SDK.
-                For a continued example, see the
-                "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-                section.
-            </para>
-        </section>
-
-        <section id='getting-ready-for-traditional-kernel-development'>
-            <title>Getting Ready for Traditional Kernel Development</title>
-
-            <para>
-                Getting ready for traditional kernel development using the Yocto
-                Project involves many of the same steps as described in the
-                previous section.
-                However, you need to establish a local copy of the kernel source
-                since you will be editing these files.
-            </para>
-
-            <para>
-                Follow these steps to prepare to update the kernel image using
-                traditional kernel development flow with the Yocto Project.
-                Completing this procedure leaves you ready to make modifications
-                to the kernel source as described in the
-                "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-                section:
-                <orderedlist>
-                    <listitem><para>
-                        <emphasis>Initialize the BitBake Environment:</emphasis>
-                        Before you can do anything using BitBake, you need to
-                        initialize the BitBake build environment by sourcing the
-                        build environment script
-                        (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>).
-                        Also, for this example, be sure that the local branch
-                        you have checked out for <filename>poky</filename> is
-                        the Yocto Project &DISTRO_NAME; branch.
-                        If you need to checkout out the &DISTRO_NAME; branch,
-                        see the
-                        "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking out by Branch in Poky</ulink>"
-                        section in the Yocto Project Development Tasks Manual.
-                        <literallayout class='monospaced'>
-     $ cd ~/poky
-     $ git branch
-     master
-     * &DISTRO_NAME;
-     $ source oe-init-build-env
-                        </literallayout>
-                        <note>
-                            The previous commands assume the
-                            <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
-                            (i.e. <filename>poky</filename>) have been cloned
-                            using Git and the local repository is named
-                            "poky".
-                        </note>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Prepare Your <filename>local.conf</filename>
-                        File:</emphasis>
-                        By default, the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
-                        variable is set to "qemux86-64", which is fine if you are
-                        building for the QEMU emulator in 64-bit mode.
-                        However, if you are not, you need to set the
-                        <filename>MACHINE</filename> variable appropriately in
-                        your <filename>conf/local.conf</filename> file found
-                        in the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
-                        (i.e. <filename>~/poky/build</filename> in this
-                        example).</para>
-
-                        <para>Also, since you are preparing to work on the
-                        kernel image, you need to set the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
-                        variable to include kernel modules.</para>
-
-                        <para>In this example we wish to build for qemux86 so
-                        we must set the <filename>MACHINE</filename> variable
-                        to "qemux86" and also add the "kernel-modules". As described
-                        we do this by appending to <filename>conf/local.conf</filename>:
-                        <literallayout class='monospaced'>
-     MACHINE = "qemux86"
-     MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Create a Layer for Patches:</emphasis>
-                        You need to create a layer to hold patches created
-                        for the kernel image.
-                        You can use the
-                        <filename>bitbake-layers create-layer</filename>
-                        command as follows:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake-layers create-layer ../../meta-mylayer
-     NOTE: Starting bitbake server...
-     Add your new layer with 'bitbake-layers add-layer ../../meta-mylayer'
-                        </literallayout>
-                        <note>
-                            For background information on working with
-                            common and BSP layers, see the
-                            "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
-                            section in the Yocto Project Development Tasks
-                            Manual and the
-                            "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
-                            section in the Yocto Project Board Support (BSP)
-                            Developer's Guide, respectively.
-                            For information on how to use the
-                            <filename>bitbake-layers create-layer</filename>
-                            command to quickly set up a layer, see the
-                            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
-                            section in the Yocto Project Development Tasks
-                            Manual.
-                        </note>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Inform the BitBake Build Environment About
-                        Your Layer:</emphasis>
-                        As directed when you created your layer, you need to add
-                        the layer to the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
-                        variable in the <filename>bblayers.conf</filename> file
-                        as follows:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake-layers add-layer ../../meta-mylayer
-     NOTE: Starting bitbake server ...
-     $
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Create a Local Copy of the Kernel Git
-                        Repository:</emphasis>
-                        You can find Git repositories of supported Yocto Project
-                        kernels organized under "Yocto Linux Kernel" in the
-                        Yocto Project Source Repositories at
-                        <ulink url='&YOCTO_GIT_URL;'></ulink>.
-                        </para>
-
-                        <para>
-                        For simplicity, it is recommended that you create your
-                        copy of the kernel Git repository outside of the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>,
-                        which is usually named <filename>poky</filename>.
-                        Also, be sure you are in the
-                        <filename>standard/base</filename> branch.
-                        </para>
-
-                        <para>
-                        The following commands show how to create a local copy
-                        of the <filename>linux-yocto-4.12</filename> kernel and
-                        be in the <filename>standard/base</filename> branch.
-                        <note>
-                            The <filename>linux-yocto-4.12</filename> kernel
-                            can be used with the Yocto Project 2.4 release
-                            and forward.
-                            You cannot use the
-                            <filename>linux-yocto-4.12</filename> kernel with
-                            releases prior to Yocto Project 2.4:
-                        </note>
-                        <literallayout class='monospaced'>
-     $ cd ~
-     $ git clone git://git.yoctoproject.org/linux-yocto-4.12 --branch standard/base
-     Cloning into 'linux-yocto-4.12'...
-     remote: Counting objects: 6097195, done.
-     remote: Compressing objects: 100% (901026/901026), done.
-     remote: Total 6097195 (delta 5152604), reused 6096847 (delta 5152256)
-     Receiving objects: 100% (6097195/6097195), 1.24 GiB | 7.81 MiB/s, done.
-     Resolving deltas: 100% (5152604/5152604), done.
-     Checking connectivity... done.
-     Checking out files: 100% (59846/59846), done.
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Create a Local Copy of the Kernel Cache Git
-                        Repository:</emphasis>
-                        For simplicity, it is recommended that you create your
-                        copy of the kernel cache Git repository outside of the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>,
-                        which is usually named <filename>poky</filename>.
-                        Also, for this example, be sure you are in the
-                        <filename>yocto-4.12</filename> branch.
-                        </para>
-
-                        <para>
-                        The following commands show how to create a local copy
-                        of the <filename>yocto-kernel-cache</filename> and
-                        be in the <filename>yocto-4.12</filename> branch:
-                        <literallayout class='monospaced'>
-     $ cd ~
-     $ git clone git://git.yoctoproject.org/yocto-kernel-cache --branch yocto-4.12
-     Cloning into 'yocto-kernel-cache'...
-     remote: Counting objects: 22639, done.
-     remote: Compressing objects: 100% (9761/9761), done.
-     remote: Total 22639 (delta 12400), reused 22586 (delta 12347)
-     Receiving objects: 100% (22639/22639), 22.34 MiB | 6.27 MiB/s, done.
-     Resolving deltas: 100% (12400/12400), done.
-     Checking connectivity... done.
-                        </literallayout>
-                        </para></listitem>
-                </orderedlist>
-            </para>
-
-            <para>
-                At this point, you are ready to start making modifications to
-                the kernel using traditional kernel development steps.
-                For a continued example, see the
-                "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-                section.
-            </para>
-        </section>
-    </section>
-
-    <section id='creating-and-preparing-a-layer'>
-        <title>Creating and Preparing a Layer</title>
-
-        <para>
-            If you are going to be modifying kernel recipes, it is recommended
-            that you create and prepare your own layer in which to do your
-            work.
-            Your layer contains its own
-            <ulink url='&YOCTO_DOCS_REF_URL;#bitbake-term'>BitBake</ulink>
-            append files (<filename>.bbappend</filename>) and provides a
-            convenient mechanism to create your own recipe files
-            (<filename>.bb</filename>) as well as store and use kernel
-            patch files.
-            For background information on working with layers, see the
-            "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
-            section in the Yocto Project Development Tasks Manual.
-            <note><title>Tip</title>
-                The Yocto Project comes with many tools that simplify
-                tasks you need to perform.
-                One such tool is the
-                <filename>bitbake-layers create-layer</filename>
-                command, which simplifies creating a new layer.
-                See the
-                "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
-                section in the Yocto Project Development Tasks Manual for
-                information on how to use this script to quick set up a
-                new layer.
-            </note>
-        </para>
-
-        <para>
-            To better understand the layer you create for kernel development,
-            the following section describes how to create a layer
-            without the aid of tools.
-            These steps assume creation of a layer named
-            <filename>mylayer</filename> in your home directory:
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Create Structure</emphasis>:
-                    Create the layer's structure:
-                    <literallayout class='monospaced'>
-     $ cd $HOME
-     $ mkdir meta-mylayer
-     $ mkdir meta-mylayer/conf
-     $ mkdir meta-mylayer/recipes-kernel
-     $ mkdir meta-mylayer/recipes-kernel/linux
-     $ mkdir meta-mylayer/recipes-kernel/linux/linux-yocto
-                    </literallayout>
-                    The <filename>conf</filename> directory holds your
-                    configuration files, while the
-                    <filename>recipes-kernel</filename> directory holds your
-                    append file and eventual patch files.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Create the Layer Configuration File</emphasis>:
-                    Move to the <filename>meta-mylayer/conf</filename>
-                    directory and create the <filename>layer.conf</filename>
-                    file as follows:
-                    <literallayout class='monospaced'>
-     # We have a conf and classes directory, add to BBPATH
-     BBPATH .= ":${LAYERDIR}"
-
-     # We have recipes-* directories, add to BBFILES
-     BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
-                 ${LAYERDIR}/recipes-*/*/*.bbappend"
-
-     BBFILE_COLLECTIONS += "mylayer"
-     BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
-     BBFILE_PRIORITY_mylayer = "5"
-                    </literallayout>
-                    Notice <filename>mylayer</filename> as part of the last
-                    three statements.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Create the Kernel Recipe Append File</emphasis>:
-                    Move to the
-                    <filename>meta-mylayer/recipes-kernel/linux</filename>
-                    directory and create the kernel's append file.
-                    This example uses the
-                    <filename>linux-yocto-4.12</filename> kernel.
-                    Thus, the name of the append file is
-                    <filename>linux-yocto_4.12.bbappend</filename>:
-                    <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-     SRC_URI_append = " file://<replaceable>patch-file-one</replaceable>"
-     SRC_URI_append = " file://<replaceable>patch-file-two</replaceable>"
-     SRC_URI_append = " file://<replaceable>patch-file-three</replaceable>"
-                    </literallayout>
-                    The
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                    and
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                    statements enable the OpenEmbedded build system to find
-                    patch files.
-                    For more information on using append files, see the
-                    "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files in Your Layer</ulink>"
-                    section in the Yocto Project Development Tasks Manual.
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-
-    <section id='modifying-an-existing-recipe'>
-        <title>Modifying an Existing Recipe</title>
-
-        <para>
-            In many cases, you can customize an existing linux-yocto recipe to
-            meet the needs of your project.
-            Each release of the Yocto Project provides a few Linux
-            kernel recipes from which you can choose.
-            These are located in the
-            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
-            in <filename>meta/recipes-kernel/linux</filename>.
-        </para>
-
-        <para>
-            Modifying an existing recipe can consist of the following:
-            <itemizedlist>
-                <listitem><para>Creating the append file</para></listitem>
-                <listitem><para>Applying patches</para></listitem>
-                <listitem><para>Changing the configuration</para></listitem>
-            </itemizedlist>
-        </para>
-
-        <para>
-            Before modifying an existing recipe, be sure that you have created
-            a minimal, custom layer from which you can work.
-            See the
-            "<link linkend='creating-and-preparing-a-layer'>Creating and Preparing a Layer</link>"
-            section for information.
-        </para>
-
-        <section id='creating-the-append-file'>
-            <title>Creating the Append File</title>
-
-            <para>
-                You create this file in your custom layer.
-                You also name it accordingly based on the linux-yocto recipe
-                you are using.
-                For example, if you are modifying the
-                <filename>meta/recipes-kernel/linux/linux-yocto_4.12.bb</filename>
-                recipe, the append file will typically be located as follows
-                within your custom layer:
-                <literallayout class='monospaced'>
-     <replaceable>your-layer</replaceable>/recipes-kernel/linux/linux-yocto_4.12.bbappend
-                </literallayout>
-                The append file should initially extend the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
-                search path by prepending the directory that contains your
-                files to the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                variable as follows:
-                <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-                </literallayout>
-                The path <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-THISDIR'><filename>THISDIR</filename></ulink><filename>}/${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
-                expands to "linux-yocto" in the current directory for this
-                example.
-                If you add any new files that modify the kernel recipe and you
-                have extended <filename>FILESPATH</filename> as
-                described above, you must place the files in your layer in the
-                following area:
-                <literallayout class='monospaced'>
-     <replaceable>your-layer</replaceable>/recipes-kernel/linux/linux-yocto/
-                </literallayout>
-                <note>If you are working on a new machine Board Support Package
-                    (BSP), be sure to refer to the
-                    <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
-                </note>
-            </para>
-
-            <para>
-                As an example, consider the following append file
-                used by the BSPs in <filename>meta-yocto-bsp</filename>:
-                <literallayout class='monospaced'>
-     meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.12.bbappend
-                </literallayout>
-                The following listing shows the file.
-                Be aware that the actual commit ID strings in this
-                example listing might be different than the actual strings
-                in the file from the <filename>meta-yocto-bsp</filename>
-                layer upstream.
-                <literallayout class='monospaced'>
-     KBRANCH_genericx86  = "standard/base"
-     KBRANCH_genericx86-64  = "standard/base"
-
-     KMACHINE_genericx86 ?= "common-pc"
-     KMACHINE_genericx86-64 ?= "common-pc-64"
-     KBRANCH_edgerouter = "standard/edgerouter"
-     KBRANCH_beaglebone = "standard/beaglebone"
-
-     SRCREV_machine_genericx86    ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
-     SRCREV_machine_genericx86-64 ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
-     SRCREV_machine_edgerouter ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
-     SRCREV_machine_beaglebone ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
-
-
-     COMPATIBLE_MACHINE_genericx86 = "genericx86"
-     COMPATIBLE_MACHINE_genericx86-64 = "genericx86-64"
-     COMPATIBLE_MACHINE_edgerouter = "edgerouter"
-     COMPATIBLE_MACHINE_beaglebone = "beaglebone"
-
-     LINUX_VERSION_genericx86 = "4.12.7"
-     LINUX_VERSION_genericx86-64 = "4.12.7"
-     LINUX_VERSION_edgerouter = "4.12.10"
-     LINUX_VERSION_beaglebone = "4.12.10"
-                </literallayout>
-                This append file contains statements used to support
-                several BSPs that ship with the Yocto Project.
-                The file defines machines using the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>
-                variable and uses the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>
-                variable to ensure the machine name used by the OpenEmbedded
-                build system maps to the machine name used by the Linux Yocto
-                kernel.
-                The file also uses the optional
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink>
-                variable to ensure the build process uses the
-                appropriate kernel branch.
-            </para>
-
-            <para>
-                Although this particular example does not use it, the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
-                variable could be used to enable features specific to
-                the kernel.
-                The append file points to specific commits in the
-                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
-                Git repository and the <filename>meta</filename> Git repository
-                branches to identify the exact kernel needed to build the
-                BSP.
-            </para>
-
-            <para>
-                One thing missing in this particular BSP, which you will
-                typically need when developing a BSP, is the kernel
-                configuration file (<filename>.config</filename>) for your BSP.
-                When developing a BSP, you probably have a kernel configuration
-                file or a set of kernel configuration files that, when taken
-                together, define the kernel configuration for your BSP.
-                You can accomplish this definition by putting the configurations
-                in a file or a set of files inside a directory located at the
-                same level as your kernel's append file and having the same
-                name as the kernel's main recipe file.
-                With all these conditions met, simply reference those files in
-                the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                statement in the append file.
-            </para>
-
-            <para>
-                For example, suppose you had some configuration options
-                in a file called <filename>network_configs.cfg</filename>.
-                You can place that file inside a directory named
-                <filename>linux-yocto</filename> and then add
-                a <filename>SRC_URI</filename> statement such as the
-                following to the append file.
-                When the OpenEmbedded build system builds the kernel, the
-                configuration options are picked up and applied.
-                <literallayout class='monospaced'>
-     SRC_URI += "file://network_configs.cfg"
-                </literallayout>
-            </para>
-
-            <para>
-                To group related configurations into multiple files, you
-                perform a similar procedure.
-                Here is an example that groups separate configurations
-                specifically for Ethernet and graphics into their own
-                files and adds the configurations by using a
-                <filename>SRC_URI</filename> statement like the following
-                in your append file:
-                <literallayout class='monospaced'>
-     SRC_URI += "file://myconfig.cfg \
-                 file://eth.cfg \
-                 file://gfx.cfg"
-                </literallayout>
-            </para>
-
-            <para>
-                Another variable you can use in your kernel recipe append
-                file is the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                variable.
-                When you use this statement, you are extending the locations
-                used by the OpenEmbedded system to look for files and
-                patches as the recipe is processed.
-            </para>
-
-            <note>
-                <para>
-                    Other methods exist to accomplish grouping and defining
-                    configuration options.
-                    For example, if you are working with a local clone of the
-                    kernel repository, you could checkout the kernel's
-                    <filename>meta</filename> branch, make your changes, and
-                    then push the changes to the local bare clone of the
-                    kernel.
-                    The result is that you directly add configuration options
-                    to the <filename>meta</filename> branch for your BSP.
-                    The configuration options will likely end up in that
-                    location anyway if the BSP gets added to the Yocto Project.
-                </para>
-
-                <para>
-                    In general, however, the Yocto Project maintainers take
-                    care of moving the <filename>SRC_URI</filename>-specified
-                    configuration options to the kernel's
-                    <filename>meta</filename> branch.
-                    Not only is it easier for BSP developers to not have to
-                    worry about putting those configurations in the branch,
-                    but having the maintainers do it allows them to apply
-                    'global' knowledge about the kinds of common configuration
-                    options multiple BSPs in the tree are typically using.
-                    This allows for promotion of common configurations into
-                    common features.
-                </para>
-            </note>
-        </section>
-
-        <section id='applying-patches'>
-            <title>Applying Patches</title>
-
-            <para>
-                If you have a single patch or a small series of patches
-                that you want to apply to the Linux kernel source, you
-                can do so just as you would with any other recipe.
-                You first copy the patches to the path added to
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                in your <filename>.bbappend</filename> file as described in
-                the previous section, and then reference them in
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                statements.
-            </para>
-
-            <para>
-                For example, you can apply a three-patch series by adding the
-                following lines to your linux-yocto
-                <filename>.bbappend</filename> file in your layer:
-                <literallayout class='monospaced'>
-     SRC_URI += "file://0001-first-change.patch"
-     SRC_URI += "file://0002-second-change.patch"
-     SRC_URI += "file://0003-third-change.patch"
-                </literallayout>
-                The next time you run BitBake to build the Linux kernel,
-                BitBake detects the change in the recipe and fetches and
-                applies the patches before building the kernel.
-            </para>
-
-            <para>
-                For a detailed example showing how to patch the kernel using
-                <filename>devtool</filename>, see the
-                "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-                and
-                "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-                sections.
-            </para>
-        </section>
-
-        <section id='changing-the-configuration'>
-            <title>Changing the Configuration</title>
-
-            <para>
-                You can make wholesale or incremental changes to the final
-                <filename>.config</filename> file used for the eventual
-                Linux kernel configuration by including a
-                <filename>defconfig</filename> file and by specifying
-                configuration fragments in the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                to be applied to that file.
-            </para>
-
-            <para>
-                If you have a complete, working Linux kernel
-                <filename>.config</filename>
-                file you want to use for the configuration, as before, copy
-                that file to the appropriate <filename>${PN}</filename>
-                directory in your layer's
-                <filename>recipes-kernel/linux</filename> directory,
-                and rename the copied file to "defconfig".
-                Then, add the following lines to the linux-yocto
-                <filename>.bbappend</filename> file in your layer:
-                <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-     SRC_URI += "file://defconfig"
-                </literallayout>
-                The <filename>SRC_URI</filename> tells the build system how to
-                search for the file, while the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                extends the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
-                variable (search directories) to include the
-                <filename>${PN}</filename> directory you created to hold the
-                configuration changes.
-            </para>
-
-            <note>
-                The build system applies the configurations from the
-                <filename>defconfig</filename> file before applying any
-                subsequent configuration fragments.
-                The final kernel configuration is a combination of the
-                configurations in the <filename>defconfig</filename> file and
-                any configuration fragments you provide.
-                You need to realize that if you have any configuration
-                fragments, the build system applies these on top of and
-                after applying the existing <filename>defconfig</filename>
-                file configurations.
-            </note>
-
-            <para>
-                Generally speaking, the preferred approach is to determine the
-                incremental change you want to make and add that as a
-                configuration fragment.
-                For example, if you want to add support for a basic serial
-                console, create a file named <filename>8250.cfg</filename> in
-                the <filename>${PN}</filename> directory with the following
-                content (without indentation):
-                <literallayout class='monospaced'>
-     CONFIG_SERIAL_8250=y
-     CONFIG_SERIAL_8250_CONSOLE=y
-     CONFIG_SERIAL_8250_PCI=y
-     CONFIG_SERIAL_8250_NR_UARTS=4
-     CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-     CONFIG_SERIAL_CORE=y
-     CONFIG_SERIAL_CORE_CONSOLE=y
-                </literallayout>
-                Next, include this configuration fragment and extend the
-                <filename>FILESPATH</filename> variable in your
-                <filename>.bbappend</filename> file:
-                <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-     SRC_URI += "file://8250.cfg"
-                </literallayout>
-                The next time you run BitBake to build the Linux kernel, BitBake
-                detects the change in the recipe and fetches and applies the
-                new configuration before building the kernel.
-            </para>
-
-            <para>
-                For a detailed example showing how to configure the kernel,
-                see the
-                "<link linkend='configuring-the-kernel'>Configuring the Kernel</link>"
-                section.
-            </para>
-        </section>
-
-        <section id='using-an-in-tree-defconfig-file'>
-            <title>Using an "In-Tree"&nbsp;&nbsp;<filename>defconfig</filename> File</title>
-
-            <para>
-                It might be desirable to have kernel configuration fragment
-                support through a <filename>defconfig</filename> file that
-                is pulled from the kernel source tree for the configured
-                machine.
-                By default, the OpenEmbedded build system looks for
-                <filename>defconfig</filename> files in the layer used for
-                Metadata, which is "out-of-tree", and then configures them
-                using the following:
-                <literallayout class='monospaced'>
-     SRC_URI += "file://defconfig"
-                </literallayout>
-                If you do not want to maintain copies of
-                <filename>defconfig</filename> files in your layer but would
-                rather allow users to use the default configuration from the
-                kernel tree and still be able to add configuration fragments
-                to the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                through, for example, append files, you can direct the
-                OpenEmbedded build system to use a
-                <filename>defconfig</filename> file that is "in-tree".
-            </para>
-
-            <para>
-                To specify an "in-tree" <filename>defconfig</filename> file,
-                use the following statement form:
-                <literallayout class='monospaced'>
-     KBUILD_DEFCONFIG_<replaceable>KMACHINE</replaceable> ?= <replaceable>defconfig_file</replaceable>
-                </literallayout>
-                Here is an example that assigns the
-                <filename>KBUILD_DEFCONFIG</filename> variable based on
-                "raspberrypi2" and provides the path to the "in-tree"
-                <filename>defconfig</filename> file
-                to be used for a Raspberry Pi 2,
-                which is based on the Broadcom 2708/2709 chipset:
-                <literallayout class='monospaced'>
-     KBUILD_DEFCONFIG_raspberrypi2 ?= "bcm2709_defconfig"
-                </literallayout>
-            </para>
-
-            <para>
-                Aside from modifying your kernel recipe and providing your own
-                <filename>defconfig</filename> file, you need to be sure no
-                files or statements set <filename>SRC_URI</filename> to use a
-                <filename>defconfig</filename> other than your "in-tree"
-                file (e.g. a kernel's
-                <filename>linux-</filename><replaceable>machine</replaceable><filename>.inc</filename>
-                file).
-                In other words, if the build system detects a statement
-                that identifies an "out-of-tree"
-                <filename>defconfig</filename> file, that statement
-                will override your
-                <filename>KBUILD_DEFCONFIG</filename> variable.
-            </para>
-
-            <para>
-                See the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KBUILD_DEFCONFIG'><filename>KBUILD_DEFCONFIG</filename></ulink>
-                variable description for more information.
-            </para>
-        </section>
-    </section>
-
-    <section id="using-devtool-to-patch-the-kernel">
-        <title>Using <filename>devtool</filename> to Patch the Kernel</title>
-
-        <para>
-            The steps in this procedure show you how you can patch the
-            kernel using the extensible SDK and <filename>devtool</filename>.
-            <note>
-                Before attempting this procedure, be sure you have performed
-                the steps to get ready for updating the kernel as described
-                in the
-                "<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using <filename>devtool</filename></link>"
-                section.
-            </note>
-        </para>
-
-        <para>
-            Patching the kernel involves changing or adding configurations
-            to an existing kernel, changing or adding recipes to the kernel
-            that are needed to support specific hardware features, or even
-            altering the source code itself.
-        </para>
-
-        <para>
-            This example creates a simple patch by adding some QEMU emulator
-            console output at boot time through <filename>printk</filename>
-            statements in the kernel's <filename>calibrate.c</filename> source
-            code file.
-            Applying the patch and booting the modified image causes the added
-            messages to appear on the emulator's console.
-            The example is a continuation of the setup procedure found in
-            the
-            "<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using <filename>devtool</filename></link>"
-            Section.
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Check Out the Kernel Source Files:</emphasis>
-                    First you must use <filename>devtool</filename> to checkout
-                    the kernel source code in its workspace.
-                    Be sure you are in the terminal set up to do work
-                    with the extensible SDK.
-                    <note>
-                        See this
-                        <link linkend='setting-up-the-esdk-terminal'>step</link>
-                        in the
-                        "<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using <filename>devtool</filename></link>"
-                        section for more information.
-                    </note>
-                    Use the following <filename>devtool</filename> command
-                    to check out the code:
-                    <literallayout class='monospaced'>
-     $ devtool modify linux-yocto
-                    </literallayout>
-                    <note>
-                        During the checkout operation, a bug exists that could
-                        cause errors such as the following to appear:
-                        <literallayout class='monospaced'>
-     ERROR: Taskhash mismatch 2c793438c2d9f8c3681fd5f7bc819efa versus
-            be3a89ce7c47178880ba7bf6293d7404 for
-            /path/to/esdk/layers/poky/meta/recipes-kernel/linux/linux-yocto_4.10.bb.do_unpack
-                        </literallayout>
-                        You can safely ignore these messages.
-                        The source code is correctly checked out.
-                    </note>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Edit the Source Files</emphasis>
-                    Follow these steps to make some simple changes to the source
-                    files:
-                    <orderedlist>
-                        <listitem><para>
-                            <emphasis>Change the working directory</emphasis>:
-                            In the previous step, the output noted where you can find
-                            the source files (e.g.
-                            <filename>~/poky_sdk/workspace/sources/linux-yocto</filename>).
-                            Change to where the kernel source code is before making
-                            your edits to the <filename>calibrate.c</filename> file:
-                            <literallayout class='monospaced'>
-     $ cd ~/poky_sdk/workspace/sources/linux-yocto
-                            </literallayout>
-                            </para></listitem>
-                        <listitem><para>
-                            <emphasis>Edit the source file</emphasis>:
-                            Edit the <filename>init/calibrate.c</filename> file to have
-                            the following changes:
-                            <literallayout class='monospaced'>
-     void calibrate_delay(void)
-     {
-         unsigned long lpj;
-         static bool printed;
-         int this_cpu = smp_processor_id();
-
-         printk("*************************************\n");
-         printk("*                                   *\n");
-         printk("*        HELLO YOCTO KERNEL         *\n");
-         printk("*                                   *\n");
-         printk("*************************************\n");
-
-     	if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
-               .
-               .
-               .
-                            </literallayout>
-                            </para></listitem>
-                    </orderedlist>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Build the Updated Kernel Source:</emphasis>
-                    To build the updated kernel source, use
-                    <filename>devtool</filename>:
-                    <literallayout class='monospaced'>
-     $ devtool build linux-yocto
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Create the Image With the New Kernel:</emphasis>
-                    Use the <filename>devtool build-image</filename> command
-                    to create a new image that has the new kernel.
-                    <note>
-                        If the image you originally created resulted in a Wic
-                        file, you can use an alternate method to create the new
-                        image with the updated kernel.
-                        For an example, see the steps in the
-                        <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/KernelDevelopmentWithEsdk'>TipsAndTricks/KernelDevelopmentWithEsdk</ulink>
-                        Wiki Page.
-                    </note>
-                    <literallayout class='monospaced'>
-     $ cd ~
-     $ devtool build-image core-image-minimal
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Test the New Image:</emphasis>
-                    For this example, you can run the new image using QEMU
-                    to verify your changes:
-                    <orderedlist>
-                        <listitem><para>
-                            <emphasis>Boot the image</emphasis>:
-                            Boot the modified image in the QEMU emulator
-                            using this command:
-                            <literallayout class='monospaced'>
-     $ runqemu qemux86
-                            </literallayout>
-                            </para></listitem>
-                        <listitem><para>
-                            <emphasis>Verify the changes</emphasis>:
-                            Log into the machine using <filename>root</filename>
-                            with no password and then use the following shell
-                            command to scroll through the console's boot output.
-                            <literallayout class='monospaced'>
-     # dmesg | less
-                            </literallayout>
-                            You should see the results of your
-                            <filename>printk</filename> statements
-                            as part of the output when you scroll down the
-                            console window.
-                            </para></listitem>
-                    </orderedlist>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Stage and commit your changes</emphasis>:
-                    Within your eSDK terminal, change your working directory to
-                    where you modified the <filename>calibrate.c</filename>
-                    file and use these Git commands to stage and commit your
-                    changes:
-                    <literallayout class='monospaced'>
-     $ cd ~/poky_sdk/workspace/sources/linux-yocto
-     $ git status
-     $ git add init/calibrate.c
-     $ git commit -m "calibrate: Add printk example"
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Export the Patches and Create an Append File:</emphasis>
-                    To export your commits as patches and create a
-                    <filename>.bbappend</filename> file, use the following
-                    command in the terminal used to work with the extensible
-                    SDK.
-                    This example uses the previously established layer named
-                    <filename>meta-mylayer</filename>.
-                    <note>
-                        See Step 3 of the
-                        "<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using devtool</link>"
-                        section for information on setting up this layer.
-                    </note>
-                    <literallayout class='monospaced'>
-     $ devtool finish linux-yocto ~/meta-mylayer
-                    </literallayout>
-                    Once the command finishes, the patches and the
-                    <filename>.bbappend</filename> file are located in the
-                    <filename>~/meta-mylayer/recipes-kernel/linux</filename>
-                    directory.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Build the Image With Your Modified Kernel:</emphasis>
-                    You can now build an image that includes your kernel
-                    patches.
-                    Execute the following command from your
-                    <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
-                    in the terminal set up to run BitBake:
-                    <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake core-image-minimal
-                    </literallayout>
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-
-    <section id="using-traditional-kernel-development-to-patch-the-kernel">
-        <title>Using Traditional Kernel Development to Patch the Kernel</title>
-
-        <para>
-            The steps in this procedure show you how you can patch the
-            kernel using traditional kernel development (i.e. not using
-            <filename>devtool</filename> and the extensible SDK as
-            described in the
-            "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-            section).
-            <note>
-                Before attempting this procedure, be sure you have performed
-                the steps to get ready for updating the kernel as described
-                in the
-                "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
-                section.
-            </note>
-        </para>
-
-        <para>
-            Patching the kernel involves changing or adding configurations
-            to an existing kernel, changing or adding recipes to the kernel
-            that are needed to support specific hardware features, or even
-            altering the source code itself.
-        </para>
-
-        <para>
-            The example in this section creates a simple patch by adding some
-            QEMU emulator console output at boot time through
-            <filename>printk</filename> statements in the kernel's
-            <filename>calibrate.c</filename> source code file.
-            Applying the patch and booting the modified image causes the added
-            messages to appear on the emulator's console.
-            The example is a continuation of the setup procedure found in
-            the
-            "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
-            Section.
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Edit the Source Files</emphasis>
-                    Prior to this step, you should have used Git to create a
-                    local copy of the repository for your kernel.
-                    Assuming you created the repository as directed in the
-                    "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
-                    section, use the following commands to edit the
-                    <filename>calibrate.c</filename> file:
-                    <orderedlist>
-                        <listitem><para>
-                            <emphasis>Change the working directory</emphasis>:
-                            You need to locate the source files in the
-                            local copy of the kernel Git repository:
-                            Change to where the kernel source code is before making
-                            your edits to the <filename>calibrate.c</filename> file:
-                            <literallayout class='monospaced'>
-     $ cd ~/linux-yocto-4.12/init
-                            </literallayout>
-                            </para></listitem>
-                        <listitem><para>
-                            <emphasis>Edit the source file</emphasis>:
-                            Edit the <filename>calibrate.c</filename> file to have
-                            the following changes:
-                            <literallayout class='monospaced'>
-     void calibrate_delay(void)
-     {
-         unsigned long lpj;
-         static bool printed;
-         int this_cpu = smp_processor_id();
-
-         printk("*************************************\n");
-         printk("*                                   *\n");
-         printk("*        HELLO YOCTO KERNEL         *\n");
-         printk("*                                   *\n");
-         printk("*************************************\n");
-
-     	if (per_cpu(cpu_loops_per_jiffy, this_cpu)) {
-               .
-               .
-               .
-                            </literallayout>
-                            </para></listitem>
-                    </orderedlist>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Stage and Commit Your Changes:</emphasis>
-                    Use standard Git commands to stage and commit the changes
-                    you just made:
-                    <literallayout class='monospaced'>
-     $ git add calibrate.c
-     $ git commit -m "calibrate.c - Added some printk statements"
-                    </literallayout>
-                    If you do not stage and commit your changes, the OpenEmbedded
-                    Build System will not pick up the changes.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Update Your <filename>local.conf</filename> File
-                    to Point to Your Source Files:</emphasis>
-                    In addition to your <filename>local.conf</filename> file
-                    specifying to use "kernel-modules" and the "qemux86"
-                    machine, it must also point to the updated kernel source
-                    files.
-                    Add
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                    and
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
-                    statements similar to the following to your
-                    <filename>local.conf</filename>:
-                    <literallayout class='monospaced'>
-     $ cd ~/poky/build/conf
-                    </literallayout>
-                    Add the following to the <filename>local.conf</filename>:
-                    <literallayout class='monospaced'>
-     SRC_URI_pn-linux-yocto = "git:///<replaceable>path-to</replaceable>/linux-yocto-4.12;protocol=file;name=machine;branch=standard/base; \
-                               git:///<replaceable>path-to</replaceable>/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-4.12;destsuffix=${KMETA}"
-     SRCREV_meta_qemux86 = "${AUTOREV}"
-     SRCREV_machine_qemux86 = "${AUTOREV}"
-                    </literallayout>
-                    <note>
-                        Be sure to replace
-                        <replaceable>path-to</replaceable> with the pathname
-                        to your local Git repositories.
-                        Also, you must be sure to specify the correct branch
-                        and machine types.
-                        For this example, the branch is
-                        <filename>standard/base</filename> and the machine is
-                        "qemux86".
-                    </note>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Build the Image:</emphasis>
-                    With the source modified, your changes staged and
-                    committed, and the <filename>local.conf</filename> file
-                    pointing to the kernel files, you can now use BitBake to
-                    build the image:
-                    <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake core-image-minimal
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Boot the image</emphasis>:
-                    Boot the modified image in the QEMU emulator
-                    using this command.
-                    When prompted to login to the QEMU console, use "root"
-                    with no password:
-                    <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ runqemu qemux86
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Look for Your Changes:</emphasis>
-                    As QEMU booted, you might have seen your changes rapidly
-                    scroll by.
-                    If not, use these commands to see your changes:
-                    <literallayout class='monospaced'>
-     # dmesg | less
-                    </literallayout>
-                    You should see the results of your
-                    <filename>printk</filename> statements
-                    as part of the output when you scroll down the
-                    console window.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Generate the Patch File:</emphasis>
-                    Once you are sure that your patch works correctly, you
-                    can generate a <filename>*.patch</filename> file in the
-                    kernel source repository:
-                    <literallayout class='monospaced'>
-     $ cd ~/linux-yocto-4.12/init
-     $ git format-patch -1
-     0001-calibrate.c-Added-some-printk-statements.patch
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Move the Patch File to Your Layer:</emphasis>
-                    In order for subsequent builds to pick up patches, you
-                    need to move the patch file you created in the previous
-                    step to your layer <filename>meta-mylayer</filename>.
-                    For this example, the layer created earlier is located
-                    in your home directory as <filename>meta-mylayer</filename>.
-                    When the layer was created using the
-                    <filename>yocto-create</filename> script, no additional
-                    hierarchy was created to support patches.
-                    Before moving the patch file, you need to add additional
-                    structure to your layer using the following commands:
-                    <literallayout class='monospaced'>
-     $ cd ~/meta-mylayer
-     $ mkdir recipes-kernel
-     $ mkdir recipes-kernel/linux
-     $ mkdir recipes-kernel/linux/linux-yocto
-                    </literallayout>
-                    Once you have created this hierarchy in your layer, you can
-                    move the patch file using the following command:
-                    <literallayout class='monospaced'>
-     $ mv ~/linux-yocto-4.12/init/0001-calibrate.c-Added-some-printk-statements.patch ~/meta-mylayer/recipes-kernel/linux/linux-yocto
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Create the Append File:</emphasis>
-                    Finally, you need to create the
-                    <filename>linux-yocto_4.12.bbappend</filename> file and
-                    insert statements that allow the OpenEmbedded build
-                    system to find the patch.
-                    The append file needs to be in your layer's
-                    <filename>recipes-kernel/linux</filename>
-                    directory and it must be named
-                    <filename>linux-yocto_4.12.bbappend</filename> and have
-                    the following contents:
-                    <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
-     SRC_URI_append = " file://0001-calibrate.c-Added-some-printk-statements.patch"
-                    </literallayout>
-                    The
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                    and
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                    statements enable the OpenEmbedded build system to find
-                    the patch file.</para>
-
-                    <para>For more information on append files and patches,
-                    see the
-                    "<link linkend='creating-the-append-file'>Creating the Append File</link>"
-                    and
-                    "<link linkend='applying-patches'>Applying Patches</link>"
-                    sections.
-                    You can also see the
-                    "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files in Your Layer"</ulink>"
-                    section in the Yocto Project Development Tasks Manual.
-                    <note>
-                        To build <filename>core-image-minimal</filename>
-                        again and see the effects of your patch, you can
-                        essentially eliminate the temporary source files
-                        saved in <filename>poky/build/tmp/work/...</filename>
-                        and residual effects of the build by entering the
-                        following sequence of commands:
-                        <literallayout class='monospaced'>
-     $ cd ~/poky/build
-     $ bitbake -c cleanall yocto-linux
-     $ bitbake core-image-minimal -c cleanall
-     $ bitbake core-image-minimal
-     $ runqemu qemux86
-                        </literallayout>
-                    </note>
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-
-    <section id='configuring-the-kernel'>
-        <title>Configuring the Kernel</title>
-
-        <para>
-            Configuring the Yocto Project kernel consists of making sure the
-            <filename>.config</filename> file has all the right information
-            in it for the image you are building.
-            You can use the <filename>menuconfig</filename> tool and
-            configuration fragments to make sure your
-            <filename>.config</filename> file is just how you need it.
-            You can also save known configurations in a
-            <filename>defconfig</filename> file that the build system can use
-            for kernel configuration.
-        </para>
-
-        <para>
-            This section describes how to use <filename>menuconfig</filename>,
-            create and use configuration fragments, and how to interactively
-            modify your <filename>.config</filename> file to create the
-            leanest kernel configuration file possible.
-        </para>
-
-        <para>
-            For more information on kernel configuration, see the
-            "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
-            section.
-        </para>
-
-        <section id='using-menuconfig'>
-            <title>Using&nbsp;&nbsp;<filename>menuconfig</filename></title>
-
-            <para>
-                The easiest way to define kernel configurations is to set
-                them through the <filename>menuconfig</filename> tool.
-                This tool provides an interactive method with which
-                to set kernel configurations.
-                For general information on <filename>menuconfig</filename>, see
-                <ulink url='http://en.wikipedia.org/wiki/Menuconfig'></ulink>.
-            </para>
-
-            <para>
-                To use the <filename>menuconfig</filename> tool in the Yocto
-                Project development environment, you must do the following:
-                <itemizedlist>
-                    <listitem><para>
-                        Because you launch <filename>menuconfig</filename>
-                        using BitBake, you must be sure to set up your
-                        environment by running the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
-                        script found in the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>.
-                        </para></listitem>
-                    <listitem><para>
-                        You must be sure of the state of your build's
-                        configuration in the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
-                        </para></listitem>
-                    <listitem><para>
-                        Your build host must have the following two packages
-                        installed:
-                        <literallayout class='monospaced'>
-     libncurses5-dev
-     libtinfo-dev
-                        </literallayout>
-                        </para></listitem>
-                </itemizedlist>
-            </para>
-
-            <para>
-                The following commands initialize the BitBake environment,
-                run the
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-kernel_configme'><filename>do_kernel_configme</filename></ulink>
-                task, and launch <filename>menuconfig</filename>.
-                These commands assume the Source Directory's top-level folder
-                is <filename>~/poky</filename>:
-                <literallayout class='monospaced'>
-     $ cd poky
-     $ source oe-init-build-env
-     $ bitbake linux-yocto -c kernel_configme -f
-     $ bitbake linux-yocto -c menuconfig
-                </literallayout>
-                Once <filename>menuconfig</filename> comes up, its standard
-                interface allows you to interactively examine and configure
-                all the kernel configuration parameters.
-                After making your changes, simply exit the tool and save your
-                changes to create an updated version of the
-                <filename>.config</filename> configuration file.
-                <note>
-                    You can use the entire <filename>.config</filename> file
-                    as the <filename>defconfig</filename> file.
-                    For information on <filename>defconfig</filename> files,
-                    see the
-                    "<link linkend='changing-the-configuration'>Changing the Configuration</link>",
-                    "<link linkend='using-an-in-tree-defconfig-file'>Using an In-Tree <filename>defconfig</filename> File</link>,
-                    and
-                    "<link linkend='creating-a-defconfig-file'>Creating a <filename>defconfig</filename> File</link>"
-                    sections.
-                </note>
-            </para>
-
-            <para>
-                Consider an example that configures the "CONFIG_SMP" setting
-                for the <filename>linux-yocto-4.12</filename> kernel.
-                <note>
-                    The OpenEmbedded build system recognizes this kernel as
-                    <filename>linux-yocto</filename> through Metadata (e.g.
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></ulink><filename>_linux-yocto ?= "12.4%"</filename>).
-                </note>
-                Once <filename>menuconfig</filename> launches, use the
-                interface to navigate through the selections to find the
-                configuration settings in which you are interested.
-                For this example, you deselect "CONFIG_SMP" by clearing the
-                "Symmetric Multi-Processing Support" option.
-                Using the interface, you can find the option under
-                "Processor Type and Features".
-                To deselect "CONFIG_SMP", use the arrow keys to
-                highlight "Symmetric Multi-Processing Support" and enter "N"
-                to clear the asterisk.
-                When you are finished, exit out and save the change.
-            </para>
-
-            <para>
-                Saving the selections updates the <filename>.config</filename>
-                configuration file.
-                This is the file that the OpenEmbedded build system uses to
-                configure the kernel during the build.
-                You can find and examine this file in the Build Directory in
-                <filename>tmp/work/</filename>.
-                The actual <filename>.config</filename> is located in the
-                area where the specific kernel is built.
-                For example, if you were building a Linux Yocto kernel based
-                on the <filename>linux-yocto-4.12</filename> kernel and you
-                were building a QEMU image targeted for
-                <filename>x86</filename> architecture, the
-                <filename>.config</filename> file would be:
-                <literallayout class='monospaced'>
-     poky/build/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+gitAUTOINC+eda4d18...
-     ...967-r0/linux-qemux86-standard-build/.config
-                </literallayout>
-                <note>
-                    The previous example directory is artificially split and
-                    many of the characters in the actual filename are omitted
-                    in order to make it more readable.
-                    Also, depending on the kernel you are using, the exact
-                    pathname might differ.
-                </note>
-            </para>
-
-            <para>
-                Within the <filename>.config</filename> file, you can see the
-                kernel settings.
-                For example, the following entry shows that symmetric
-                multi-processor support is not set:
-                <literallayout class='monospaced'>
-     # CONFIG_SMP is not set
-                </literallayout>
-            </para>
-
-            <para>
-                A good method to isolate changed configurations is to use a
-                combination of the <filename>menuconfig</filename> tool and
-                simple shell commands.
-                Before changing configurations with
-                <filename>menuconfig</filename>, copy the existing
-                <filename>.config</filename> and rename it to something else,
-                use <filename>menuconfig</filename> to make as many changes as
-                you want and save them, then compare the renamed configuration
-                file against the newly created file.
-                You can use the resulting differences as your base to create
-                configuration fragments to permanently save in your kernel
-                layer.
-                <note>
-                    Be sure to make a copy of the <filename>.config</filename>
-                    file and do not just rename it.
-                    The build system needs an existing
-                    <filename>.config</filename> file from which to work.
-                </note>
-            </para>
-        </section>
-
-        <section id='creating-a-defconfig-file'>
-            <title>Creating a&nbsp;&nbsp;<filename>defconfig</filename> File</title>
-
-            <para>
-                A <filename>defconfig</filename> file in the context of
-                the Yocto Project is often a <filename>.config</filename>
-                file that is copied from a build or a
-                <filename>defconfig</filename> taken from the kernel tree
-                and moved into recipe space.
-                You can use a <filename>defconfig</filename> file
-                to retain a known set of kernel configurations from which the
-                OpenEmbedded build system can draw to create the final
-                <filename>.config</filename> file.
-                <note>
-                    Out-of-the-box, the Yocto Project never ships a
-                    <filename>defconfig</filename> or
-                    <filename>.config</filename> file.
-                    The OpenEmbedded build system creates the final
-                    <filename>.config</filename> file used to configure the
-                    kernel.
-                </note>
-            </para>
-
-            <para>
-                To create a <filename>defconfig</filename>, start with a
-                complete, working Linux kernel <filename>.config</filename>
-                file.
-                Copy that file to the appropriate
-                <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PN'><filename>PN</filename></ulink><filename>}</filename>
-                directory in your layer's
-                <filename>recipes-kernel/linux</filename> directory, and rename
-                the copied file to "defconfig" (e.g.
-                <filename>~/meta-mylayer/recipes-kernel/linux/linux-yocto/defconfig</filename>).
-                Then, add the following lines to the linux-yocto
-                <filename>.bbappend</filename> file in your layer:
-                <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-     SRC_URI += "file://defconfig"
-                </literallayout>
-                The
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                tells the build system how to search for the file, while the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
-                extends the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
-                variable (search directories) to include the
-                <filename>${PN}</filename> directory you created to hold the
-                configuration changes.
-                <note>
-                    The build system applies the configurations from the
-                    <filename>defconfig</filename> file before applying any
-                    subsequent configuration fragments.
-                    The final kernel configuration is a combination of the
-                    configurations in the <filename>defconfig</filename>
-                    file and any configuration fragments you provide.
-                    You need to realize that if you have any configuration
-                    fragments, the build system applies these on top of and
-                    after applying the existing defconfig file configurations.
-                </note>
-                For more information on configuring the kernel, see the
-                "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
-                section.
-            </para>
-        </section>
-
-        <section id='creating-config-fragments'>
-            <title>Creating Configuration Fragments</title>
-
-            <para>
-                Configuration fragments are simply kernel options that
-                appear in a file placed where the OpenEmbedded build system
-                can find and apply them.
-                The build system applies configuration fragments after
-                applying configurations from a <filename>defconfig</filename>
-                file.
-                Thus, the final kernel configuration is a combination of the
-                configurations in the <filename>defconfig</filename>
-                file and then any configuration fragments you provide.
-                The build system applies fragments on top of and
-                after applying the existing defconfig file configurations.
-            </para>
-
-            <para>
-                Syntactically, the configuration statement is identical to
-                what would appear in the <filename>.config</filename> file,
-                which is in the
-                <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>.
-                <note>
-                    For more information about where the
-                    <filename>.config</filename> file is located, see the
-                    example in the
-                    "<link linkend='using-menuconfig'>Using <filename>menuconfig</filename></link>"
-                    section.
-                </note>
-            </para>
-
-            <para>
-                It is simple to create a configuration fragment.
-                One method is to use shell commands.
-                For example, issuing the following from the shell creates a
-                configuration fragment file named
-                <filename>my_smp.cfg</filename> that enables multi-processor
-                support within the kernel:
-                <literallayout class='monospaced'>
-     $ echo "CONFIG_SMP=y" >> my_smp.cfg
-                </literallayout>
-                <note>
-                    All configuration fragment files must use the
-                    <filename>.cfg</filename> extension in order for the
-                    OpenEmbedded build system to recognize them as a
-                    configuration fragment.
-                </note>
-            </para>
-
-            <para>
-                Another method is to create a configuration fragment using the
-                differences between two configuration files: one previously
-                created and saved, and one freshly created using the
-                <filename>menuconfig</filename> tool.
-            </para>
-
-            <para>
-                To create a configuration fragment using this method, follow
-                these steps:
-                <orderedlist>
-                    <listitem><para>
-                        <emphasis>Complete a Build Through Kernel Configuration:</emphasis>
-                        Complete a build at least through the kernel
-                        configuration task as follows:
-                        <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c kernel_configme -f
-                        </literallayout>
-                        This step ensures that you create a
-                        <filename>.config</filename> file from a known state.
-                        Because situations exist where your build state might
-                        become unknown, it is best to run this task prior
-                        to starting <filename>menuconfig</filename>.
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Launch <filename>menuconfig</filename>:</emphasis>
-                        Run the <filename>menuconfig</filename> command:
-                        <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c menuconfig
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Create the Configuration Fragment:</emphasis>
-                        Run the <filename>diffconfig</filename>
-                        command to prepare a configuration fragment.
-                        The resulting file <filename>fragment.cfg</filename>
-                        is placed in the
-                        <filename>${</filename><ulink url='&YOCTO_DOCS_REF_URL;#var-WORKDIR'><filename>WORKDIR</filename></ulink><filename>}</filename> directory:
-                        <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c diffconfig
-                        </literallayout>
-                        </para></listitem>
-                </orderedlist>
-            </para>
-
-            <para>
-                The <filename>diffconfig</filename> command creates a file
-                that is a list of Linux kernel <filename>CONFIG_</filename>
-                assignments.
-                See the "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
-                section for additional information on how to use the output
-                as a configuration fragment.
-                <note>
-                    You can also use this method to create configuration
-                    fragments for a BSP.
-                    See the "<link linkend='bsp-descriptions'>BSP Descriptions</link>"
-                    section for more information.
-                </note>
-            </para>
-
-            <para>
-                Where do you put your configuration fragment files?
-                You can place these files in an area pointed to by
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                as directed by your <filename>bblayers.conf</filename> file,
-                which is located in your layer.
-                The OpenEmbedded build system picks up the configuration and
-                adds it to the kernel's configuration.
-                For example, suppose you had a set of configuration options
-                in a file called <filename>myconfig.cfg</filename>.
-                If you put that file inside a directory named
-                <filename>linux-yocto</filename> that resides in the same
-                directory as the kernel's append file within your layer
-                and then add the following statements to the kernel's append
-                file, those configuration options will be picked up and applied
-                when the kernel is built:
-                <literallayout class='monospaced'>
-     FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-     SRC_URI += "file://myconfig.cfg"
-                </literallayout>
-            </para>
-
-            <para>
-                As mentioned earlier, you can group related configurations
-                into multiple files and name them all in the
-                <filename>SRC_URI</filename> statement as well.
-                For example, you could group separate configurations
-                specifically for Ethernet and graphics into their own files
-                and add those by using a <filename>SRC_URI</filename> statement
-                like the following in your append file:
-                <literallayout class='monospaced'>
-     SRC_URI += "file://myconfig.cfg \
-            file://eth.cfg \
-            file://gfx.cfg"
-                </literallayout>
-            </para>
-        </section>
-
-        <section id='validating-configuration'>
-            <title>Validating Configuration</title>
-
-            <para>
-                You can use the
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-kernel_configcheck'><filename>do_kernel_configcheck</filename></ulink>
-                task to provide configuration validation:
-                <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c kernel_configcheck -f
-                </literallayout>
-                Running this task produces warnings for when a
-                requested configuration does not appear in the final
-                <filename>.config</filename> file or when you override a
-                policy configuration in a hardware configuration fragment.
-            </para>
-
-            <para>
-                In order to run this task, you must have an existing
-                <filename>.config</filename> file.
-                See the
-                "<link linkend='using-menuconfig'>Using <filename>menuconfig</filename></link>"
-                section for information on how to create a configuration file.
-            </para>
-
-            <para>
-                Following is sample output from the
-                <filename>do_kernel_configcheck</filename> task:
-                <literallayout class='monospaced'>
-     Loading cache: 100% |########################################################| Time: 0:00:00
-     Loaded 1275 entries from dependency cache.
-     NOTE: Resolving any missing task queue dependencies
-
-     Build Configuration:
-         .
-         .
-         .
-
-     NOTE: Executing SetScene Tasks
-     NOTE: Executing RunQueue Tasks
-     WARNING: linux-yocto-4.12.12+gitAUTOINC+eda4d18ce4_16de014967-r0 do_kernel_configcheck:
-         [kernel config]: specified values did not make it into the kernel's final configuration:
-
-     ---------- CONFIG_X86_TSC -----------------
-     Config: CONFIG_X86_TSC
-     From: /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/bsp/common-pc/common-pc-cpu.cfg
-     Requested value:  CONFIG_X86_TSC=y
-     Actual value:
-
-
-     ---------- CONFIG_X86_BIGSMP -----------------
-     Config: CONFIG_X86_BIGSMP
-     From: /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/cfg/smp.cfg
-           /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/defconfig
-     Requested value:  # CONFIG_X86_BIGSMP is not set
-     Actual value:
-
-
-     ---------- CONFIG_NR_CPUS -----------------
-     Config: CONFIG_NR_CPUS
-     From: /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/cfg/smp.cfg
-           /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/bsp/common-pc/common-pc.cfg
-           /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/defconfig
-     Requested value:  CONFIG_NR_CPUS=8
-     Actual value:     CONFIG_NR_CPUS=1
-
-
-     ---------- CONFIG_SCHED_SMT -----------------
-     Config: CONFIG_SCHED_SMT
-     From: /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/cfg/smp.cfg
-           /home/scottrif/poky/build/tmp/work-shared/qemux86/kernel-source/.kernel-meta/configs/standard/defconfig
-     Requested value:  CONFIG_SCHED_SMT=y
-     Actual value:
-
-
-
-     NOTE: Tasks Summary: Attempted 288 tasks of which 285 didn't need to be rerun and all succeeded.
-
-     Summary: There were 3 WARNING messages shown.
-                </literallayout>
-                <note>
-                    The previous output example has artificial line breaks
-                    to make it more readable.
-                </note>
-            </para>
-
-            <para>
-                The output describes the various problems that you can
-                encounter along with where to find the offending configuration
-                items.
-                You can use the information in the logs to adjust your
-                configuration files and then repeat the
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-kernel_configme'><filename>do_kernel_configme</filename></ulink>
-                and
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-kernel_configcheck'><filename>do_kernel_configcheck</filename></ulink>
-                tasks until they produce no warnings.
-            </para>
-
-            <para>
-                For more information on how to use the
-                <filename>menuconfig</filename> tool, see the
-                "<link linkend='using-menuconfig'>Using <filename>menuconfig</filename></link>"
-                section.
-            </para>
-        </section>
-
-        <section id='fine-tuning-the-kernel-configuration-file'>
-            <title>Fine-Tuning the Kernel Configuration File</title>
-
-            <para>
-                You can make sure the <filename>.config</filename> file is as
-                lean or efficient as possible by reading the output of the
-                kernel configuration fragment audit, noting any issues, making
-                changes to correct the issues, and then repeating.
-            </para>
-
-            <para>
-                As part of the kernel build process, the
-                <filename>do_kernel_configcheck</filename> task runs.
-                This task validates the kernel configuration by checking the
-                final <filename>.config</filename> file against the input
-                files.
-                During the check, the task produces warning messages for the
-                following issues:
-                <itemizedlist>
-                    <listitem><para>
-                        Requested options that did not make the final
-                        <filename>.config</filename> file.
-                        </para></listitem>
-                    <listitem><para>
-                        Configuration items that appear twice in the same
-                        configuration fragment.
-                        </para></listitem>
-                    <listitem><para>
-                        Configuration items tagged as "required" that were
-                        overridden.
-                        </para></listitem>
-                    <listitem><para>
-                        A board overrides a non-board specific option.
-                        </para></listitem>
-                    <listitem><para>
-                        Listed options not valid for the kernel being
-                        processed.
-                        In other words, the option does not appear anywhere.
-                        </para></listitem>
-                </itemizedlist>
-                <note>
-                    The <filename>do_kernel_configcheck</filename> task can
-                    also optionally report if an option is overridden during
-                    processing.
-                </note>
-            </para>
-
-            <para>
-                For each output warning, a message points to the file
-                that contains a list of the options and a pointer to the
-                configuration fragment that defines them.
-                Collectively, the files are the key to streamlining the
-                configuration.
-            </para>
-
-            <para>
-                To streamline the configuration, do the following:
-                <orderedlist>
-                    <listitem><para>
-                        <emphasis>Use a Working Configuration:</emphasis>
-                        Start with a full configuration that you
-                        know works.
-                        Be sure the configuration builds and boots
-                        successfully.
-                        Use this configuration file as your baseline.
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Run Configure and Check Tasks:</emphasis>
-                        Separately run the
-                        <filename>do_kernel_configme</filename> and
-                        <filename>do_kernel_configcheck</filename> tasks:
-                        <literallayout class='monospaced'>
-     $ bitbake linux-yocto -c kernel_configme -f
-     $ bitbake linux-yocto -c kernel_configcheck -f
-                        </literallayout>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Process the Results:</emphasis>
-                        Take the resulting list of files from the
-                        <filename>do_kernel_configcheck</filename> task
-                        warnings and do the following:
-                        <itemizedlist>
-                            <listitem><para>
-                                Drop values that are redefined in the fragment
-                                but do not change the final
-                                <filename>.config</filename> file.
-                                </para></listitem>
-                            <listitem><para>
-                                Analyze and potentially drop values from the
-                                <filename>.config</filename> file that override
-                                required configurations.
-                                </para></listitem>
-                            <listitem><para>
-                                Analyze and potentially remove non-board
-                                specific options.
-                                </para></listitem>
-                            <listitem><para>
-                                Remove repeated and invalid options.
-                                </para></listitem>
-                        </itemizedlist>
-                        </para></listitem>
-                    <listitem><para>
-                        <emphasis>Re-Run Configure and Check Tasks:</emphasis>
-                        After you have worked through the output of the kernel
-                        configuration audit, you can re-run the
-                        <filename>do_kernel_configme</filename> and
-                        <filename>do_kernel_configcheck</filename> tasks to
-                        see the results of your changes.
-                        If you have more issues, you can deal with them as
-                        described in the previous step.
-                        </para></listitem>
-                </orderedlist>
-            </para>
-
-            <para>
-                Iteratively working through steps two through four eventually
-                yields a minimal, streamlined configuration file.
-                Once you have the best <filename>.config</filename>, you can
-                build the Linux Yocto kernel.
-            </para>
-        </section>
-    </section>
-
-    <section id='expanding-variables'>
-        <title>Expanding Variables</title>
-
-        <para>
-            Sometimes it is helpful to determine what a variable expands
-            to during a build.
-            You can do examine the values of variables by examining the
-            output of the <filename>bitbake -e</filename> command.
-            The output is long and is more easily managed in a text file,
-            which allows for easy searches:
-            <literallayout class='monospaced'>
-     $ bitbake -e virtual/kernel > <replaceable>some_text_file</replaceable>
-            </literallayout>
-            Within the text file, you can see exactly how each variable is
-            expanded and used by the OpenEmbedded build system.
-        </para>
-    </section>
-
-    <section id='working-with-a-dirty-kernel-version-string'>
-        <title>Working with a "Dirty" Kernel Version String</title>
-
-        <para>
-            If you build a kernel image and the version string has a
-            "+" or a "-dirty" at the end, uncommitted modifications exist
-            in the kernel's source directory.
-            Follow these steps to clean up the version string:
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Discover the Uncommitted Changes:</emphasis>
-                    Go to the kernel's locally cloned Git repository
-                    (source directory) and use the following Git command
-                    to list the files that have been changed, added, or
-                    removed:
-                    <literallayout class='monospaced'>
-     $ git status
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Commit the Changes:</emphasis>
-                    You should commit those changes to the kernel source
-                    tree regardless of whether or not you will save,
-                    export, or use the changes:
-                    <literallayout class='monospaced'>
-     $ git add
-     $ git commit -s -a -m "getting rid of -dirty"
-                    </literallayout>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Rebuild the Kernel Image:</emphasis>
-                    Once you commit the changes, rebuild the kernel.</para>
-
-                    <para>Depending on your particular kernel development
-                    workflow, the commands you use to rebuild the
-                    kernel might differ.
-                    For information on building the kernel image when
-                    using <filename>devtool</filename>, see the
-                    "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-                    section.
-                    For information on building the kernel image when
-                    using Bitbake, see the
-                    "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-                    section.
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-
-    <section id='working-with-your-own-sources'>
-        <title>Working With Your Own Sources</title>
-
-        <para>
-            If you cannot work with one of the Linux kernel
-            versions supported by existing linux-yocto recipes, you can
-            still make use of the Yocto Project Linux kernel tooling by
-            working with your own sources.
-            When you use your own sources, you will not be able to
-            leverage the existing kernel
-            <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink> and
-            stabilization work of the linux-yocto sources.
-            However, you will be able to manage your own Metadata in the same
-            format as the linux-yocto sources.
-            Maintaining format compatibility facilitates converging with
-            linux-yocto on a future, mutually-supported kernel version.
-        </para>
-
-        <para>
-            To help you use your own sources, the Yocto Project provides a
-            linux-yocto custom recipe
-            (<filename>linux-yocto-custom.bb</filename>) that uses
-            <filename>kernel.org</filename> sources
-            and the Yocto Project Linux kernel tools for managing
-            kernel Metadata.
-            You can find this recipe in the
-            <filename>poky</filename> Git repository of the
-            Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
-            at:
-            <literallayout class="monospaced">
-     poky/meta-skeleton/recipes-kernel/linux/linux-yocto-custom.bb
-            </literallayout>
-        </para>
-
-        <para>
-            Here are some basic steps you can use to work with your own
-            sources:
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Create a Copy of the Kernel Recipe:</emphasis>
-                    Copy the <filename>linux-yocto-custom.bb</filename>
-                    recipe to your layer and give it a meaningful name.
-                    The name should include the version of the Yocto Linux
-                    kernel you are using (e.g.
-                    <filename>linux-yocto-myproject_4.12.bb</filename>,
-                    where "4.12" is the base version of the Linux kernel
-                    with which you would be working).
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Create a Directory for Your Patches:</emphasis>
-                    In the same directory inside your layer, create a matching
-                    directory to store your patches and configuration files
-                    (e.g. <filename>linux-yocto-myproject</filename>).
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Ensure You Have Configurations:</emphasis>
-                    Make sure you have either a <filename>defconfig</filename>
-                    file or configuration fragment files in your layer.
-                    When you use the <filename>linux-yocto-custom.bb</filename>
-                    recipe, you must specify a configuration.
-                    If you do not have a <filename>defconfig</filename> file,
-                    you can run the following:
-                    <literallayout class='monospaced'>
-     $ make defconfig
-                    </literallayout>
-                    After running the command, copy the resulting
-                    <filename>.config</filename> file to the
-                    <filename>files</filename> directory in your layer
-                    as "defconfig" and then add it to the
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                    variable in the recipe.</para>
-
-                    <para>Running the <filename>make defconfig</filename>
-                    command results in the default configuration for your
-                    architecture as defined by your kernel.
-                    However, no guarantee exists that this configuration is
-                    valid for your use case, or that your board will even boot.
-                    This is particularly true for non-x86 architectures.</para>
-
-                    <para>To use non-x86 <filename>defconfig</filename> files,
-                    you need to be more specific and find one that matches your
-                    board (i.e. for arm, you look in
-                    <filename>arch/arm/configs</filename> and use the one that
-                    is the best starting point for your board).
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Edit the Recipe:</emphasis>
-                    Edit the following variables in your recipe as appropriate
-                    for your project:
-                    <itemizedlist>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>:
-                            The <filename>SRC_URI</filename> should specify
-                            a Git repository that uses one of the supported Git
-                            fetcher protocols (i.e. <filename>file</filename>,
-                            <filename>git</filename>, <filename>http</filename>,
-                            and so forth).
-                            The <filename>SRC_URI</filename> variable should
-                            also specify either a <filename>defconfig</filename>
-                            file or some configuration fragment files.
-                            The skeleton recipe provides an example
-                            <filename>SRC_URI</filename> as a syntax reference.
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION'><filename>LINUX_VERSION</filename></ulink>:
-                            The Linux kernel version you are using (e.g.
-                            "4.12").
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION_EXTENSION'><filename>LINUX_VERSION_EXTENSION</filename></ulink>:
-                            The Linux kernel
-                            <filename>CONFIG_LOCALVERSION</filename> that is
-                            compiled into the resulting kernel and visible
-                            through the <filename>uname</filename> command.
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>:
-                            The commit ID from which you want to build.
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-PR'><filename>PR</filename></ulink>:
-                            Treat this variable the same as you would in any
-                            other recipe.
-                            Increment the variable to indicate to the
-                            OpenEmbedded build system that the recipe has
-                            changed.
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>:
-                            The default <filename>PV</filename> assignment is
-                            typically adequate.
-                            It combines the <filename>LINUX_VERSION</filename>
-                            with the Source Control Manager (SCM) revision
-                            as derived from the
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCPV'><filename>SRCPV</filename></ulink>
-                            variable.
-                            The combined results are a string with the
-                            following form:
-                            <literallayout class='monospaced'>
-     3.19.11+git1+68a635bf8dfb64b02263c1ac80c948647cc76d5f_1+218bd8d2022b9852c60d32f0d770931e3cf343e2
-                            </literallayout>
-                            While lengthy, the extra verbosity in
-                            <filename>PV</filename> helps ensure you are using
-                            the exact sources from which you intend to build.
-                            </para></listitem>
-                        <listitem><para>
-                            <ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>:
-                            A list of the machines supported by your new recipe.
-                            This variable in the example recipe is set
-                            by default to a regular expression that matches
-                            only the empty string, "(^$)".
-                            This default setting triggers an explicit build
-                            failure.
-                            You must change it to match a list of the machines
-                            that your new recipe supports.
-                            For example, to support the
-                            <filename>qemux86</filename> and
-                            <filename>qemux86-64</filename> machines, use
-                            the following form:
-                            <literallayout class='monospaced'>
-     COMPATIBLE_MACHINE = "qemux86|qemux86-64"
-                            </literallayout>
-                            </para></listitem>
-                    </itemizedlist>
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Customize Your Recipe as Needed:</emphasis>
-                    Provide further customizations to your recipe
-                    as needed just as you would customize an existing
-                    linux-yocto recipe.
-                    See the
-                    "<link linkend='modifying-an-existing-recipe'>Modifying an Existing Recipe</link>"
-                    section for information.
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-
-    <section id='working-with-out-of-tree-modules'>
-        <title>Working with Out-of-Tree Modules</title>
-
-        <para>
-            This section describes steps to build out-of-tree modules on
-            your target and describes how to incorporate out-of-tree modules
-            in the build.
-        </para>
-
-        <section id='building-out-of-tree-modules-on-the-target'>
-            <title>Building Out-of-Tree Modules on the Target</title>
-
-            <para>
-                While the traditional Yocto Project development model would be
-                to include kernel modules as part of the normal build
-                process, you might find it useful to build modules on the
-                target.
-                This could be the case if your target system is capable
-                and powerful enough to handle the necessary compilation.
-                Before deciding to build on your target, however, you should
-                consider the benefits of using a proper cross-development
-                environment from your build host.
-            </para>
-
-            <para>
-                If you want to be able to build out-of-tree modules on
-                the target, there are some steps you need to take
-                on the target that is running your SDK image.
-                Briefly, the <filename>kernel-dev</filename> package
-                is installed by default on all
-                <filename>*.sdk</filename> images and the
-                <filename>kernel-devsrc</filename> package is installed
-                on many of the <filename>*.sdk</filename> images.
-                However, you need to create some scripts prior to
-                attempting to build the out-of-tree modules on the target
-                that is running that image.
-            </para>
-
-            <para>
-                Prior to attempting to build the out-of-tree modules,
-                you need to be on the target as root and you need to
-                change to the <filename>/usr/src/kernel</filename> directory.
-                Next, <filename>make</filename> the scripts:
-                <literallayout class='monospaced'>
-     # cd /usr/src/kernel
-     # make scripts
-                </literallayout>
-                Because all SDK image recipes include
-                <filename>dev-pkgs</filename>, the
-                <filename>kernel-dev</filename> packages will be installed
-                as part of the SDK image and the
-                <filename>kernel-devsrc</filename> packages will be installed
-                as part of applicable SDK images.
-                The SDK uses the scripts when building out-of-tree
-                modules.
-                Once you have switched to that directory and created the
-                scripts, you should be able to build your out-of-tree modules
-                on the target.
-            </para>
-        </section>
-
-        <section id='incorporating-out-of-tree-modules'>
-            <title>Incorporating Out-of-Tree Modules</title>
-
-            <para>
-                While it is always preferable to work with sources integrated
-                into the Linux kernel sources, if you need an external kernel
-                module, the <filename>hello-mod.bb</filename> recipe is
-                available as a template from which you can create your
-                own out-of-tree Linux kernel module recipe.
-            </para>
-
-            <para>
-                This template recipe is located in the
-                <filename>poky</filename> Git repository of the
-                Yocto Project <ulink url='&YOCTO_GIT_URL;'>Source Repository</ulink>
-                at:
-                <literallayout class="monospaced">
-     poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
-                </literallayout>
-            </para>
-
-            <para>
-                To get started, copy this recipe to your layer and give it a
-                meaningful name (e.g. <filename>mymodule_1.0.bb</filename>).
-                In the same directory, create a new directory named
-                <filename>files</filename> where you can store any source files,
-                patches, or other files necessary for building
-                the module that do not come with the sources.
-                Finally, update the recipe as needed for the module.
-                Typically, you will need to set the following variables:
-                <itemizedlist>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-DESCRIPTION'><filename>DESCRIPTION</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE'><filename>LICENSE*</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-PV'><filename>PV</filename></ulink>
-                        </para></listitem>
-                </itemizedlist>
-            </para>
-
-            <para>
-                Depending on the build system used by the module sources,
-                you might need to make some adjustments.
-                For example, a typical module <filename>Makefile</filename>
-                looks much like the one provided with the
-                <filename>hello-mod</filename> template:
-                <literallayout class='monospaced'>
-     obj-m := hello.o
-
-     SRC := $(shell pwd)
-
-     all:
-         $(MAKE) -C $(KERNEL_SRC) M=$(SRC)
-
-     modules_install:
-         $(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install
-     ...
-                </literallayout>
-            </para>
-
-            <para>
-                The important point to note here is the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_SRC'><filename>KERNEL_SRC</filename></ulink>
-                variable.
-                The
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-module'><filename>module</filename></ulink>
-                class sets this variable and the
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_PATH'><filename>KERNEL_PATH</filename></ulink>
-                variable to
-                <filename>${<ulink url='&YOCTO_DOCS_REF_URL;#var-STAGING_KERNEL_DIR'><filename>STAGING_KERNEL_DIR</filename></ulink>}</filename>
-                with the necessary Linux kernel build information to build
-                modules.
-                If your module <filename>Makefile</filename> uses a different
-                variable, you might want to override the
-                <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>
-                step, or create a patch to
-                the <filename>Makefile</filename> to work with the more typical
-                <filename>KERNEL_SRC</filename> or
-                <filename>KERNEL_PATH</filename> variables.
-            </para>
-
-            <para>
-                After you have prepared your recipe, you will likely want to
-                include the module in your images.
-                To do this, see the documentation for the following variables in
-                the Yocto Project Reference Manual and set one of them
-                appropriately for your machine configuration file:
-                <itemizedlist>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
-                        </para></listitem>
-                    <listitem><para><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
-                        </para></listitem>
-                </itemizedlist>
-            </para>
-
-            <para>
-                Modules are often not required for boot and can be excluded from
-                certain build configurations.
-                The following allows for the most flexibility:
-                <literallayout class='monospaced'>
-     MACHINE_EXTRA_RRECOMMENDS += "kernel-module-mymodule"
-                </literallayout>
-                The value is derived by appending the module filename without
-                the <filename>.ko</filename> extension to the string
-                "kernel-module-".
-            </para>
-
-            <para>
-                Because the variable is
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
-                and not a
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-RDEPENDS'><filename>RDEPENDS</filename></ulink>
-                variable, the build will not fail if this module is not
-                available to include in the image.
-            </para>
-        </section>
-    </section>
-
-
-    <section id='inspecting-changes-and-commits'>
-        <title>Inspecting Changes and Commits</title>
-
-        <para>
-            A common question when working with a kernel is:
-            "What changes have been applied to this tree?"
-            Rather than using "grep" across directories to see what has
-            changed, you can use Git to inspect or search the kernel tree.
-            Using Git is an efficient way to see what has changed in the tree.
-        </para>
-
-        <section id='what-changed-in-a-kernel'>
-            <title>What Changed in a Kernel?</title>
-
-            <para>
-                Following are a few examples that show how to use Git
-                commands to examine changes.
-                These examples are by no means the only way to see changes.
-                <note>
-                    In the following examples, unless you provide a commit
-                    range, <filename>kernel.org</filename> history is blended
-                    with Yocto Project kernel changes.
-                    You can form ranges by using branch names from the
-                    kernel tree as the upper and lower commit markers with
-                    the Git commands.
-                    You can see the branch names through the web interface
-                    to the Yocto Project source repositories at
-                    <ulink url='&YOCTO_GIT_URL;'></ulink>.
-                </note>
-                To see a full range of the changes, use the
-                <filename>git whatchanged</filename> command and specify a
-                commit range for the branch
-                (<replaceable>commit</replaceable><filename>..</filename><replaceable>commit</replaceable>).
-            </para>
-
-            <para>
-                Here is an example that looks at what has changed in the
-                <filename>emenlow</filename> branch of the
-                <filename>linux-yocto-3.19</filename> kernel.
-                The lower commit range is the commit associated with the
-                <filename>standard/base</filename> branch, while
-                the upper commit range is the commit associated with the
-                <filename>standard/emenlow</filename> branch.
-                <literallayout class='monospaced'>
-     $ git whatchanged origin/standard/base..origin/standard/emenlow
-                </literallayout>
-            </para>
-
-            <para>
-                To see short, one line summaries of changes use the
-                <filename>git log</filename> command:
-                <literallayout class='monospaced'>
-     $ git log --oneline origin/standard/base..origin/standard/emenlow
-                </literallayout>
-            </para>
-
-            <para>
-                Use this command to see code differences for the changes:
-                <literallayout class='monospaced'>
-     $ git diff origin/standard/base..origin/standard/emenlow
-                </literallayout>
-            </para>
-
-            <para>
-                Use this command to see the commit log messages and the
-                text differences:
-                <literallayout class='monospaced'>
-     $ git show origin/standard/base..origin/standard/emenlow
-                </literallayout>
-            </para>
-
-            <para>
-                Use this command to create individual patches for
-                each change.
-                Here is an example that that creates patch files for each
-                commit and places them in your <filename>Documents</filename>
-                directory:
-                <literallayout class='monospaced'>
-     $ git format-patch -o $HOME/Documents origin/standard/base..origin/standard/emenlow
-                </literallayout>
-            </para>
-        </section>
-
-        <section id='showing-a-particular-feature-or-branch-change'>
-            <title>Showing a Particular Feature or Branch Change</title>
-
-            <para>
-                Tags in the Yocto Project kernel tree divide changes for
-                significant features or branches.
-                The <filename>git show</filename>&nbsp;<replaceable>tag</replaceable>
-                command shows changes based on a tag.
-                Here is an example that shows <filename>systemtap</filename>
-                changes:
-                <literallayout class='monospaced'>
-     $ git show systemtap
-                </literallayout>
-                You can use the
-                <filename>git branch --contains</filename>&nbsp;<replaceable>tag</replaceable>
-                command to show the branches that contain a particular feature.
-                This command shows the branches that contain the
-                <filename>systemtap</filename> feature:
-                <literallayout class='monospaced'>
-     $ git branch --contains systemtap
-                </literallayout>
-            </para>
-        </section>
-    </section>
-
-    <section id='adding-recipe-space-kernel-features'>
-        <title>Adding Recipe-Space Kernel Features</title>
-
-        <para>
-            You can add kernel features in the
-            <link linkend='recipe-space-metadata'>recipe-space</link> by
-            using the
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
-            variable and by specifying the feature's <filename>.scc</filename>
-            file path in the
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-            statement.
-            When you add features using this method, the OpenEmbedded build
-            system checks to be sure the features are present.
-            If the features are not present, the build stops.
-            Kernel features are the last elements processed for configuring
-            and patching the kernel.
-            Therefore, adding features in this manner is a way
-            to enforce specific features are present and enabled
-            without needing to do a full audit of any other layer's additions
-            to the <filename>SRC_URI</filename> statement.
-        </para>
-
-        <para>
-            You add a kernel feature by providing the feature as part of the
-            <filename>KERNEL_FEATURES</filename> variable and by providing the
-            path to the feature's <filename>.scc</filename> file, which is
-            relative to the root of the kernel Metadata.
-            The OpenEmbedded build system searches all forms of kernel
-            Metadata on the <filename>SRC_URI</filename> statement regardless
-            of whether the Metadata is in the "kernel-cache", system kernel
-            Metadata, or a recipe-space Metadata (i.e. part of the kernel
-            recipe).
-            See the
-            "<link linkend='kernel-metadata-location'>Kernel Metadata Location</link>"
-            section for additional information.
-        </para>
-
-        <para>
-            When you specify the feature's <filename>.scc</filename> file
-            on the <filename>SRC_URI</filename> statement, the OpenEmbedded
-            build system adds the directory of that
-            <filename>.scc</filename> file along with all its subdirectories
-            to the kernel feature search path.
-            Because subdirectories are searched, you can reference a single
-            <filename>.scc</filename> file in the
-            <filename>SRC_URI</filename> statement to reference multiple kernel
-            features.
-        </para>
-
-        <para>
-            Consider the following example that adds the "test.scc" feature
-            to the build.
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Create the Feature File:</emphasis>
-                    Create a <filename>.scc</filename> file and locate it
-                    just as you would any other patch file,
-                    <filename>.cfg</filename> file, or fetcher item
-                    you specify in the <filename>SRC_URI</filename>
-                    statement.
-                    <note><title>Notes</title>
-                        <itemizedlist>
-                            <listitem><para>
-                                You must add the directory of the
-                                <filename>.scc</filename> file to the fetcher's
-                                search path in the same manner as you would
-                                add a <filename>.patch</filename> file.
-                                </para></listitem>
-                            <listitem><para>
-                                You can create additional
-                                <filename>.scc</filename> files beneath the
-                                directory that contains the file you are
-                                adding.
-                                All subdirectories are searched during the
-                                build as potential feature directories.
-                                </para></listitem>
-                        </itemizedlist>
-                    </note>
-                    Continuing with the example, suppose the "test.scc"
-                    feature you are adding has a
-                    <filename>test.scc</filename> file in the following
-                    directory:
-                    <literallayout class='monospaced'>
-     <replaceable>my_recipe</replaceable>
-        |
-        +-linux-yocto
-           |
-           +-test.cfg
-           +-test.scc
-                    </literallayout>
-                    In this example, the <filename>linux-yocto</filename>
-                    directory has both the feature
-                    <filename>test.scc</filename> file and a similarly
-                    named configuration fragment file
-                    <filename>test.cfg</filename>.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Add the Feature File to <filename>SRC_URI</filename>:</emphasis>
-                    Add the <filename>.scc</filename> file to the
-                    recipe's <filename>SRC_URI</filename> statement:
-                    <literallayout class='monospaced'>
-     SRC_URI_append = " file://test.scc"
-                    </literallayout>
-                    The leading space before the path is important as the
-                    path is appended to the existing path.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Specify the Feature as a Kernel Feature:</emphasis>
-                    Use the <filename>KERNEL_FEATURES</filename> statement
-                    to specify the feature as a kernel feature:
-                    <literallayout class='monospaced'>
-     KERNEL_FEATURES_append = " test.scc"
-                    </literallayout>
-                    The OpenEmbedded build system processes the kernel feature
-                    when it builds the kernel.
-                    <note>
-                        If other features are contained below "test.scc",
-                        then their directories are relative to the directory
-                        containing the <filename>test.scc</filename> file.
-                    </note>
-                    </para></listitem>
-            </orderedlist>
-        </para>
-    </section>
-</chapter>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-concepts-appx.rst b/poky/documentation/kernel-dev/kernel-dev-concepts-appx.rst
index 04cb117..5b6ebef 100644
--- a/poky/documentation/kernel-dev/kernel-dev-concepts-appx.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-concepts-appx.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 ************************
 Advanced Kernel Concepts
diff --git a/poky/documentation/kernel-dev/kernel-dev-concepts-appx.xml b/poky/documentation/kernel-dev/kernel-dev-concepts-appx.xml
deleted file mode 100644
index bf0c525..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-concepts-appx.xml
+++ /dev/null
@@ -1,622 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<appendix id='kernel-dev-concepts-appx'>
-<title>Advanced Kernel Concepts</title>
-
-    <section id='kernel-big-picture'>
-        <title>Yocto Project Kernel Development and Maintenance</title>
-
-        <para>
-            Kernels available through the Yocto Project (Yocto Linux kernels),
-            like other kernels, are based off the Linux kernel releases from
-            <ulink url='http://www.kernel.org'></ulink>.
-            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
-            <filename>kernel.org</filename> 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 <filename>kernel.org</filename> final release
-            will clearly be within the early stages of the Yocto Project
-            development window.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            As implied earlier, the ultimate source for Yocto Linux kernels
-            are released kernels from <filename>kernel.org</filename>.
-            In addition to a foundational kernel from
-            <filename>kernel.org</filename>, 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.
-        </para>
-
-        <para>
-            You can find a web interface to the Yocto Linux kernels in the
-            <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
-            at
-            <ulink url='&YOCTO_GIT_URL;'></ulink>.
-            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:
-            <itemizedlist>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.1</filename>:</emphasis>
-                    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.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.4</filename>:</emphasis>
-                    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.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.6</filename>:</emphasis>
-                    A temporary kernel that is not tied to any Yocto Project
-                    release.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.8</filename>:</emphasis>
-                    The stable yocto Project kernel to use with the Yocto
-                    Project Release 2.2.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.9</filename>:</emphasis>
-                    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.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.10</filename>:</emphasis>
-                    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.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-4.12</filename>:</emphasis>
-                    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.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>yocto-kernel-cache</filename>:</emphasis>
-                    The <filename>linux-yocto-cache</filename> 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
-                    "<link linkend='kernel-dev-advanced'>Working With Advanced Metadata (<filename>yocto-kernel-cache</filename>)</link>"
-                    Chapter.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis><filename>linux-yocto-dev</filename>:</emphasis>
-                    A development kernel based on the latest upstream release
-                    candidate available.
-                    </para></listitem>
-            </itemizedlist>
-            <note><title>Notes</title>
-                Long Term Support Initiative (LTSI) for Yocto Linux
-                kernels is as follows:
-                <itemizedlist>
-                    <listitem><para>
-                        For Yocto Project releases 1.7, 1.8, and 2.0,
-                        the LTSI kernel is
-                        <filename>linux-yocto-3.14</filename>.
-                        </para></listitem>
-                    <listitem><para>
-                        For Yocto Project releases 2.1, 2.2, and 2.3,
-                        the LTSI kernel is <filename>linux-yocto-4.1</filename>.
-                        </para></listitem>
-                    <listitem><para>
-                        For Yocto Project release 2.4, the LTSI kernel is
-                        <filename>linux-yocto-4.9</filename>
-                        </para></listitem>
-                    <listitem><para>
-                        <filename>linux-yocto-4.4</filename> is an LTS
-                        kernel.
-                        </para></listitem>
-                </itemizedlist>
-            </note>
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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 <filename>kernel.org</filename>
-            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.
-        </para>
-
-        <para>
-            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 &dash; 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.
-        </para>
-
-        <para>
-            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.
-        </para>
-    </section>
-
-    <section id='yocto-linux-kernel-architecture-and-branching-strategies'>
-        <title>Yocto Linux Kernel Architecture and Branching Strategies</title>
-
-        <para>
-            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
-            <filename>kernel.org</filename>.
-        </para>
-
-        <para>
-            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><title>Notes</title>
-                <itemizedlist>
-                    <listitem><para>
-                        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
-                        <filename>kernel.org</filename> but, Git continues to
-                         grow in popularity and supports many different work
-                         flows, front-ends and management techniques.
-                        </para></listitem>
-                    <listitem><para>
-                        You can find documentation on Git at
-                        <ulink url='http://git-scm.com/documentation'></ulink>.
-                        You can also get an introduction to Git as it
-                        applies to the Yocto Project in the
-                        "<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>"
-                        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.
-                        </para></listitem>
-                </itemizedlist>
-            </note>
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-            </note>
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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 <filename>kernel.org</filename>, 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 "master" branch
-            in Git terms.
-            The developer does not need to be aware of the existence of any
-            other branches at all.
-            Of course, value exists in the having 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 <filename>diff</filename> level
-            is now a trivial operation.
-        </para>
-
-        <para>
-            The following illustration shows the conceptual Yocto
-            Linux kernel.
-            <imagedata fileref="figures/kernel-architecture-overview.png" width="6in" depth="7in" align="center" scale="100" />
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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 Yocto
-                Project
-                <ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
-                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.
-            </note>
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            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.
-        </para>
-    </section>
-
-    <section id='kernel-build-file-hierarchy'>
-        <title>Kernel Build File Hierarchy</title>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            Kernel source code is available on your host system several
-            different ways:
-            <itemizedlist>
-                <listitem><para>
-                    <emphasis>Files Accessed While using <filename>devtool</filename>:</emphasis>
-                    <filename>devtool</filename>, which is available with the
-                    Yocto Project, is the preferred method by which to
-                    modify the kernel.
-                    See the
-                    "<link linkend='kernel-modification-workflow'>Kernel Modification Workflow</link>"
-                    section.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Cloned Repository:</emphasis>
-                    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
-                    "<link linkend='preparing-the-build-host-to-work-on-the-kernel'>Preparing the Build Host to Work on the Kernel</link>"
-                    section.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Temporary Source Files from a Build:</emphasis>
-                    If you just need to make some patches to the kernel using
-                    a traditional BitBake workflow (i.e. not using the
-                    <filename>devtool</filename>), you can access temporary
-                    kernel source files that were extracted and used during
-                    a kernel build.
-                    </para></listitem>
-            </itemizedlist>
-        </para>
-
-        <para>
-            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
-            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-            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.
-        </para>
-
-        <para>
-            The following figure shows the temporary file structure
-            created on your host system when you build the kernel using
-            Bitbake.
-            This
-            <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
-            contains all the source files used during the build.
-            <imagedata fileref="figures/kernel-overview-2-generic.png"
-                width="6in" depth="5in" align="center" scale="100" />
-        </para>
-
-        <para>
-            Again, for additional information on the Yocto Project kernel's
-            architecture and its branching strategy, see the
-            "<link linkend='yocto-linux-kernel-architecture-and-branching-strategies'>Yocto Linux Kernel Architecture and Branching Strategies</link>"
-            section.
-            You can also reference the
-            "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-            and
-            "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-            sections for detailed example that modifies the kernel.
-        </para>
-    </section>
-
-    <section id='determining-hardware-and-non-hardware-features-for-the-kernel-configuration-audit-phase'>
-        <title>Determining Hardware and Non-Hardware Features for the Kernel Configuration Audit Phase</title>
-
-        <para>
-            This section describes part of the kernel configuration audit
-            phase that most developers can ignore.
-            For general information on kernel configuration including
-            <filename>menuconfig</filename>, <filename>defconfig</filename>
-            files, and configuration fragments, see the
-            "<link linkend='configuring-the-kernel'>Configuring the Kernel</link>"
-            section.
-        </para>
-
-        <para>
-            During this part of the audit phase, the contents of the final
-            <filename>.config</filename> 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.
-        </para>
-
-        <para>
-            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.
-        </para>
-
-        <para>
-            To determine whether or not a given option is "hardware" or
-            "non-hardware", the kernel Metadata in
-            <filename>yocto-kernel-cache</filename> contains files that
-            classify individual or groups of options as either hardware
-            or non-hardware.
-            To better show this, consider a situation where the
-            <filename>yocto-kernel-cache</filename> contains the following
-            files:
-            <literallayout class='monospaced'>
-     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
-            </literallayout>
-            The following list provides explanations for the various
-            files:
-            <itemizedlist>
-                <listitem><para>
-                    <filename>hardware.kcf</filename>:
-                    Specifies a list of kernel Kconfig files that contain
-                    hardware options only.
-                    </para></listitem>
-                <listitem><para>
-                    <filename>non-hardware.kcf</filename>:
-                    Specifies a list of kernel Kconfig files that contain
-                    non-hardware options only.
-                    </para></listitem>
-                <listitem><para>
-                    <filename>hardware.cfg</filename>:
-                    Specifies a list of kernel <filename>CONFIG_</filename>
-                    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.
-                    <filename>hardware.kcf</filename> or
-                    <filename>non-hardware.kcf</filename>).
-                    </para></listitem>
-                <listitem><para>
-                    <filename>non-hardware.cfg</filename>:
-                    Specifies a list of kernel <filename>CONFIG_</filename>
-                    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.
-                    <filename>hardware.kcf</filename> or
-                    <filename>non-hardware.kcf</filename>).
-                    </para></listitem>
-            </itemizedlist>
-            Here is a specific example using the
-            <filename>kernel-cache/bsp/mti-malta32/hardware.cfg</filename>:
-            <literallayout class='monospaced'>
-     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
-            </literallayout>
-            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 <filename>.config</filename> file.
-        </para>
-
-        <para>
-            A user-specified kernel Metadata repository, or recipe space
-            feature, can use these same files to classify options that are
-            found within its <filename>.cfg</filename> 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 <filename>.config</filename> file.
-        </para>
-    </section>
-</appendix>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-customization.xsl b/poky/documentation/kernel-dev/kernel-dev-customization.xsl
deleted file mode 100644
index 88bf7c6..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-customization.xsl
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version='1.0'?>
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
-
-  <xsl:import href="http://downloads.yoctoproject.org/mirror/docbook-mirror/docbook-xsl-1.76.1/xhtml/docbook.xsl" />
-
-<!--
-
-  <xsl:import href="../template/1.76.1/docbook-xsl-1.76.1/xhtml/docbook.xsl" />
-
-  <xsl:import href="http://docbook.sourceforge.net/release/xsl/1.76.1/xhtml/docbook.xsl" />
-
--->
-
-  <xsl:include href="../template/permalinks.xsl"/>
-  <xsl:include href="../template/section.title.xsl"/>
-  <xsl:include href="../template/component.title.xsl"/>
-  <xsl:include href="../template/division.title.xsl"/>
-  <xsl:include href="../template/formal.object.heading.xsl"/>
-
-  <xsl:param name="html.stylesheet" select="'kernel-dev-style.css'" />
-  <xsl:param name="chapter.autolabel" select="1" />
-  <xsl:param name="appendix.autolabel">A</xsl:param>
-  <xsl:param name="section.autolabel" select="1" />
-  <xsl:param name="section.label.includes.component.label" select="1" />
-
-</xsl:stylesheet>
diff --git a/poky/documentation/kernel-dev/kernel-dev-faq.rst b/poky/documentation/kernel-dev/kernel-dev-faq.rst
index b5e6a84..70bf4a2 100644
--- a/poky/documentation/kernel-dev/kernel-dev-faq.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-faq.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 **********************
 Kernel Development FAQ
diff --git a/poky/documentation/kernel-dev/kernel-dev-faq.xml b/poky/documentation/kernel-dev/kernel-dev-faq.xml
deleted file mode 100644
index d76f0a4..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-faq.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<appendix id='kernel-dev-faq'>
-<title>Kernel Development FAQ</title>
-
-<section id='kernel-dev-faq-section'>
-    <title>Common Questions and Solutions</title>
-
-    <para>
-        The following lists some solutions for common questions.
-
-
-        <qandaset>
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I use my own Linux kernel <filename>.config</filename>
-                        file?
-                    </para>
-                </question>
-                <answer>
-            <para>
-                        Refer to the "<link linkend='changing-the-configuration'>Changing the Configuration</link>"
-                        section for information.
-                    </para>
-                </answer>
-            </qandaentry>
-
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I create configuration fragments?
-                    </para>
-                </question>
-                <answer>
-                    <para>
-                        Refer to the
-                        "<link linkend='creating-config-fragments'>Creating Configuration Fragments</link>"
-                        section for information.
-                    </para>
-                </answer>
-            </qandaentry>
-
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I use my own Linux kernel sources?
-                    </para>
-                </question>
-                <answer>
-                    <para>
-                        Refer to the "<link linkend='working-with-your-own-sources'>Working With Your Own Sources</link>"
-                        section for information.
-                    </para>
-                </answer>
-            </qandaentry>
-
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I install/not-install the kernel image on the rootfs?
-                    </para>
-                </question>
-                <answer>
-                    <para>
-                        The kernel image (e.g. <filename>vmlinuz</filename>) is provided
-                        by the <filename>kernel-image</filename> package.
-                        Image recipes depend on <filename>kernel-base</filename>.
-                        To specify whether or not the kernel
-                        image is installed in the generated root filesystem, override
-                        <filename>RDEPENDS_kernel-base</filename> to include or not
-                        include "kernel-image".</para>
-                        <para>See the
-                        "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files in Your Layer</ulink>"
-                        section in the Yocto Project Development Tasks Manual
-                        for information on how to use an append file to
-                        override metadata.
-                    </para>
-                </answer>
-            </qandaentry>
-
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I install a specific kernel module?
-                    </para>
-                </question>
-                <answer>
-                    <para>
-                        Linux kernel modules are packaged individually.
-                        To ensure a specific kernel module is included in an image,
-                        include it in the appropriate machine
-                        <ulink url='&YOCTO_DOCS_REF_URL;#var-RRECOMMENDS'><filename>RRECOMMENDS</filename></ulink>
-                        variable.</para>
-                        <para>These other variables are useful for installing specific
-                        modules:
-                        <literallayout class='monospaced'>
-     <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RDEPENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RDEPENDS</filename></ulink>
-     <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
-     <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RDEPENDS'><filename>MACHINE_EXTRA_RDEPENDS</filename></ulink>
-     <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>
-                        </literallayout>
-                        For example, set the following in the <filename>qemux86.conf</filename>
-                        file to include the <filename>ab123</filename> kernel modules
-                        with images built for the <filename>qemux86</filename> machine:
-                        <literallayout class='monospaced'>
-     MACHINE_EXTRA_RRECOMMENDS += "kernel-module-ab123"
-                        </literallayout>
-                        For more information, see the
-                        "<link linkend='incorporating-out-of-tree-modules'>Incorporating Out-of-Tree Modules</link>"
-                        section.
-                    </para>
-                </answer>
-            </qandaentry>
-
-            <qandaentry>
-                <question>
-                    <para>
-                        How do I change the Linux kernel command line?
-                   </para>
-                </question>
-                <answer>
-                    <para>
-                        The Linux kernel command line is typically specified in
-                        the machine config using the <filename>APPEND</filename> variable.
-                For example, you can add some helpful debug information doing
-                        the following:
-                        <literallayout class='monospaced'>
-     APPEND += "printk.time=y initcall_debug debug"
-                        </literallayout>
-                    </para>
-                </answer>
-            </qandaentry>
-        </qandaset>
-    </para>
-</section>
-</appendix>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-intro.rst b/poky/documentation/kernel-dev/kernel-dev-intro.rst
index 21d43d5..447cddb 100644
--- a/poky/documentation/kernel-dev/kernel-dev-intro.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-intro.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 ************
 Introduction
diff --git a/poky/documentation/kernel-dev/kernel-dev-intro.xml b/poky/documentation/kernel-dev/kernel-dev-intro.xml
deleted file mode 100644
index 7c1ea0e..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-intro.xml
+++ /dev/null
@@ -1,260 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<chapter id='kernel-dev-intro'>
-<title>Introduction</title>
-
-<section id='kernel-dev-overview'>
-    <title>Overview</title>
-
-    <para>
-        Regardless of how you intend to make use of the Yocto Project,
-        chances are you will work with the Linux kernel.
-        This manual describes how to set up your build host to support
-        kernel development, introduces the kernel development process,
-        provides background information on the Yocto Linux kernel
-        <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>,
-        describes common tasks you can perform using the kernel tools,
-        shows you how to use the kernel Metadata needed to work with
-        the kernel inside the Yocto Project, and provides insight into how
-        the Yocto Project team develops and maintains Yocto Linux kernel
-        Git repositories and Metadata.
-   </para>
-
-   <para>
-        Each Yocto Project release has a set of Yocto Linux kernel recipes,
-        whose Git repositories you can view in the Yocto
-        <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> under
-        the "Yocto Linux Kernel" heading.
-        New recipes for the release track the latest Linux kernel
-        upstream developments from
-        <ulink url='http://www.kernel.org'></ulink> and introduce
-        newly-supported platforms.
-        Previous recipes in the release are refreshed and supported for at
-        least one additional Yocto Project release.
-        As they align, these previous releases are updated to include the
-        latest from the Long Term Support Initiative (LTSI) project.
-        You can learn more about Yocto Linux kernels and LTSI in the
-        "<link linkend='kernel-big-picture'>Yocto Project Kernel Development and Maintenance</link>"
-        section.
-    </para>
-
-    <para>
-        Also included is a Yocto Linux kernel development recipe
-        (<filename>linux-yocto-dev.bb</filename>) should you want to work
-        with the very latest in upstream Yocto Linux kernel development and
-        kernel Metadata development.
-        <note>
-            For more on Yocto Linux kernels, see the
-            "<link linkend='kernel-big-picture'>Yocto Project Kernel Development and Maintenance</link>
-            section.
-        </note>
-    </para>
-
-    <para>
-        The Yocto Project also provides a powerful set of kernel
-        tools for managing Yocto Linux kernel sources and configuration data.
-        You can use these tools to make a single configuration change,
-        apply multiple patches, or work with your own kernel sources.
-    </para>
-
-    <para>
-        In particular, the kernel tools allow you to generate configuration
-        fragments that specify only what you must, and nothing more.
-        Configuration fragments only need to contain the highest level
-        visible <filename>CONFIG</filename> options as presented by the
-        Yocto Linux kernel <filename>menuconfig</filename> system.
-        Contrast this against a complete Yocto Linux kernel
-        <filename>.config</filename> file, which includes all the automatically
-        selected <filename>CONFIG</filename> options.
-        This efficiency reduces your maintenance effort and allows you
-        to further separate your configuration in ways that make sense for
-        your project.
-        A common split separates policy and hardware.
-        For example, all your kernels might support the
-        <filename>proc</filename> and <filename>sys</filename> filesystems,
-        but only specific boards require sound, USB, or specific drivers.
-        Specifying these configurations individually allows you to aggregate
-        them together as needed, but maintains them in only one place.
-        Similar logic applies to separating source changes.
-    </para>
-
-    <para>
-        If you do not maintain your own kernel sources and need to make
-        only minimal changes to the sources, the released recipes provide a
-        vetted base upon which to layer your changes.
-        Doing so allows you to benefit from the continual kernel
-        integration and testing performed during development of the
-        Yocto Project.
-    </para>
-
-    <para>
-        If, instead, you have a very specific Linux kernel source tree
-        and are unable to align with one of the official Yocto Linux kernel
-        recipes, an alternative exists by which you can use the Yocto
-        Project Linux kernel tools with your own kernel sources.
-    </para>
-
-    <para>
-        The remainder of this manual provides instructions for completing
-        specific Linux kernel development tasks.
-        These instructions assume you are comfortable working with
-        <ulink url='http://openembedded.org/wiki/Bitbake'>BitBake</ulink>
-        recipes and basic open-source development tools.
-        Understanding these concepts will facilitate the process of working
-        with the kernel recipes.
-        If you find you need some additional background, please be sure to
-        review and understand the following documentation:
-        <itemizedlist>
-            <listitem><para>
-                <ulink url='&YOCTO_DOCS_BRIEF_URL;'>Yocto Project Quick Build</ulink>
-                document.
-                </para></listitem>
-            <listitem><para>
-                <ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>.
-                </para></listitem>
-            <listitem><para>
-                <ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename> workflow</ulink>
-                as described in the Yocto Project Application Development and
-                the Extensible Software Development Kit (eSDK) manual.
-                </para></listitem>
-            <listitem><para>
-                The
-                "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
-                section in the Yocto Project Development Tasks Manual.
-                </para></listitem>
-            <listitem><para>
-                The
-                "<link linkend='kernel-modification-workflow'>Kernel Modification Workflow</link>"
-                section.
-                </para></listitem>
-        </itemizedlist>
-    </para>
-</section>
-
-<section id='kernel-modification-workflow'>
-    <title>Kernel Modification Workflow</title>
-
-    <para>
-        Kernel modification involves changing the Yocto Project kernel,
-        which could involve changing configuration options as well as adding
-        new kernel recipes.
-        Configuration changes can be added in the form of configuration
-        fragments, while recipe modification comes through the kernel's
-        <filename>recipes-kernel</filename> area in a kernel layer you create.
-    </para>
-
-    <para>
-        This section presents a high-level overview of the Yocto Project
-        kernel modification workflow.
-        The illustration and accompanying list provide general information
-        and references for further information.
-        <imagedata fileref="figures/kernel-dev-flow.png"
-            width="9in" depth="5in" align="center" scalefit="1" />
-    </para>
-
-    <para>
-        <orderedlist>
-            <listitem><para>
-
-
-                <emphasis>Set up Your Host Development System to Support
-                Development Using the Yocto Project</emphasis>:
-                See the
-                "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-start'>Setting Up the Development Host to Use the Yocto Project</ulink>"
-                section in the Yocto Project Development Tasks Manual for
-                options on how to get a build host ready to use the Yocto
-                Project.
-                </para></listitem>
-            <listitem><para>
-                <emphasis>Set Up Your Host Development System for Kernel Development:</emphasis>
-                It is recommended that you use <filename>devtool</filename>
-                and an extensible SDK for kernel development.
-                Alternatively, you can use traditional kernel development
-                methods with the Yocto Project.
-                Either way, there are steps you need to take to get the
-                development environment ready.</para>
-
-                <para>Using <filename>devtool</filename> and the eSDK requires
-                that you have a clean build of the image and that you are
-                set up with the appropriate eSDK.
-                For more information, see the
-                "<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using <filename>devtool</filename></link>"
-                section.</para>
-
-                <para>Using traditional kernel development requires that you
-                have the kernel source available in an isolated local Git
-                repository.
-                For more information, see the
-                "<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
-                section.
-                </para></listitem>
-            <listitem><para>
-                <emphasis>Make Changes to the Kernel Source Code if
-                applicable:</emphasis>
-                Modifying the kernel does not always mean directly
-                changing source files.
-                However, if you have to do this, you make the changes to the
-                files in the eSDK's Build Directory if you are using
-                <filename>devtool</filename>.
-                For more information, see the
-                "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
-                section.</para>
-
-                <para>If you are using traditional kernel development, you
-                edit the source files in the kernel's local Git repository.
-                For more information, see the
-                "<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
-                section.
-                </para></listitem>
-            <listitem><para>
-                <emphasis>Make Kernel Configuration Changes if
-                Applicable:</emphasis>
-                If your situation calls for changing the kernel's
-                configuration, you can use
-                <link linkend='using-menuconfig'><filename>menuconfig</filename></link>,
-                which allows you to interactively develop and test the
-                configuration changes you are making to the kernel.
-                Saving changes you make with <filename>menuconfig</filename>
-                updates the kernel's <filename>.config</filename> file.
-                <note><title>Warning</title>
-                    Try to resist the temptation to directly edit an
-                    existing <filename>.config</filename> file, which is
-                    found in the Build Directory among the source code
-                    used for the build.
-                    Doing so, can produce unexpected results when the
-                    OpenEmbedded build system regenerates the configuration
-                    file.
-                </note>
-                Once you are satisfied with the configuration
-                changes made using <filename>menuconfig</filename>
-                and you have saved them, you can directly compare the
-                resulting <filename>.config</filename> file against an
-                existing original and gather those changes into a
-                <link linkend='creating-config-fragments'>configuration fragment file</link>
-                to be referenced from within the kernel's
-                <filename>.bbappend</filename> file.</para>
-
-                <para>Additionally, if you are working in a BSP layer
-                and need to modify the BSP's kernel's configuration,
-                you can use <filename>menuconfig</filename>.
-                </para></listitem>
-            <listitem><para>
-                <emphasis>Rebuild the Kernel Image With Your Changes:</emphasis>
-                Rebuilding the kernel image applies your changes.
-                Depending on your target hardware, you can verify your changes
-                on actual hardware or perhaps QEMU.
-                </para></listitem>
-        </orderedlist>
-        The remainder of this developer's guide covers common tasks typically
-        used during kernel development, advanced Metadata usage, and Yocto Linux
-        kernel maintenance concepts.
-    </para>
-</section>
-
-</chapter>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-maint-appx.rst b/poky/documentation/kernel-dev/kernel-dev-maint-appx.rst
index 5514dac..1788332 100644
--- a/poky/documentation/kernel-dev/kernel-dev-maint-appx.rst
+++ b/poky/documentation/kernel-dev/kernel-dev-maint-appx.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 ******************
 Kernel Maintenance
diff --git a/poky/documentation/kernel-dev/kernel-dev-maint-appx.xml b/poky/documentation/kernel-dev/kernel-dev-maint-appx.xml
deleted file mode 100644
index 3d9c7c6..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-maint-appx.xml
+++ /dev/null
@@ -1,357 +0,0 @@
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<appendix id='kernel-dev-maint-appx'>
-<title>Kernel Maintenance</title>
-
-    <section id='tree-construction'>
-        <title>Tree Construction</title>
-
-        <para>
-            This section describes construction of the Yocto Project kernel
-            source repositories as accomplished by the Yocto Project team to
-            create Yocto Linux kernel repositories.
-            These kernel repositories are found under the heading "Yocto Linux
-            Kernel" at
-            <ulink url='&YOCTO_GIT_URL;'>&YOCTO_GIT_URL;</ulink>
-            and are shipped as part of a Yocto Project release.
-            The team creates these repositories by compiling and executing the
-            set of feature descriptions for every BSP and feature in the
-            product.
-            Those feature descriptions list all necessary patches,
-            configurations, branches, tags, and feature divisions found in a
-            Yocto Linux kernel.
-            Thus, the Yocto Project Linux kernel repository (or tree) and
-            accompanying Metadata in the
-            <filename>yocto-kernel-cache</filename> are built.
-        </para>
-
-        <para>
-            The existence of these repositories allow you to access and clone a
-            particular Yocto Project Linux kernel repository and use it to
-            build images based on their configurations and features.
-        </para>
-
-        <para>
-            You can find the files used to describe all the valid features and
-            BSPs in the Yocto Project Linux kernel in any clone of the Yocto
-            Project Linux kernel source repository and
-            <filename>yocto-kernel-cache</filename> Git trees.
-            For example, the following commands clone the Yocto Project
-            baseline Linux kernel that branches off
-            <filename>linux.org</filename> version 4.12 and the
-            <filename>yocto-kernel-cache</filename>, which contains stores of
-            kernel Metadata:
-            <literallayout class='monospaced'>
-     $ git clone git://git.yoctoproject.org/linux-yocto-4.12
-     $ git clone git://git.yoctoproject.org/linux-kernel-cache
-            </literallayout>
-            For more information on how to set up a local Git repository of
-            the Yocto Project Linux kernel files, see the
-            "<link linkend='preparing-the-build-host-to-work-on-the-kernel'>Preparing the Build Host to Work on the Kernel</link>"
-            section.
-        </para>
-
-        <para>
-            Once you have cloned the kernel Git repository and the
-            cache of Metadata on your local machine, you can discover the
-            branches that are available in the repository using the following
-            Git command:
-            <literallayout class='monospaced'>
-     $ git branch -a
-            </literallayout>
-            Checking out a branch allows you to work with a particular
-            Yocto Linux kernel.
-            For example, the following commands check out the
-            "standard/beagleboard" branch of the Yocto Linux kernel repository
-            and the "yocto-4.12" branch of the
-            <filename>yocto-kernel-cache</filename> repository:
-            <literallayout class='monospaced'>
-     $ cd ~/linux-yocto-4.12
-     $ git checkout -b my-kernel-4.12 remotes/origin/standard/beagleboard
-     $ cd ~/linux-kernel-cache
-     $ git checkout -b my-4.12-metadata remotes/origin/yocto-4.12
-            </literallayout>
-            <note>
-                Branches in the <filename>yocto-kernel-cache</filename>
-                repository correspond to Yocto Linux kernel versions
-                (e.g. "yocto-4.12", "yocto-4.10", "yocto-4.9", and so forth).
-            </note>
-            Once you have checked out and switched to appropriate branches,
-            you can see a snapshot of all the kernel source files used to
-            used to build that particular Yocto Linux kernel for a
-            particular board.
-        </para>
-
-        <para>
-            To see the features and configurations for a particular Yocto
-            Linux kernel, you need to examine the
-            <filename>yocto-kernel-cache</filename> Git repository.
-            As mentioned, branches in the
-            <filename>yocto-kernel-cache</filename> repository correspond to
-            Yocto Linux kernel versions (e.g. <filename>yocto-4.12</filename>).
-            Branches contain descriptions in the form of
-            <filename>.scc</filename> and <filename>.cfg</filename> files.
-        </para>
-
-        <para>
-            You should realize, however, that browsing your local
-            <filename>yocto-kernel-cache</filename> repository for feature
-            descriptions and patches is not an effective way to determine what
-            is in a particular kernel branch.
-            Instead, you should use Git directly to discover the changes in
-            a branch.
-            Using Git is an efficient and flexible way to inspect changes to
-            the kernel.
-            <note>
-                Ground up reconstruction of the complete kernel tree is an
-                action only taken by the Yocto Project team during an active
-                development cycle.
-                When you create a clone of the kernel Git repository, you are
-                simply making it efficiently available for building and
-                development.
-            </note>
-        </para>
-
-        <para>
-            The following steps describe what happens when the Yocto Project
-            Team constructs the Yocto Project kernel source Git repository
-            (or tree) found at
-            <ulink url='&YOCTO_GIT_URL;'></ulink> given the
-            introduction of a new top-level kernel feature or BSP.
-            The following actions effectively provide the Metadata
-            and create the tree that includes the new feature, patch, or BSP:
-            <orderedlist>
-                <listitem><para>
-                    <emphasis>Pass Feature to the OpenEmbedded Build System:</emphasis>
-                    A top-level kernel feature is passed to the kernel build
-                    subsystem.
-                    Normally, this feature is a BSP for a particular kernel
-                    type.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Locate Feature:</emphasis>
-                    The file that describes the top-level feature is located
-                    by searching these system directories:
-                    <itemizedlist>
-                        <listitem><para>
-                            The in-tree kernel-cache directories, which are
-                            located in the
-                            <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache/tree/bsp'><filename>yocto-kernel-cache</filename></ulink>
-                            repository organized under the "Yocto Linux Kernel"
-                            heading in the
-                            <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
-                            </para></listitem>
-                        <listitem><para>
-                            Areas pointed to by <filename>SRC_URI</filename>
-                            statements found in kernel recipes
-                            </para></listitem>
-                    </itemizedlist>
-                    For a typical build, the target of the search is a
-                    feature description in an <filename>.scc</filename> file
-                    whose name follows this format (e.g.
-                    <filename>beaglebone-standard.scc</filename> and
-                    <filename>beaglebone-preempt-rt.scc</filename>):
-                    <literallayout class='monospaced'>
-     <replaceable>bsp_root_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
-                    </literallayout>
-                </para></listitem>
-                <listitem><para>
-                    <emphasis>Expand Feature:</emphasis>
-                    Once located, the feature description is either expanded
-                    into a simple script of actions, or into an existing
-                    equivalent script that is already part of the shipped
-                    kernel.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Append Extra Features:</emphasis>
-                    Extra features are appended to the top-level feature
-                    description.
-                    These features can come from the
-                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_FEATURES'><filename>KERNEL_FEATURES</filename></ulink>
-                    variable in recipes.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Locate, Expand, and Append Each Feature:</emphasis>
-                    Each extra feature is located, expanded and appended to
-                    the script as described in step three.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Execute the Script:</emphasis>
-                    The script is executed to produce files
-                    <filename>.scc</filename> and <filename>.cfg</filename>
-                    files in appropriate directories of the
-                    <filename>yocto-kernel-cache</filename> repository.
-                    These files are descriptions of all the branches, tags,
-                    patches and configurations that need to be applied to the
-                    base Git repository to completely create the
-                    source (build) branch for the new BSP or feature.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Clone Base Repository:</emphasis>
-                    The base repository is cloned, and the actions
-                    listed in the <filename>yocto-kernel-cache</filename>
-                    directories are applied to the tree.
-                    </para></listitem>
-                <listitem><para>
-                    <emphasis>Perform Cleanup:</emphasis>
-                    The Git repositories are left with the desired branches
-                    checked out and any required branching, patching and
-                    tagging has been performed.
-                    </para></listitem>
-            </orderedlist>
-        </para>
-
-        <para>
-            The kernel tree and cache are ready for developer consumption to
-            be locally cloned, configured, and built into a Yocto Project
-            kernel specific to some target hardware.
-            <note><title>Notes</title>
-                <itemizedlist>
-                    <listitem><para>
-                        The generated <filename>yocto-kernel-cache</filename>
-                        repository adds to the kernel as shipped with the Yocto
-                        Project release.
-                        Any add-ons and configuration data are applied to the
-                        end of an existing branch.
-                        The full repository generation that is found in the
-                        official Yocto Project kernel repositories at
-                        <ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>
-                        is the combination of all supported boards and
-                        configurations.
-                        </para></listitem>
-                    <listitem><para>
-                        The technique the Yocto Project team uses is flexible
-                        and allows for seamless blending of an immutable
-                        history with additional patches specific to a
-                        deployment.
-                        Any additions to the kernel become an integrated part
-                        of the branches.
-                        </para></listitem>
-                    <listitem><para>
-                        The full kernel tree that you see on
-                        <ulink url='&YOCTO_GIT_URL;'></ulink> is
-                        generated through repeating the above steps for all
-                        valid BSPs.
-                        The end result is a branched, clean history tree that
-                        makes up the kernel for a given release.
-                        You can see the script (<filename>kgit-scc</filename>)
-                        responsible for this in the
-                        <ulink url='&YOCTO_GIT_URL;/cgit.cgi/yocto-kernel-tools/tree/tools'><filename>yocto-kernel-tools</filename></ulink>
-                        repository.
-                        </para></listitem>
-                    <listitem><para>
-                        The steps used to construct the full kernel tree are
-                        the same steps that BitBake uses when it builds a
-                        kernel image.
-                        </para></listitem>
-                </itemizedlist>
-            </note>
-        </para>
-    </section>
-
-    <section id='build-strategy'>
-        <title>Build Strategy</title>
-
-        <para>
-            Once you have cloned a Yocto Linux kernel repository and the
-            cache repository (<filename>yocto-kernel-cache</filename>) onto
-            your development system, you can consider the compilation phase
-            of kernel development, which is building a kernel image.
-            Some prerequisites exist that are validated by the build process
-            before compilation starts:
-        </para>
-
-        <itemizedlist>
-            <listitem><para>
-                The
-                <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
-                points to the kernel Git repository.
-                </para></listitem>
-            <listitem><para>
-                A BSP build branch with Metadata exists in the
-                <filename>yocto-kernel-cache</filename> repository.
-                The branch is based on the Yocto Linux kernel version and
-                has configurations and features grouped under the
-                <filename>yocto-kernel-cache/bsp</filename> directory.
-                For example, features and configurations for the
-                BeagleBone Board assuming a
-                <filename>linux-yocto_4.12</filename> kernel reside in the
-                following area of the <filename>yocto-kernel-cache</filename>
-                repository:
-                <literallayout class='monospaced'>
-     yocto-kernel-cache/bsp/beaglebone
-                </literallayout>
-                <note>
-                    In the previous example, the "yocto-4.12" branch is
-                    checked out in the <filename>yocto-kernel-cache</filename>
-                    repository.
-                </note>
-                </para></listitem>
-        </itemizedlist>
-
-        <para>
-            The OpenEmbedded build system makes sure these conditions exist
-            before attempting compilation.
-            Other means, however, do exist, such as as bootstrapping a BSP.
-        </para>
-
-        <para>
-            Before building a kernel, the build process verifies the tree
-            and configures the kernel by processing all of the
-            configuration "fragments" specified by feature descriptions
-            in the <filename>.scc</filename> files.
-            As the features are compiled, associated kernel configuration
-            fragments are noted and recorded in the series of directories
-            in their compilation order.
-            The fragments are migrated, pre-processed and passed to the
-            Linux Kernel Configuration subsystem (<filename>lkc</filename>) as
-            raw input in the form of a <filename>.config</filename> file.
-            The <filename>lkc</filename> uses its own internal dependency
-            constraints to do the final processing of that information and
-            generates the final <filename>.config</filename> file that is used
-            during compilation.
-        </para>
-
-        <para>
-            Using the board's architecture and other relevant values from
-            the board's template, kernel compilation is started and a kernel
-            image is produced.
-        </para>
-
-        <para>
-            The other thing that you notice once you configure a kernel is that
-            the build process generates a build tree that is separate from
-            your kernel's local Git source repository tree.
-            This build tree has a name that uses the following form, where
-            <filename>${MACHINE}</filename> is the metadata name of the
-            machine (BSP) and "kernel_type" is one of the Yocto Project
-            supported kernel types (e.g. "standard"):
-        <literallayout class='monospaced'>
-     linux-${MACHINE}-<replaceable>kernel_type</replaceable>-build
-        </literallayout>
-        </para>
-
-        <para>
-            The existing support in the <filename>kernel.org</filename> tree
-            achieves this default functionality.
-        </para>
-
-        <para>
-            This behavior means that all the generated files for a particular
-            machine or BSP are now in the build tree directory.
-            The files include the final <filename>.config</filename> file,
-            all the <filename>.o</filename> files, the <filename>.a</filename>
-            files, and so forth.
-            Since each machine or BSP has its own separate
-            <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
-            in its own separate branch of the Git repository, you can easily
-            switch between different builds.
-        </para>
-    </section>
-</appendix>
-<!--
-vim: expandtab tw=80 ts=4
--->
diff --git a/poky/documentation/kernel-dev/kernel-dev-style.css b/poky/documentation/kernel-dev/kernel-dev-style.css
deleted file mode 100644
index fc6fbb8..0000000
--- a/poky/documentation/kernel-dev/kernel-dev-style.css
+++ /dev/null
@@ -1,991 +0,0 @@
-/*
-
-   SPDX-License-Identifier: CC-BY-2.0-UK
-
-   Generic XHTML / DocBook XHTML CSS Stylesheet.
-
-   Browser wrangling and typographic design by
-      Oyvind Kolas / pippin@gimp.org
-
-   Customised for Poky by
-      Matthew Allum / mallum@o-hand.com
-
-   Thanks to:
-     Liam R. E. Quin
-     William Skaggs
-     Jakub Steiner
-
-   Structure
-   ---------
-
-   The stylesheet is divided into the following sections:
-
-       Positioning
-          Margins, paddings, width, font-size, clearing.
-       Decorations
-          Borders, style
-       Colors
-          Colors
-       Graphics
-          Graphical backgrounds
-       Nasty IE tweaks
-          Workarounds needed to make it work in internet explorer,
-          currently makes the stylesheet non validating, but up until
-          this point it is validating.
-       Mozilla extensions
-          Transparency for footer
-	  Rounded corners on boxes
-
-*/
-
-
-  /*************** /
- /  Positioning   /
-/ ***************/
-
-body {
-  font-family: Verdana, Sans, sans-serif;
-
-  min-width: 640px;
-  width: 80%;
-  margin:  0em auto;
-  padding: 2em 5em 5em 5em;
-  color: #333;
-}
-
-h1,h2,h3,h4,h5,h6,h7 {
-  font-family: Arial, Sans;
-  color: #00557D;
-  clear: both;
-}
-
-h1 {
-  font-size: 2em;
-  text-align: left;
-  padding: 0em 0em 0em 0em;
-  margin: 2em 0em 0em 0em;
-}
-
-h2.subtitle {
-  margin: 0.10em 0em 3.0em 0em;
-  padding: 0em 0em 0em 0em;
-  font-size: 1.8em;
-  padding-left: 20%;
-  font-weight: normal;
-  font-style: italic;
-}
-
-h2 {
-  margin: 2em 0em 0.66em 0em;
-  padding: 0.5em 0em 0em 0em;
-  font-size: 1.5em;
-  font-weight: bold;
-}
-
-h3.subtitle {
-  margin: 0em 0em 1em 0em;
-  padding: 0em 0em 0em 0em;
-  font-size: 142.14%;
-  text-align: right;
-}
-
-h3 {
-  margin: 1em 0em 0.5em 0em;
-  padding: 1em 0em 0em 0em;
-  font-size: 140%;
-  font-weight: bold;
-}
-
-h4 {
-  margin: 1em 0em 0.5em 0em;
-  padding: 1em 0em 0em 0em;
-  font-size: 120%;
-  font-weight: bold;
-}
-
-h5 {
-  margin: 1em 0em 0.5em 0em;
-  padding: 1em 0em 0em 0em;
-  font-size: 110%;
-  font-weight: bold;
-}
-
-h6 {
-  margin: 1em 0em 0em 0em;
-  padding: 1em 0em 0em 0em;
-  font-size: 110%;
-  font-weight: bold;
-}
-
-.authorgroup {
-  background-color: transparent;
-  background-repeat: no-repeat;
-  padding-top: 256px;
-  background-image: url("figures/kernel-dev-title.png");
-  background-position: left top;
-  margin-top: -256px;
-  padding-right: 50px;
-  margin-left: 0px;
-  text-align: right;
-  width: 740px;
-}
-
-h3.author {
-  margin: 0em 0me 0em 0em;
-  padding: 0em 0em 0em 0em;
-  font-weight: normal;
-  font-size: 100%;
-  color: #333;
-  clear: both;
-}
-
-.author tt.email {
-  font-size: 66%;
-}
-
-.titlepage hr {
-  width: 0em;
-  clear: both;
-}
-
-.revhistory {
-  padding-top: 2em;
-  clear: both;
-}
-
-.toc,
-.list-of-tables,
-.list-of-examples,
-.list-of-figures {
-  padding: 1.33em 0em 2.5em 0em;
-  color: #00557D;
-}
-
-.toc p,
-.list-of-tables p,
-.list-of-figures p,
-.list-of-examples p {
-  padding: 0em 0em 0em 0em;
-  padding: 0em 0em 0.3em;
-  margin: 1.5em 0em 0em 0em;
-}
-
-.toc p b,
-.list-of-tables p b,
-.list-of-figures p b,
-.list-of-examples p b{
-  font-size: 100.0%;
-  font-weight: bold;
-}
-
-.toc dl,
-.list-of-tables dl,
-.list-of-figures dl,
-.list-of-examples dl {
-  margin: 0em 0em 0.5em 0em;
-  padding: 0em 0em 0em 0em;
-}
-
-.toc dt {
-  margin: 0em 0em 0em 0em;
-  padding: 0em 0em 0em 0em;
-}
-
-.toc dd {
-  margin: 0em 0em 0em 2.6em;
-  padding: 0em 0em 0em 0em;
-}
-
-div.glossary dl,
-div.variablelist dl {
-}
-
-.glossary dl dt,
-.variablelist dl dt,
-.variablelist dl dt span.term {
-  font-weight: normal;
-  width: 20em;
-  text-align: right;
-}
-
-.variablelist dl dt {
-  margin-top: 0.5em;
-}
-
-.glossary dl dd,
-.variablelist dl dd {
-  margin-top: -1em;
-  margin-left: 25.5em;
-}
-
-.glossary dd p,
-.variablelist dd p {
-  margin-top: 0em;
-  margin-bottom: 1em;
-}
-
-
-div.calloutlist table td {
-  padding: 0em 0em 0em 0em;
-  margin: 0em 0em 0em 0em;
-}
-
-div.calloutlist table td p {
-  margin-top: 0em;
-  margin-bottom: 1em;
-}
-
-div p.copyright {
-  text-align: left;
-}
-
-div.legalnotice p.legalnotice-title {
-  margin-bottom: 0em;
-}
-
-p {
-  line-height: 1.5em;
-  margin-top: 0em;
-
-}
-
-dl {
-  padding-top: 0em;
-}
-
-hr {
-  border: solid 1px;
-}
-
-
-.mediaobject,
-.mediaobjectco {
-  text-align: center;
-}
-
-img {
-  border: none;
-}
-
-ul {
-  padding: 0em 0em 0em 1.5em;
-}
-
-ul li {
-  padding: 0em 0em 0em 0em;
-}
-
-ul li p {
-  text-align: left;
-}
-
-table {
-  width :100%;
-}
-
-th {
-  padding: 0.25em;
-  text-align: left;
-  font-weight: normal;
-  vertical-align: top;
-}
-
-td {
-  padding: 0.25em;
-  vertical-align: top;
-}
-
-p a[id] {
-  margin: 0px;
-  padding: 0px;
-  display: inline;
-  background-image: none;
-}
-
-a {
-  text-decoration: underline;
-  color: #444;
-}
-
-pre {
-    overflow: auto;
-}
-
-a:hover {
-  text-decoration: underline;
-  /*font-weight: bold;*/
-}
-
-/* This style defines how the permalink character
-   appears by itself and when hovered over with
-   the mouse. */
-
-[alt='Permalink'] { color: #eee; }
-[alt='Permalink']:hover { color: black; }
-
-
-div.informalfigure,
-div.informalexample,
-div.informaltable,
-div.figure,
-div.table,
-div.example {
-  margin: 1em 0em;
-  padding: 1em;
-  page-break-inside: avoid;
-}
-
-
-div.informalfigure p.title b,
-div.informalexample p.title b,
-div.informaltable p.title b,
-div.figure p.title b,
-div.example p.title b,
-div.table p.title b{
-    padding-top: 0em;
-    margin-top: 0em;
-    font-size: 100%;
-    font-weight: normal;
-}
-
-.mediaobject .caption,
-.mediaobject .caption p  {
-  text-align: center;
-  font-size: 80%;
-  padding-top: 0.5em;
-  padding-bottom: 0.5em;
-}
-
-.epigraph {
-  padding-left: 55%;
-  margin-bottom: 1em;
-}
-
-.epigraph p {
-  text-align: left;
-}
-
-.epigraph .quote {
-  font-style: italic;
-}
-.epigraph .attribution {
-  font-style: normal;
-  text-align: right;
-}
-
-span.application {
-  font-style: italic;
-}
-
-.programlisting {
-  font-family: monospace;
-  font-size: 80%;
-  white-space: pre;
-  margin: 1.33em 0em;
-  padding: 1.33em;
-}
-
-.tip,
-.warning,
-.caution,
-.note {
-  margin-top: 1em;
-  margin-bottom: 1em;
-
-}
-
-/* force full width of table within div */
-.tip table,
-.warning table,
-.caution table,
-.note table {
-  border: none;
-  width: 100%;
-}
-
-
-.tip table th,
-.warning table th,
-.caution table th,
-.note table th {
-  padding: 0.8em 0.0em 0.0em 0.0em;
-  margin : 0em 0em 0em 0em;
-}
-
-.tip p,
-.warning p,
-.caution p,
-.note p {
-  margin-top: 0.5em;
-  margin-bottom: 0.5em;
-  padding-right: 1em;
-  text-align: left;
-}
-
-.acronym {
-  text-transform: uppercase;
-}
-
-b.keycap,
-.keycap {
-  padding: 0.09em 0.3em;
-  margin: 0em;
-}
-
-.itemizedlist li {
-  clear: none;
-}
-
-.filename {
-  font-size: medium;
-  font-family: Courier, monospace;
-}
-
-
-div.navheader, div.heading{
-  position: absolute;
-  left: 0em;
-  top: 0em;
-  width: 100%;
-  background-color: #cdf;
-  width: 100%;
-}
-
-div.navfooter, div.footing{
-  position: fixed;
-  left: 0em;
-  bottom: 0em;
-  background-color: #eee;
-  width: 100%;
-}
-
-
-div.navheader td,
-div.navfooter td {
-  font-size: 66%;
-}
-
-div.navheader table th {
-  /*font-family: Georgia, Times, serif;*/
-  /*font-size: x-large;*/
-  font-size: 80%;
-}
-
-div.navheader table {
-  border-left: 0em;
-  border-right: 0em;
-  border-top: 0em;
-  width: 100%;
-}
-
-div.navfooter table {
-  border-left: 0em;
-  border-right: 0em;
-  border-bottom: 0em;
-  width: 100%;
-}
-
-div.navheader table td a,
-div.navfooter table td a {
-  color: #777;
-  text-decoration: none;
-}
-
-/* normal text in the footer */
-div.navfooter table td {
-  color: black;
-}
-
-div.navheader table td a:visited,
-div.navfooter table td a:visited {
-  color: #444;
-}
-
-
-/* links in header and footer */
-div.navheader table td a:hover,
-div.navfooter table td a:hover {
-  text-decoration: underline;
-  background-color: transparent;
-  color: #33a;
-}
-
-div.navheader hr,
-div.navfooter hr {
-  display: none;
-}
-
-
-.qandaset tr.question td p {
-  margin: 0em 0em 1em 0em;
-  padding: 0em 0em 0em 0em;
-}
-
-.qandaset tr.answer td p {
-  margin: 0em 0em 1em 0em;
-  padding: 0em 0em 0em 0em;
-}
-.answer td {
-  padding-bottom: 1.5em;
-}
-
-.emphasis {
-  font-weight: bold;
-}
-
-
-  /************* /
- / decorations  /
-/ *************/
-
-.titlepage {
-}
-
-.part .title {
-}
-
-.subtitle {
-    border: none;
-}
-
-/*
-h1 {
-  border: none;
-}
-
-h2 {
-  border-top: solid 0.2em;
-  border-bottom: solid 0.06em;
-}
-
-h3 {
-  border-top: 0em;
-  border-bottom: solid 0.06em;
-}
-
-h4 {
-  border: 0em;
-  border-bottom: solid 0.06em;
-}
-
-h5 {
-  border: 0em;
-}
-*/
-
-.programlisting {
-  border: solid 1px;
-}
-
-div.figure,
-div.table,
-div.informalfigure,
-div.informaltable,
-div.informalexample,
-div.example {
-  border: 1px solid;
-}
-
-
-
-.tip,
-.warning,
-.caution,
-.note {
-  border: 1px solid;
-}
-
-.tip table th,
-.warning table th,
-.caution table th,
-.note table th {
-  border-bottom: 1px solid;
-}
-
-.question td {
-  border-top: 1px solid black;
-}
-
-.answer {
-}
-
-
-b.keycap,
-.keycap {
-  border: 1px solid;
-}
-
-
-div.navheader, div.heading{
-  border-bottom: 1px solid;
-}
-
-
-div.navfooter, div.footing{
-  border-top: 1px solid;
-}
-
-  /********* /
- /  colors  /
-/ *********/
-
-body {
-  color: #333;
-  background: white;
-}
-
-a {
-  background: transparent;
-}
-
-a:hover {
-  background-color: #dedede;
-}
-
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-h7,
-h8 {
-  background-color: transparent;
-}
-
-hr {
-  border-color: #aaa;
-}
-
-
-.tip, .warning, .caution, .note {
-  border-color: #fff;
-}
-
-
-.tip table th,
-.warning table th,
-.caution table th,
-.note table th {
-  border-bottom-color: #fff;
-}
-
-
-.warning {
-  background-color: #f0f0f2;
-}
-
-.caution {
-  background-color: #f0f0f2;
-}
-
-.tip {
-  background-color: #f0f0f2;
-}
-
-.note {
-  background-color: #f0f0f2;
-}
-
-.glossary dl dt,
-.variablelist dl dt,
-.variablelist dl dt span.term {
-  color: #044;
-}
-
-div.figure,
-div.table,
-div.example,
-div.informalfigure,
-div.informaltable,
-div.informalexample {
-  border-color: #aaa;
-}
-
-pre.programlisting {
-  color: black;
-  background-color: #fff;
-  border-color: #aaa;
-  border-width: 2px;
-}
-
-.guimenu,
-.guilabel,
-.guimenuitem {
-  background-color: #eee;
-}
-
-
-b.keycap,
-.keycap {
-  background-color: #eee;
-  border-color: #999;
-}
-
-
-div.navheader {
-  border-color: black;
-}
-
-
-div.navfooter {
-  border-color: black;
-}
-
-.writernotes {
-  color: red;
-}
-
-
-  /*********** /
- /  graphics  /
-/ ***********/
-
-/*
-body {
-  background-image: url("images/body_bg.jpg");
-  background-attachment: fixed;
-}
-
-.navheader,
-.note,
-.tip {
-  background-image: url("images/note_bg.jpg");
-  background-attachment: fixed;
-}
-
-.warning,
-.caution {
-  background-image: url("images/warning_bg.jpg");
-  background-attachment: fixed;
-}
-
-.figure,
-.informalfigure,
-.example,
-.informalexample,
-.table,
-.informaltable {
-  background-image: url("images/figure_bg.jpg");
-  background-attachment: fixed;
-}
-
-*/
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-h7{
-}
-
-/*
-Example of how to stick an image as part of the title.
-
-div.article .titlepage .title
-{
-  background-image: url("figures/white-on-black.png");
-  background-position: center;
-  background-repeat: repeat-x;
-}
-*/
-
-div.preface .titlepage .title,
-div.colophon .title,
-div.chapter .titlepage .title,
-div.article .titlepage .title
-{
-}
-
-div.section div.section .titlepage .title,
-div.sect2 .titlepage .title {
-    background: none;
-}
-
-
-h1.title {
-  background-color: transparent;
-  background-repeat: no-repeat;
-  height: 256px;
-  text-indent: -9000px;
-  overflow:hidden;
-}
-
-h2.subtitle {
-  background-color: transparent;
-  text-indent: -9000px;
-  overflow:hidden;
-  width: 0px;
-  display: none;
-}
-
-  /*************************************** /
- /  pippin.gimp.org specific alterations  /
-/ ***************************************/
-
-/*
-div.heading, div.navheader {
-  color: #777;
-  font-size: 80%;
-  padding: 0;
-  margin: 0;
-  text-align: left;
-  position: absolute;
-  top: 0px;
-  left: 0px;
-  width: 100%;
-  height: 50px;
-  background: url('/gfx/heading_bg.png') transparent;
-  background-repeat: repeat-x;
-  background-attachment: fixed;
-  border: none;
-}
-
-div.heading a {
-  color: #444;
-}
-
-div.footing, div.navfooter {
-  border: none;
-  color: #ddd;
-  font-size: 80%;
-  text-align:right;
-
-  width: 100%;
-  padding-top: 10px;
-  position: absolute;
-  bottom: 0px;
-  left: 0px;
-
-  background: url('/gfx/footing_bg.png') transparent;
-}
-*/
-
-
-
-  /****************** /
- /  nasty ie tweaks  /
-/ ******************/
-
-/*
-div.heading, div.navheader {
-  width:expression(document.body.clientWidth + "px");
-}
-
-div.footing, div.navfooter {
-  width:expression(document.body.clientWidth + "px");
-  margin-left:expression("-5em");
-}
-body {
-  padding:expression("4em 5em 0em 5em");
-}
-*/
-
-  /**************************************** /
- / mozilla vendor specific css extensions  /
-/ ****************************************/
-/*
-div.navfooter, div.footing{
-  -moz-opacity: 0.8em;
-}
-
-div.figure,
-div.table,
-div.informalfigure,
-div.informaltable,
-div.informalexample,
-div.example,
-.tip,
-.warning,
-.caution,
-.note {
-  -moz-border-radius: 0.5em;
-}
-
-b.keycap,
-.keycap {
-  -moz-border-radius: 0.3em;
-}
-*/
-
-table tr td table tr td {
-  display: none;
-}
-
-
-hr {
-  display: none;
-}
-
-table {
-  border: 0em;
-}
-
- .photo {
-  float: right;
-  margin-left:   1.5em;
-  margin-bottom: 1.5em;
-  margin-top: 0em;
-  max-width:      17em;
-  border:     1px solid gray;
-  padding:    3px;
-  background: white;
-}
- .seperator {
-   padding-top: 2em;
-   clear: both;
-  }
-
-  #validators {
-      margin-top: 5em;
-      text-align: right;
-      color: #777;
-  }
-  @media print {
-      body {
-          font-size: 8pt;
-      }
-      .noprint {
-          display: none;
-      }
-  }
-
-
-.tip,
-.note {
-   background: #f0f0f2;
-   color: #333;
-   padding: 20px;
-   margin: 20px;
-}
-
-.tip h3,
-.note h3 {
-   padding: 0em;
-   margin: 0em;
-   font-size: 2em;
-   font-weight: bold;
-   color: #333;
-}
-
-.tip a,
-.note a {
-   color: #333;
-   text-decoration: underline;
-}
-
-.footnote {
-   font-size: small;
-   color: #333;
-}
-
-/* Changes the announcement text */
-.tip h3,
-.warning h3,
-.caution h3,
-.note h3 {
-   font-size:large;
-   color: #00557D;
-}
diff --git a/poky/documentation/kernel-dev/kernel-dev.rst b/poky/documentation/kernel-dev/kernel-dev.rst
index 332e089..55b42ed 100644
--- a/poky/documentation/kernel-dev/kernel-dev.rst
+++ b/poky/documentation/kernel-dev/kernel-dev.rst
@@ -1,4 +1,4 @@
-.. SPDX-License-Identifier: CC-BY-2.0-UK
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
 
 =============================================
 Yocto Project Linux Kernel Development Manual
diff --git a/poky/documentation/kernel-dev/kernel-dev.xml b/poky/documentation/kernel-dev/kernel-dev.xml
deleted file mode 100755
index 887ff83..0000000
--- a/poky/documentation/kernel-dev/kernel-dev.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
-[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
-<!--SPDX-License-Identifier: CC-BY-2.0-UK-->
-
-<book id='kernel-dev' lang='en'
-      xmlns:xi="http://www.w3.org/2003/XInclude"
-      xmlns="http://docbook.org/ns/docbook"
-      >
-    <bookinfo>
-
-        <mediaobject>
-            <imageobject>
-                <imagedata fileref='figures/kernel-dev-title.png'
-                    format='SVG'
-                    align='left' scalefit='1' width='100%'/>
-            </imageobject>
-        </mediaobject>
-
-        <title>
-		  Yocto Project Linux Kernel Development Manual
-		</title>
-
-        <authorgroup>
-            <author>
-                <affiliation>
-                    <orgname>&ORGNAME;</orgname>
-                </affiliation>
-                <email>&ORGEMAIL;</email>
-            </author>
-        </authorgroup>
-
-        <revhistory>
-            <revision>
-                <revnumber>1.4</revnumber>
-                <date>April 2013</date>
-                <revremark>The initial document released with the Yocto Project 1.4 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>1.5</revnumber>
-                <date>October 2013</date>
-                <revremark>Released with the Yocto Project 1.5 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>1.6</revnumber>
-                <date>April 2014</date>
-                <revremark>Released with the Yocto Project 1.6 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>1.7</revnumber>
-                <date>October 2014</date>
-                <revremark>Released with the Yocto Project 1.7 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>1.8</revnumber>
-                <date>April 2015</date>
-                <revremark>Released with the Yocto Project 1.8 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.0</revnumber>
-                <date>October 2015</date>
-                <revremark>Released with the Yocto Project 2.0 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.1</revnumber>
-                <date>April 2016</date>
-                <revremark>Released with the Yocto Project 2.1 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.2</revnumber>
-                <date>October 2016</date>
-                <revremark>Released with the Yocto Project 2.2 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.3</revnumber>
-                <date>May 2017</date>
-                <revremark>Released with the Yocto Project 2.3 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.4</revnumber>
-                <date>October 2017</date>
-                <revremark>Released with the Yocto Project 2.4 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.5</revnumber>
-                <date>May 2018</date>
-                <revremark>Released with the Yocto Project 2.5 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.6</revnumber>
-                <date>November 2018</date>
-                <revremark>Released with the Yocto Project 2.6 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>2.7</revnumber>
-                <date>May 2019</date>
-                <revremark>Released with the Yocto Project 2.7 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>3.0</revnumber>
-                <date>October 2019</date>
-                <revremark>Released with the Yocto Project 3.0 Release.</revremark>
-            </revision>
-            <revision>
-                <revnumber>3.1</revnumber>
-                <date>&REL_MONTH_YEAR;</date>
-                <revremark>Released with the Yocto Project 3.1 Release.</revremark>
-            </revision>
-        </revhistory>
-
-    <copyright>
-      <year>&COPYRIGHT_YEAR;</year>
-      <holder>Linux Foundation</holder>
-    </copyright>
-
-    <legalnotice>
-      <para>
-        Permission is granted to copy, distribute and/or modify this document under
-        the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
-      </para>
-           <note><title>Manual Notes</title>
-               <itemizedlist>
-                   <listitem><para>
-                       This version of the
-                       <emphasis>Yocto Project Linux Kernel Development Manual</emphasis>
-                       is for the &YOCTO_DOC_VERSION; release of the
-                       Yocto Project.
-                       To be sure you have the latest version of the manual
-                       for this release, go to the
-                       <ulink url='&YOCTO_DOCS_URL;'>Yocto Project documentation page</ulink>
-                       and select the manual from that site.
-                       Manuals from the site are more up-to-date than manuals
-                       derived from the Yocto Project released TAR files.
-                       </para></listitem>
-                   <listitem><para>
-                       If you located this manual through a web search, the
-                       version of the manual might not be the one you want
-                       (e.g. the search might have returned a manual much
-                       older than the Yocto Project version with which you
-                       are working).
-                       You can see all Yocto Project major releases by
-                       visiting the
-                       <ulink url='&YOCTO_WIKI_URL;/wiki/Releases'>Releases</ulink>
-                       page.
-                       If you need a version of this manual for a different
-                       Yocto Project release, visit the
-                       <ulink url='&YOCTO_DOCS_URL;'>Yocto Project documentation page</ulink>
-                       and select the manual set by using the
-                       "ACTIVE RELEASES DOCUMENTATION" or "DOCUMENTS ARCHIVE"
-                       pull-down menus.
-                       </para></listitem>
-                   <listitem>
-                       <para>
-                       To report any inaccuracies or problems with this
-                       (or any other Yocto Project) manual, send an email to
-                       the Yocto Project documentation mailing list at
-                       <filename>docs@lists.yoctoproject.org</filename> or
-                       log into the freenode <filename>#yocto</filename> channel.
-                       </para>
-                   </listitem>
-               </itemizedlist>
-           </note>
-    </legalnotice>
-
-    </bookinfo>
-
-    <xi:include href="kernel-dev-intro.xml"/>
-
-    <xi:include href="kernel-dev-common.xml"/>
-
-    <xi:include href="kernel-dev-advanced.xml"/>
-
-    <xi:include href="kernel-dev-concepts-appx.xml"/>
-
-    <xi:include href="kernel-dev-maint-appx.xml"/>
-
-    <xi:include href="kernel-dev-faq.xml"/>
-
-<!--    <index id='index'>
-      <title>Index</title>
-    </index>
--->
-
-</book>
-<!--
-vim: expandtab tw=80 ts=4
--->
