<!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='dev-manual-intro'>

<title>The Yocto Project Development Tasks Manual</title>
    <section id='dev-welcome'>
        <title>Welcome</title>

        <para>
            Welcome to the Yocto Project Development Tasks Manual!
            This manual provides relevant procedures necessary for developing
            in the Yocto Project environment (i.e. developing embedded Linux
            images and user-space applications that run on targeted devices).
            The manual groups related procedures into higher-level sections.
            Procedures can consist of high-level steps or low-level steps
            depending on the topic.
            You can find conceptual information related to a procedure by
            following appropriate links to the Yocto Project Reference
            Manual.
        </para>

        <para>
            The following list describes what you can get from this manual:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Setup Procedures:</emphasis>
                    Procedures that show you how to set
                    up a Yocto Project Development environment and how
                    to accomplish the change workflow through logging
                    defects and submitting changes.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Emulation Procedures:</emphasis>
                    Procedures that show you how to use the
                    Yocto Project integrated QuickEMUlator (QEMU), which lets
                    you simulate running on hardware an image you have built
                    using the OpenEmbedded build system.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Common Procedures:</emphasis>
                    Procedures related to "everyday" tasks you perform while
                    developing images and applications using the Yocto
                    Project.
                    </para></listitem>
            </itemizedlist>
        </para>

        <para>
            This manual will not give you the following:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Redundant Step-by-step Instructions:</emphasis>
                    For example, the
                    <ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
                    manual contains detailed instructions on how to install an
                    SDK, which is used to develop applications for target
                    hardware.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Reference or Conceptual Material:</emphasis>
                    This type of material resides in an appropriate reference manual.
                    For example, system variables are documented in the
                    <ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Detailed Public Information Not Specific to the
                    Yocto Project:</emphasis>
                    For example, exhaustive information on how to use the
                    Source Control Manager Git is better covered with Internet
                    searches and official Git Documentation than through the
                    Yocto Project documentation.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='other-information'>
        <title>Other Information</title>

        <para>
            Because this manual presents information for many different
            topics, supplemental information is recommended for full
            comprehension.
            For introductory information on the Yocto Project, see the
            <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>.
            You can find an introductory to using the Yocto Project by working
            through the
            <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
        </para>

        <para>
            For a comprehensive list of links and other documentation, see the
            "<ulink url='&YOCTO_DOCS_REF_URL;#resources-links-and-related-documentation'>Links and Related Documentation</ulink>"
            section in the Yocto Project Reference Manual.
        </para>

        <para>
        </para>
    </section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
