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

<section id='sdk-manual-intro'>
    <title>Introduction</title>

    <para>
        Welcome to the Yocto Project Software Development Kit (SDK)
        Developer's Guide.
        This manual provides information that lets you use both the standard
        Yocto Project SDK and an extensible SDK to develop applications and
        images using the Yocto Project.
        Additionally, the manual also provides information on how to use
        the popular <trademark class='trade'>Eclipse</trademark> IDE as part
        of your application development workflow.
    </para>

    <para>
        Prior to the 2.0 Release of the Yocto Project, application
        development was primarily accomplished through the use of the
        Application Development Toolkit (ADT) and the availability
        of stand-alone cross-development toolchains and other tools.
        With the 2.1 Release of the Yocto Project, application development
        has transitioned to within a more traditional SDK and extensible
        SDK.
    </para>

    <para>
        A standard SDK consists of a cross-development toolchain that contains
        a compiler, debugger, and various miscellaneous tools; libraries,
        headers, and symbols to match an image; and environment setup script.
        You can use this SDK to independently develop and test code that is
        destined to run on some target machine.
    </para>

    <para>
        An extensible SDK consists of everything that the standard SDK has plus
        tools that allow you to easily add new applications and libraries to
        an image, modify the source of an existing component, test changes on
        the target hardware, and easily integrate an application into the
        <ulink url='&YOCTO_DOCS_DEV_URL;#build-system-term'>OpenEmbedded build system</ulink>.
    </para>

    <para>
        SDKs are completely self-contained.
        The binaries are linked against their own copy of
        <filename>libc</filename>, which results in no dependencies
        on the target system.
        To achieve this, the pointer to the dynamic loader is
        configured at install time since that path cannot be dynamically
        altered.
        This is the reason for a wrapper around the
        <filename>populate_sdk</filename> and
        <filename>populate_sdk_ext</filename> archives.
    </para>

    <para>
        Another feature for the SDKs is that only one set of cross-canadian
        toolchain binaries are produced per architecture.
        This feature takes advantage of the fact that the target hardware can
        be passed to <filename>gcc</filename> as a set of compiler options.
        Those options are set up by the environment script and contained in
        variables such as
        <ulink url='&YOCTO_DOCS_REF_URL;#var-CC'><filename>CC</filename></ulink>
        and
        <ulink url='&YOCTO_DOCS_REF_URL;#var-LD'><filename>LD</filename></ulink>.
        This reduces the space needed for the tools.
        Understand, however, that a sysroot is still needed for every target
        since those binaries are target-specific.
    </para>

    <para>
        Going beyond the actual SDK, the SDK development environment consists
        of the following:
        <itemizedlist>
            <listitem><para>An architecture-specific cross-toolchain and
                matching sysroots (target and native) all built by the
                OpenEmbedded build system.
                The toolchain and sysroots are based on a
                <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
                configuration and extensions,
                which allows you to cross-develop on the host machine for the
                target hardware.
                </para></listitem>
            <listitem><para>The Quick EMUlator (QEMU), which lets you simulate
                target hardware.
                QEMU is not literally part of the SDK.
                You must build and include this emulator separately.
                However, QEMU plays an important role in the development
                process that revolves around use of and SDK.
                </para></listitem>
            <listitem><para>The Eclipse IDE Yocto Plug-in.
                This plug-in is also available for you if you are an Eclipse
                user.
                In the same manner as QEMU, the plug-in is not literally part
                of the SDK but is rather available for use as part of the
                development process.
                </para></listitem>
            <listitem><para>Various user-space tools that greatly enhance
                your application development experience.
                These tools are also separate from the actual SDK but can be
                independently obtained and used in the development process.
                </para></listitem>
        </itemizedlist>
    </para>

    <section id='the-cross-development-toolchain'>
        <title>The Cross-Development Toolchain</title>

        <para>
            The
            <ulink url='&YOCTO_DOCS_DEV_URL;#cross-development-toolchain'>Cross-Development Toolchain</ulink>
            consists of a cross-compiler, cross-linker, and cross-debugger
            that are used to develop user-space applications for targeted
            hardware.
            This toolchain is created by running a toolchain installer script
            or through a
            <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
            that is based on your Metadata configuration or extension for
            your targeted device.
            The cross-toolchain works with a matching target sysroot.
        </para>
    </section>

    <section id='sysroot'>
        <title>Sysroots</title>

        <para>
            The native and target sysroots contain needed headers and libraries
            for generating binaries that run on the target architecture.
            The target sysroot is based on the target root filesystem image
            that is built by the OpenEmbedded build system and uses the same
            Metadata configuration used to build the cross-toolchain.
        </para>
    </section>

    <section id='the-qemu-emulator'>
        <title>The QEMU Emulator</title>

        <para>
            The QEMU emulator allows you to simulate your hardware while
            running your application or image.
            QEMU is not part of the SDK but is made available a number of ways:
            <itemizedlist>
                <listitem><para>
                    If you have cloned the <filename>poky</filename> Git
                    repository to create a
                    <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
                    and you have sourced the environment setup script, QEMU is
                    installed and automatically available.
                    </para></listitem>
                <listitem><para>
                    If you have downloaded a Yocto Project release and unpacked
                    it to create a
                    <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
                    and you have sourced the environment setup script, QEMU is
                    installed and automatically available.
                    </para></listitem>
                <listitem><para>
                    If you have installed the cross-toolchain tarball and you
                    have sourced the toolchain's setup environment script, QEMU
                    is also installed and automatically available.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='eclipse-overview'>
        <title>Eclipse Yocto Plug-in</title>

        <para>
            The Eclipse IDE is a popular development environment and it fully
            supports development using the Yocto Project.
            When you install and configure the Eclipse Yocto Project Plug-in
            into the Eclipse IDE, you maximize your Yocto Project experience.
            Installing and configuring the Plug-in results in an environment
            that has extensions specifically designed to let you more easily
            develop software.
            These extensions allow for cross-compilation, deployment, and
            execution of your output into a QEMU emulation session.
            You can also perform cross-debugging and profiling.
            The environment also supports a suite of tools that allows you to
            perform remote profiling, tracing, collection of power data,
            collection of latency data, and collection of performance data.
        </para>

        <para>
            For information about the application development workflow that
            uses the Eclipse IDE and for a detailed example of how to install
            and configure the Eclipse Yocto Project Plug-in, see the
            "<link link='sdk-developing-applications-using-eclipse'>Developing Applications Using <trademark class='trade'>Eclipse</trademark></link>"
            section.
        </para>
    </section>

    <section id='user-space-tools'>
        <title>User-Space Tools</title>

        <para>
            User-space tools are available as part of the SDK development
            process and can be helpful.
            The tools include LatencyTOP, PowerTOP, Perf, SystemTap,
            and Lttng-ust.
            These tools are common development tools for the Linux platform.
            <itemizedlist>
                <listitem><para><emphasis>LatencyTOP:</emphasis> LatencyTOP
                    focuses on latency that causes skips in audio, stutters in
                    your desktop experience, or situations that overload your
                    server even when you have plenty of CPU power left.
                    </para></listitem>
                <listitem><para><emphasis>PowerTOP:</emphasis> Helps you
                    determine what software is using the most power.
                    You can find out more about PowerTOP at
                    <ulink url='https://01.org/powertop/'></ulink>.</para></listitem>
                <listitem><para><emphasis>Perf:</emphasis> Performance counters
                    for Linux used to keep track of certain types of hardware
                    and software events.
                    For more information on these types of counters see
                    <ulink url='https://perf.wiki.kernel.org/'></ulink>.
                    For examples on how to setup and use this tool, see the
                    "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-perf'>perf</ulink>"
                    section in the Yocto Project Profiling and Tracing Manual.
                    </para></listitem>
                <listitem><para><emphasis>SystemTap:</emphasis> A free software
                    infrastructure that simplifies information gathering about
                    a running Linux system.
                    This information helps you diagnose performance or
                    functional problems.
                    SystemTap is not available as a user-space tool through
                    the Eclipse IDE Yocto Plug-in.
                    See <ulink url='http://sourceware.org/systemtap'></ulink>
                    for more information on SystemTap.
                    For examples on how to setup and use this tool, see the
                    "<ulink url='&YOCTO_DOCS_PROF_URL;#profile-manual-systemtap'>SystemTap</ulink>"
                    section in the Yocto Project Profiling and Tracing Manual.
                    </para></listitem>
                <listitem><para><emphasis>Lttng-ust:</emphasis> A User-space
                    Tracer designed to provide detailed information on
                    user-space activity.
                    See <ulink url='http://lttng.org/ust'></ulink> for more
                    information on Lttng-ust.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='sdk-development-model'>
    <title>SDK Development Model</title>

    <para>
        Fundamentally, the SDK fits into the development process as follows:
        <imagedata fileref="figures/sdk-environment.png" align="center" width="6in" depth="5in" scalefit="100" />
        The SDK is installed on any machine and can be used to develop
        applications, images, and kernels.
        An SDK can even be used by a QA Engineer or Release Engineer.
        The fundamental concept is that the machine that has the SDK installed
        does not have to be associated with the machine that has the
        Yocto Project installed.
        A developer can independently compile and test an object on their
        machine and then, when the object is ready for integration into an
        image, they can simply make it available to the machine that has the
        the Yocto Project.
        Once the object is available, the image can be rebuilt using the
        Yocto Project to produce the modified image.
    </para>

    <para>
        You just need to follow these general steps:
        <orderedlist>
            <listitem><para><emphasis>Install the SDK for your target hardware:</emphasis>
                For information on how to install the SDK, see the
                "<link url='sdk-installing-the-sdk'>Installing the SDK</link>"
                section.</para></listitem>
            <listitem><para><emphasis>Download the Target Image:</emphasis>
                The Yocto Project supports several target architectures
                and has many pre-built kernel images and root filesystem
                images.</para>
                <para>If you are going to develop your application on
                hardware, go to the
                <ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
                download area and choose a target machine area
                from which to download the kernel image and root filesystem.
                This download area could have several files in it that
                support development using actual hardware.
                For example, the area might contain
                <filename>.hddimg</filename> files that combine the
                kernel image with the filesystem, boot loaders, and
                so forth.
                Be sure to get the files you need for your particular
                development process.</para>
                <para>If you are going to develop your application and
                then run and test it using the QEMU emulator, go to the
                <ulink url='&YOCTO_QEMU_DL_URL;'><filename>machines/qemu</filename></ulink>
                download area.
                From this area, go down into the directory for your
                target architecture (e.g. <filename>qemux86_64</filename>
                for an <trademark class='registered'>Intel</trademark>-based
                64-bit architecture).
                Download kernel, root filesystem, and any other files you
                need for your process.
                <note>In order to use the root filesystem in QEMU, you
                need to extract it.
                See the
                "<link url='sdk-extracting-the-root-filesystem'>Extracting the Root Filesystem</link>"
                section for information on how to extract the root
                filesystem.</note></para></listitem>
            <listitem><para><emphasis>Develop and Test your
                Application:</emphasis>  At this point, you have the tools
                to develop your application.
                If you need to separately install and use the QEMU
                emulator, you can go to
                <ulink url='http://wiki.qemu.org/Main_Page'>QEMU Home Page</ulink>
                to download and learn about the emulator.
                You can see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-qemu'>Using the Quick EMUlator (QEMU)</ulink>"
                chapter in the Yocto Project Development Manual
                for information on using QEMU within the Yocto
                Project.</para></listitem>
        </orderedlist>
    </para>

    <para>
        The remainder of this manual describes how to use both the standard
        SDK and the extensible SDK.
        Information also exists in appendix form that describes how you can
        build, install, and modify an SDK.
    </para>
</section>

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