<!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-intro'>
<title>Introduction</title>

<!--
<para>
    <emphasis>AR - Darrren Hart:</emphasis>  See if the concepts in these
    three bullets are adequately covered in somewhere in this manual:
    <itemizedlist>
        <listitem><para>Do we convey that our kernel Git repositories
            have a clear and continuous history, similar to the way the
            kernel Git repositories for <filename>kernel.org</filename>
            do.
            </para></listitem>
        <listitem><para>Does the manual note that Yocto Project delivers
            a key set of supported kernel types, where
            each type is tailored to meet a specific use (e.g. networking,
            consumer, devices, and so forth).</para></listitem>
        <listitem><para>Do we convey that the Yocto Project uses a
            Git branching strategy that, from a
            developer's point of view, results in a linear path from the
            baseline kernel.org, through a select group of features and
            ends with their BSP-specific commits.</para></listitem>
    </itemizedlist>
</para>
-->

    <section id='kernel-dev-overview'>
        <title>Overview</title>

        <para>
            Regardless of how you intend to make use of the Yocto Project,
            chances are you will work with the Linux kernel.
            This manual provides background information on the Yocto Linux kernel
            <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>,
            describes common tasks you can perform using the kernel tools,
            and shows you how to use the kernel Metadata needed to work with
            the kernel inside the Yocto Project.
       </para>

       <para>
            Each Yocto Project release has a set of linux-yocto recipes, whose
            Git repositories you can view in the Yocto
            <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> under
            the "Yocto Linux Kernel" heading.
            New recipes for the release track the latest upstream developments
            and introduce newly supported platforms.
            Previous recipes in the release are refreshed and supported for at
            least one additional release.
            As they align, these previous releases are updated to include the
            latest from the Long Term Support Initiative (LTSI) project.
            Also included is a linux-yocto development recipe
            (<filename>linux-yocto-dev.bb</filename>) should you want to work
            with the very latest in upstream Linux kernel development and
            kernel Metadata development.
        </para>

        <para>
            The Yocto Project also provides a powerful set of kernel
            tools for managing Linux kernel sources and configuration data.
            You can use these tools to make a single configuration change,
            apply multiple patches, or work with your own kernel sources.
        </para>

        <para>
            In particular, the kernel tools allow you to generate configuration
            fragments that specify only what you must, and nothing more.
            Configuration fragments only need to contain the highest level
            visible <filename>CONFIG</filename> options as presented by the Linux
            kernel <filename>menuconfig</filename> system.
            Contrast this against a complete Linux kernel
            <filename>.config</filename>, which includes all the automatically
            selected <filename>CONFIG</filename> options.
            This efficiency reduces your maintenance effort and allows you
            to further separate your configuration in ways that make sense for
            your project.
            A common split separates policy and hardware.
            For example, all your kernels might support
            the <filename>proc</filename> and <filename>sys</filename> filesystems,
            but only specific boards require sound, USB, or specific drivers.
            Specifying these configurations individually allows you to aggregate
            them together as needed, but maintains them in only one place.
            Similar logic applies to separating source changes.
        </para>

        <para>
            If you do not maintain your own kernel sources and need to make
            only minimal changes to the sources, the released recipes provide a
            vetted base upon which to layer your changes.
            Doing so allows you to benefit from the continual kernel
            integration and testing performed during development of the
            Yocto Project.
        </para>

        <para>
            If, instead, you have a very specific Linux kernel source tree
            and are unable to align with one of the official linux-yocto
            recipes, an alternative exists by which you can use the Yocto
            Project Linux kernel tools with your own kernel sources.
        </para>
    </section>

    <section id='kernel-dev-other-resources'>
        <title>Other Resources</title>

        <para>
            The sections that follow provide instructions for completing
            specific Linux kernel development tasks.
            These instructions assume you are comfortable working with
            <ulink url='http://openembedded.org/wiki/Bitbake'>BitBake</ulink>
            recipes and basic open-source development tools.
            Understanding these concepts will facilitate the process of working
            with the kernel recipes.
            If you find you need some additional background, please be sure to
            review and understand the following documentation:
            <itemizedlist>
                <listitem><para><ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
                    </para></listitem>
                <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-modifying-source-code'>Modifying Source Code</ulink>"
                    section in the Yocto Project Development Manual
                    </para></listitem>
                <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>" section
                    in the Yocto Project Development Manual</para></listitem>
                <listitem><para>The "<ulink url='&YOCTO_DOCS_DEV_URL;#modifying-the-kernel'>Modifying the Kernel</ulink>" section
                    in the Yocto Project Development Manual.</para></listitem>
            </itemizedlist>
        </para>

        <para>
            Finally, while this document focuses on the manual creation of
            recipes, patches, and configuration files, the Yocto Project
            Board Support Package (BSP) tools are available to automate
            this process with existing content and work well to create the
            initial framework and boilerplate code.
            For details on these tools, see the
            "<ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>Using the Yocto Project's BSP Tools</ulink>"
            section in the Yocto Project Board Support Package (BSP) Developer's
            Guide.
        </para>
    </section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
