<!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 launch it using
                BitBake.
                Thus, the environment must be set up using 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>.
                You must also be sure of the state of your build's
                configuration in the
                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
                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
-->
