<!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; ] >

<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", which is fine if you are
                        building for the QEMU emulator in 32-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>This example uses the default "qemux86" for the
                        <filename>MACHINE</filename> variable but needs to
                        add the "kernel-modules":
                        <literallayout class='monospaced'>
     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", which is fine if you are
                        building for the QEMU emulator in 32-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>This example uses the default "qemux86" for the
                        <filename>MACHINE</filename> variable but needs to
                        add the "kernel-modules":
                        <literallayout class='monospaced'>
     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"
     KBRANCH_mpc8315e-rdb = "standard/fsl-mpc8315e-rdb"

     SRCREV_machine_genericx86    ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
     SRCREV_machine_genericx86-64 ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
     SRCREV_machine_edgerouter ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
     SRCREV_machine_beaglebone ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
     SRCREV_machine_mpc8315e-rdb ?= "2d1d010240846d7bff15d1fcc0cb6eb8a22fc78a"


     COMPATIBLE_MACHINE_genericx86 = "genericx86"
     COMPATIBLE_MACHINE_genericx86-64 = "genericx86-64"
     COMPATIBLE_MACHINE_edgerouter = "edgerouter"
     COMPATIBLE_MACHINE_beaglebone = "beaglebone"
     COMPATIBLE_MACHINE_mpc8315e-rdb = "mpc8315e-rdb"

     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"
     LINUX_VERSION_mpc8315e-rdb = "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 appends the
                <filename>KBUILD_DEFCONFIG</filename> variable with
                "common-pc" and provides the path to the "in-tree"
                <filename>defconfig</filename> file:
                <literallayout class='monospaced'>
     KBUILD_DEFCONFIG_common-pc ?= "/home/scottrif/configfiles/my_defconfig_file"
                </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
-->
