<!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-start'>

<title>Getting Started with the Yocto Project</title>

<para>
    This chapter introduces the Yocto Project and gives you an idea of what you need to get started.
    You can find enough information to set up your development host and build or use images for
    hardware supported by the Yocto Project by reading the
    <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
</para>

<para>
    The remainder of this chapter summarizes what is in the Yocto Project Quick Start and provides
    some higher-level concepts you might want to consider.
</para>

<section id='introducing-the-yocto-project'>
    <title>Introducing the Yocto Project</title>

    <para>
        The Yocto Project is an open-source collaboration project focused on embedded Linux development.
        The project currently provides a build system that is
        referred to as the
        <link linkend='build-system-term'>OpenEmbedded build system</link>
        in the Yocto Project documentation.
        The Yocto Project provides various ancillary tools for the embedded developer
        and also features the Sato reference User Interface, which is optimized for
        stylus-driven, low-resolution screens.
    </para>

    <para>
        You can use the OpenEmbedded build system, which uses
        <link linkend='bitbake-term'>BitBake</link>, to develop complete Linux
        images and associated user-space applications for architectures based
        on ARM, MIPS, PowerPC, x86 and x86-64.
        <note>
            By default, using the Yocto Project creates a Poky distribution.
            However, you can create your own distribution by providing key
            <link linkend='metadata'>Metadata</link>.
            See the "<link linkend='creating-your-own-distribution'>Creating Your Own Distribution</link>"
            section for more information.
        </note>
        While the Yocto Project does not provide a strict testing framework,
        it does provide or generate for you artifacts that let you perform target-level and
        emulated testing and debugging.
        Additionally, if you are an <trademark class='trade'>Eclipse</trademark>
        IDE user, you can install an Eclipse Yocto Plug-in to allow you to
        develop within that familiar environment.
    </para>
</section>

<section id='getting-setup'>
    <title>Getting Set Up</title>

    <para>
        Here is what you need to use the Yocto Project:
        <itemizedlist>
            <listitem><para><emphasis>Host System:</emphasis>  You should have a reasonably current
                Linux-based host system.
                You will have the best results with a recent release of Fedora,
                openSUSE, Debian, Ubuntu, or CentOS as these releases are frequently tested against the Yocto Project
                and officially supported.
                For a list of the distributions under validation and their status, see the
                "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>" section
                in the Yocto Project Reference Manual and the wiki page at
                <ulink url='&YOCTO_WIKI_URL;/wiki/Distribution_Support'>Distribution Support</ulink>.</para>
                <para>
                You should also have about 50 Gbytes of free disk space for building images.
                </para></listitem>
            <listitem><para><emphasis>Packages:</emphasis>  The OpenEmbedded build system
                requires that certain packages exist on your development system (e.g. Python 2.7).
                See "<ulink url='&YOCTO_DOCS_QS_URL;#packages'>The Build Host Packages</ulink>"
                section in the Yocto Project Quick Start and the
                "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>"
                section in the Yocto Project Reference Manual for the exact
                package requirements and the installation commands to install
                them for the supported distributions.
                </para></listitem>
            <listitem id='local-yp-release'><para><emphasis>Yocto Project Release:</emphasis>
                You need a release of the Yocto Project locally installed on
                your development system.
                The documentation refers to this set of locally installed files
                as the <link linkend='source-directory'>Source Directory</link>.
                You create your Source Directory by using
                <link linkend='git'>Git</link> to clone a local copy
                of the upstream <filename>poky</filename> repository,
                or by downloading and unpacking a tarball of an official
                Yocto Project release.
                The preferred method is to create a clone of the repository.
                </para>
                <para>Working from a copy of the upstream repository allows you
                to contribute back into the Yocto Project or simply work with
                the latest software on a development branch.
                Because Git maintains and creates an upstream repository with
                a complete history of changes and you are working with a local
                clone of that repository, you have access to all the Yocto
                Project development branches and tag names used in the upstream
                repository.</para>
                <note>You can view the Yocto Project Source Repositories at
                    <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>
                </note>
                <para>The following transcript shows how to clone the
                <filename>poky</filename> Git repository into the current
                working directory.
                The command creates the local repository in a directory
                named <filename>poky</filename>.
                For information on Git used within the Yocto Project, see
                the "<link linkend='git'>Git</link>" section.
                <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/poky
     Cloning into 'poky'...
     remote: Counting objects: 226790, done.
     remote: Compressing objects: 100% (57465/57465), done.
     remote: Total 226790 (delta 165212), reused 225887 (delta 164327)
     Receiving objects: 100% (226790/226790), 100.98 MiB | 263 KiB/s, done.
     Resolving deltas: 100% (165212/165212), done.
                </literallayout></para>
                <para>For another example of how to set up your own local Git
                repositories, see this
                <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_from_git_checkout_to_meta-intel_BSP'>
                wiki page</ulink>, which describes how to create local
                Git repositories for both
                <filename>poky</filename> and <filename>meta-intel</filename>.
                </para>
                <para>
                You can also get the Yocto Project Files by downloading
                Yocto Project releases from the
                <ulink url="&YOCTO_HOME_URL;">Yocto Project website</ulink>.
                From the website, you just click "Downloads" in the navigation
                pane to the left to display all Yocto Project downloads.
                Current and archived releases are available for download.
                Nightly and developmental builds are also maintained at
                <ulink url="&YOCTO_AB_NIGHTLY_URL;"></ulink>.
                One final site you can visit for information on Yocto Project
                releases is the
                <ulink url='&YOCTO_WIKI_URL;/wiki/Releases'>Releases</ulink>
                wiki.
                </para></listitem>
            <listitem id='local-kernel-files'><para><emphasis>Yocto Project Kernel:</emphasis>
                If you are going to be making modifications to a supported Yocto Project kernel, you
                need to establish local copies of the source.
                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;/cgit.cgi'></ulink>.</para>
                <para>This setup can involve creating a bare clone of the Yocto Project kernel and then
                copying that cloned repository.
                You can create the bare clone and the copy of the bare clone anywhere you like.
                For simplicity, it is recommended that you create these structures outside of the
                Source Directory, which is usually named <filename>poky</filename>.</para>
                <para>As an example, the following transcript shows how to create the bare clone
                of the <filename>linux-yocto-3.19</filename> kernel and then create a copy of
                that clone.
                <note>When you have a local Yocto Project kernel Git repository, you can
                reference that repository rather than the upstream Git repository as
                part of the <filename>clone</filename> command.
                Doing so can speed up the process.</note></para>
                <para>In the following example, the bare clone is named
                <filename>linux-yocto-3.19.git</filename>, while the
                copy is named <filename>my-linux-yocto-3.19-work</filename>:
                <literallayout class='monospaced'>
     $ git clone --bare git://git.yoctoproject.org/linux-yocto-3.19 linux-yocto-3.19.git
     Cloning into bare repository 'linux-yocto-3.19.git'...
     remote: Counting objects: 3983256, done.
     remote: Compressing objects: 100% (605006/605006), done.
     remote: Total 3983256 (delta 3352832), reused 3974503 (delta 3344079)
     Receiving objects: 100% (3983256/3983256), 843.66 MiB | 1.07 MiB/s, done.
     Resolving deltas: 100% (3352832/3352832), done.
     Checking connectivity... done.
                </literallayout></para>
                <para>Now create a clone of the bare clone just created:
                <literallayout class='monospaced'>
     $ git clone linux-yocto-3.19.git my-linux-yocto-3.19-work
     Cloning into 'my-linux-yocto-3.19-work'...
     done.
     Checking out files: 100% (48440/48440), done.
                </literallayout></para></listitem>
            <listitem id='meta-yocto-kernel-extras-repo'><para><emphasis>
                The <filename>meta-yocto-kernel-extras</filename> Git Repository</emphasis>:
                The <filename>meta-yocto-kernel-extras</filename> Git repository contains Metadata needed
                only if you are modifying and building the kernel image.
                In particular, it contains the kernel BitBake append (<filename>.bbappend</filename>)
                files that you
                edit to point to your locally modified kernel source files and to build the kernel
                image.
                Pointing to these local files is much more efficient than requiring a download of the
                kernel's source files from upstream each time you make changes to the kernel.</para>
                <para>You can find the <filename>meta-yocto-kernel-extras</filename> Git Repository in the
                "Yocto Metadata Layers" area of the Yocto Project Source Repositories at
                <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
                It is good practice to create this Git repository inside the Source Directory.</para>
                <para>Following is an example that creates the <filename>meta-yocto-kernel-extras</filename> Git
                repository inside the Source Directory, which is named <filename>poky</filename>
                in this case:
                <literallayout class='monospaced'>
     $ cd ~/poky
     $ git clone git://git.yoctoproject.org/meta-yocto-kernel-extras meta-yocto-kernel-extras
     Cloning into 'meta-yocto-kernel-extras'...
     remote: Counting objects: 727, done.
     remote: Compressing objects: 100% (452/452), done.
     remote: Total 727 (delta 260), reused 719 (delta 252)
     Receiving objects: 100% (727/727), 536.36 KiB | 240 KiB/s, done.
     Resolving deltas: 100% (260/260), done.
               </literallayout></para></listitem>
           <listitem><para id='supported-board-support-packages-(bsps)'><emphasis>Supported Board Support Packages (BSPs):</emphasis>
                The Yocto Project supports many BSPs, which are maintained in
                their own layers or in layers designed to contain several
                BSPs.
                To get an idea of machine support through BSP layers, you can
                look at the
                <ulink url='&YOCTO_RELEASE_DL_URL;/machines'>index of machines</ulink>
                for the release.</para>

                <para>The Yocto Project uses the following BSP layer naming
                scheme:
                <literallayout class='monospaced'>
     meta-<replaceable>bsp_name</replaceable>
                </literallayout>
                where <replaceable>bsp_name</replaceable> is the recognized
                BSP name.
                Here is an example:
                <literallayout class='monospaced'>
     meta-raspberrypi
                </literallayout>
                See the
                "<ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>"
                section in the Yocto Project Board Support Package (BSP)
                Developer's Guide for more information on BSP Layers.</para>

                <para>A useful Git repository released with the Yocto
                Project is <filename>meta-intel</filename>, which is a
                parent layer that contains many supported
                <ulink url='&YOCTO_DOCS_BSP_URL;#bsp-layers'>BSP Layers</ulink>.
                You can locate the <filename>meta-intel</filename> Git
                repository in the "Yocto Metadata Layers" area of the Yocto
                Project Source Repositories at
                <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.</para>

                <para>Using
                <link linkend='git'>Git</link> to create a local clone of the
                upstream repository can be helpful if you are working with
                BSPs.
                Typically, you set up the <filename>meta-intel</filename>
                Git repository inside the Source Directory.
                For example, the following transcript shows the steps to clone
                <filename>meta-intel</filename>.
                <note>
                    Be sure to work in the <filename>meta-intel</filename>
                    branch that matches your
                    <link linkend='source-directory'>Source Directory</link>
                    (i.e. <filename>poky</filename>) branch.
                    For example, if you have checked out the "master" branch
                    of <filename>poky</filename> and you are going to use
                    <filename>meta-intel</filename>, be sure to checkout the
                    "master" branch of <filename>meta-intel</filename>.
                </note>
                <literallayout class='monospaced'>
     $ cd ~/poky
     $ git clone git://git.yoctoproject.org/meta-intel.git
     Cloning into 'meta-intel'...
     remote: Counting objects: 11917, done.
     remote: Compressing objects: 100% (3842/3842), done.
     remote: Total 11917 (delta 6840), reused 11699 (delta 6622)
     Receiving objects: 100% (11917/11917), 2.92 MiB | 2.88 MiB/s, done.
     Resolving deltas: 100% (6840/6840), done.
     Checking connectivity... done.
                </literallayout></para>

                <para>The same
                <ulink url='&YOCTO_WIKI_URL;/wiki/Transcript:_from_git_checkout_to_meta-intel_BSP'>wiki page</ulink>
                referenced earlier covers how to set up the
                <filename>meta-intel</filename> Git repository.
                </para></listitem>
            <listitem><para><emphasis>Eclipse Yocto Plug-in:</emphasis>  If you are developing
                applications using the Eclipse Integrated Development Environment (IDE),
                you will need this plug-in.
                See the
                "<ulink url='&YOCTO_DOCS_SDK_URL;#setting-up-the-eclipse-ide'>Setting up the Eclipse IDE</ulink>"
                section in the Yocto Project Software Development Kit (SDK)
                Developer's Guide for more information.</para></listitem>
        </itemizedlist>
    </para>
</section>

<section id='building-images'>
    <title>Building Images</title>

    <para>
        The build process creates an entire Linux distribution, including the toolchain, from source.
        For more information on this topic, see the
        "<ulink url='&YOCTO_DOCS_QS_URL;#qs-building-images'>Building Images</ulink>"
        section in the Yocto Project Quick Start.
    </para>

    <para>
        The build process is as follows:
        <orderedlist>
            <listitem><para>Make sure you have set up the Source Directory described in the
                previous section.</para></listitem>
            <listitem><para>Initialize the build environment by sourcing a build
                environment script (i.e.
                <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
                or
                <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>).
                </para></listitem>
            <listitem><para>Optionally ensure the <filename>conf/local.conf</filename> configuration file,
                which is found in the
                <link linkend='build-directory'>Build Directory</link>,
                is set up how you want it.
                This file defines many aspects of the build environment including
                the target machine architecture through the
                <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'>MACHINE</ulink></filename> variable,
                the packaging format used during the build
                (<ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>),
                and a centralized tarball download directory through the
                <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'>DL_DIR</ulink></filename> variable.</para></listitem>
            <listitem><para>
                Build the image using the <filename>bitbake</filename> command.
                If you want information on BitBake, see the
                <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
                </para></listitem>
            <listitem><para>Run the image either on the actual hardware or using the QEMU
                emulator.</para></listitem>
        </orderedlist>
    </para>
</section>

<section id='using-pre-built-binaries-and-qemu'>
    <title>Using Pre-Built Binaries and QEMU</title>

    <para>
        Another option you have to get started is to use pre-built binaries.
        The Yocto Project provides many types of binaries with each release.
        See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
        chapter in the Yocto Project Reference Manual
        for descriptions of the types of binaries that ship with a Yocto Project
        release.
    </para>

    <para>
        Using a pre-built binary is ideal for developing software
        applications to run on your target hardware.
        To do this, you need to be able to access the appropriate
        cross-toolchain tarball for the architecture on which you are
        developing.
        If you are using an SDK type image, the image ships with the complete
        toolchain native to the architecture (i.e. a toolchain designed to
        run on the
        <ulink url='&YOCTO_DOCS_REF_URL;#var-SDKMACHINE'><filename>SDKMACHINE</filename></ulink>).
        If you are not using an SDK type image, you need to separately download
        and install the stand-alone Yocto Project cross-toolchain tarball.
    </para>

    <para>
        Regardless of the type of image you are using, you need to download the pre-built kernel
        that you will boot in the QEMU emulator and then download and extract the target root
        filesystem for your target machine’s architecture.
        You can get architecture-specific binaries and file systems from
        <ulink url='&YOCTO_MACHINES_DL_URL;'>machines</ulink>.
        You can get installation scripts for stand-alone toolchains from
        <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'>toolchains</ulink>.
        Once you have all your files, you set up the environment to emulate the hardware
        by sourcing an environment setup script.
        Finally, you start the QEMU emulator.
        You can find details on all these steps in the
        <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>.
        You can learn more about using QEMU with the Yocto Project in the
        "<link linkend='dev-manual-qemu'>Using the Quick EMUlator (QEMU)</link>"
        section.
    </para>

    <para>
        Using QEMU to emulate your hardware can result in speed issues
        depending on the target and host architecture mix.
        For example, using the <filename>qemux86</filename> image in the emulator
        on an Intel-based 32-bit (x86) host machine is fast because the target and
        host architectures match.
        On the other hand, using the <filename>qemuarm</filename> image on the same Intel-based
        host can be slower.
        But, you still achieve faithful emulation of ARM-specific issues.
    </para>

    <para>
        To speed things up, the QEMU images support using <filename>distcc</filename>
        to call a cross-compiler outside the emulated system.
        If you used <filename>runqemu</filename> to start QEMU, and the
        <filename>distccd</filename> application is present on the host system, any
        BitBake cross-compiling toolchain available from the build system is automatically
        used from within QEMU simply by calling <filename>distcc</filename>.
        You can accomplish this by defining the cross-compiler variable
        (e.g. <filename>export CC="distcc"</filename>).
        Alternatively, if you are using a suitable SDK image or the appropriate
        stand-alone toolchain is present,
        the toolchain is also automatically used.
    </para>

    <note>
        Several mechanisms exist that let you connect to the system running on the
        QEMU emulator:
        <itemizedlist>
            <listitem><para>QEMU provides a framebuffer interface that makes standard
                consoles available.</para></listitem>
            <listitem><para>Generally, headless embedded devices have a serial port.
                If so, you can configure the operating system of the running image
                to use that port to run a console.
                The connection uses standard IP networking.</para></listitem>
            <listitem><para>
                SSH servers exist in some QEMU images.
                The <filename>core-image-sato</filename> QEMU image has a
                Dropbear secure shell (SSH) server that runs with the root
                password disabled.
                The <filename>core-image-full-cmdline</filename> and
                <filename>core-image-lsb</filename> QEMU images
                have OpenSSH instead of Dropbear.
                Including these SSH servers allow you to use standard
                <filename>ssh</filename> and <filename>scp</filename> commands.
                The <filename>core-image-minimal</filename> QEMU image,
                however, contains no SSH server.
                </para></listitem>
            <listitem><para>You can use a provided, user-space NFS server to boot the QEMU session
                using a local copy of the root filesystem on the host.
                In order to make this connection, you must extract a root filesystem tarball by using the
                <filename>runqemu-extract-sdk</filename> command.
                After running the command, you must then point the <filename>runqemu</filename>
                script to the extracted directory instead of a root filesystem image file.</para></listitem>
        </itemizedlist>
    </note>
</section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
