<!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;#setting-up-the-development-host-to-use-the-yocto-project'>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
-->
