<!DOCTYPE article 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; ] >

<article id='brief-yocto-project-qs-intro'>
    <articleinfo>
        <title>Yocto Project Quick Build</title>

        <copyright>
            <year>&COPYRIGHT_YEAR;</year>
            <holder>Linux Foundation</holder>
        </copyright>

        <legalnotice>
            <para>
                Permission is granted to copy, distribute and/or modify this document under
                the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
            </para>
        </legalnotice>


        <abstract>
            <imagedata fileref="figures/yocto-project-transp.png"
                        width="6in" depth="1in"
                        align="right" scale="25" />
        </abstract>
    </articleinfo>

    <section id='brief-welcome'>
        <title>Welcome!</title>

        <para>
            Welcome!
            This short document steps you through the process for a typical
            image build using the Yocto Project.
            The document also introduces how to configure a build for specific
            hardware.
            You will use Yocto Project to build a reference embedded OS
            called Poky.
            <note><title>Notes</title>
                <itemizedlist>
                    <listitem><para>
                        The examples in this paper assume you are using a
                        native Linux system running a recent Ubuntu Linux
                        distribution.
                        If the machine you want to use Yocto Project on to
                        build an image
                        (<ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>)
                        is not a native Linux system, you can
                        still perform these steps by using CROss PlatformS
                        (CROPS) and setting up a Poky container.
                        See the
                        <ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-to-use-crops'>Setting Up to Use CROss PlatformS (CROPS)</ulink>"
                        section in the Yocto Project Development Tasks Manual for more
                        information.
                        </para></listitem>
                    <listitem><para>
                        You cannot use a build host that is using the
                        <ulink url='https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux'>Windows Subsystem for Linux</ulink>
                        (WSL).
                        The Yocto Project is not compatible with WSL.
                        </para></listitem>
                </itemizedlist>
            </note>
        </para>

        <para>
            If you want more conceptual or background information on the
            Yocto Project, see the
            <ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>.
        </para>
    </section>

    <section id='brief-compatible-distro'>
        <title>Compatible Linux Distribution</title>

        <para>
            Make sure your
            <ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>
            meets the following requirements:
            <itemizedlist>
                <listitem><para>
                    50 Gbytes of free disk space
                    </para></listitem>
                <listitem><para>
                    Runs a supported Linux distribution (i.e. recent releases of
                    Fedora, openSUSE, CentOS, Debian, or Ubuntu). For a list of
                    Linux distributions that support the Yocto Project, see the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
                    section in the Yocto Project Reference Manual.
                    For detailed information on preparing your build host, see
                    the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-preparing-the-build-host'>Preparing the Build Host</ulink>"
                    section in the Yocto Project Development Tasks Manual.
                    </para></listitem>
                <listitem><para>
                    <itemizedlist>
                        <listitem><para>
                            Git 1.8.3.1 or greater
                            </para></listitem>
                        <listitem><para>
                            tar 1.27 or greater
                            </para></listitem>
                        <listitem><para>
                            Python 3.4.0 or greater.
                            </para></listitem>
                    </itemizedlist>
                    If your build host does not meet any of these three listed
                    version requirements, you can take steps to prepare the
                    system so that you can still use the Yocto Project.
                    See the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</ulink>"
                    section in the Yocto Project Reference Manual for information.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='brief-build-system-packages'>
        <title>Build Host Packages</title>

        <para>
            You must install essential host packages on your
            build host.
            The following command installs the host packages based on an
            Ubuntu distribution:
            <note>
                For host package requirements on all supported Linux
                distributions, see the
                "<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-build-host'>Required Packages for the Build Host</ulink>"
                section in the Yocto Project Reference Manual.
            </note>
            <literallayout class='monospaced'>
     $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL;
            </literallayout>
        </para>
    </section>

    <section id='brief-use-git-to-clone-poky'>
        <title>Use Git to Clone Poky</title>

        <para>
            Once you complete the setup instructions for your machine,
            you need to get a copy of the Poky repository on your build
            host.
            Use the following commands to clone the Poky
            repository.
            <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/poky
     Cloning into 'poky'...
     remote: Counting objects: 432160, done.
     remote: Compressing objects: 100% (102056/102056), done.
     remote: Total 432160 (delta 323116), reused 432037 (delta 323000)
     Receiving objects: 100% (432160/432160), 153.81 MiB | 8.54 MiB/s, done.
     Resolving deltas: 100% (323116/323116), done.
     Checking connectivity... done.
            </literallayout>
            Move to the <filename>poky</filename> directory and take a look
            at the tags:
            <literallayout class='monospaced'>
     $ cd poky
     $ git fetch --tags
     $ git tag
     1.1_M1.final
     1.1_M1.rc1
     1.1_M1.rc2
     1.1_M2.final
     1.1_M2.rc1
        .
        .
        .
     yocto-2.5
     yocto-2.5.1
     yocto-2.5.2
     yocto-2.6
     yocto-2.6.1
     yocto-2.7
     yocto_1.5_M5.rc8
            </literallayout>
            For this example, check out the branch based on the
            &DISTRO_REL_TAG; release:
            <literallayout class='monospaced'>
     $ git checkout tags/&DISTRO_REL_TAG; -b my-&DISTRO_REL_TAG;
     Switched to a new branch 'my-&DISTRO_REL_TAG;'
            </literallayout>
            The previous Git checkout command creates a local branch
            named my-&DISTRO_REL_TAG;. The files available to you in that
            branch exactly match the repository's files in the
            "&DISTRO_NAME_NO_CAP;" development branch at the time of the
            Yocto Project &DISTRO_REL_TAG; release.
        </para>

        <para>
            For more options and information about accessing Yocto
            Project related repositories, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#locating-yocto-project-source-files'>Locating Yocto Project Source Files</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='brief-building-your-image'>
        <title>Building Your Image</title>

        <para>
            Use the following steps to build your image.
            The build process creates an entire Linux distribution, including
            the toolchain, from source.
            <note>
                <itemizedlist>
                    <listitem><para>
                        If you are working behind a firewall and your build
                        host is not set up for proxies, you could encounter
                        problems with the build process when fetching source
                        code (e.g. fetcher failures or Git failures).
                        </para></listitem>
                    <listitem><para>
                        If you do not know your proxy settings, consult your
                        local network infrastructure resources and get that
                        information.
                        A good starting point could also be to check your
                        web browser settings.
                        Finally, you can find more information on the
                        "<ulink url='https://wiki.yoctoproject.org/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
                        page of the Yocto Project Wiki.
                        </para></listitem>
                </itemizedlist>
            </note>
        </para>

        <para>
            <orderedlist>
                <listitem><para>
                    <emphasis>Initialize the Build Environment:</emphasis>
                    From within the <filename>poky</filename> directory, run the
                    <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
                    environment setup script to define Yocto Project's
                    build environment on your build host.
                    <literallayout class='monospaced'>
     $ cd ~/poky
     $ source &OE_INIT_FILE;
     You had no conf/local.conf file. This configuration file has therefore been
     created for you with some default values. You may wish to edit it to, for
     example, select a different MACHINE (target hardware). See conf/local.conf
     for more information as common configuration options are commented.

     You had no conf/bblayers.conf file. This configuration file has therefore been
     created for you with some default values. To add additional metadata layers
     into your configuration please add entries to conf/bblayers.conf.

     The Yocto Project has extensive documentation about OE including a reference
     manual which can be found at:
         http://yoctoproject.org/documentation

     For more information about OpenEmbedded see their website:
         http://www.openembedded.org/


     ### Shell environment set up for builds. ###

     You can now run 'bitbake &lt;target&gt;'

     Common targets are:
         core-image-minimal
         core-image-sato
         meta-toolchain
         meta-ide-support

     You can also run generated qemu images with a command like 'runqemu qemux86'
                    </literallayout>
                    Among other things, the script creates the
                    <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
                    which is <filename>build</filename> in this case
                    and is located in the
                    <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
                    After the script runs, your current working directory
                    is set to the Build Directory.
                    Later, when the build completes, the Build Directory
                    contains all the files created during the build.
                    </para></listitem>
                <listitem><para id='conf-file-step'>
                    <emphasis>Examine Your Local Configuration File:</emphasis>
                    When you set up the build environment, a local
                    configuration file named
                    <filename>local.conf</filename> becomes available in
                    a <filename>conf</filename> subdirectory of the
                    Build Directory.
                    For this example, the defaults are set to build
                    for a <filename>qemux86</filename> target, which is
                    suitable for emulation.
                    The package manager used is set to the RPM package
                    manager.
                    <tip>
                        You can significantly speed up your build and guard
                        against fetcher failures by using mirrors.
                        To use mirrors, add these lines to your
                        <filename>local.conf</filename> file in the Build
                        directory:
                        <literallayout class='monospaced'>
     SSTATE_MIRRORS = "\
     file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \
     file://.* http://sstate.yoctoproject.org/&YOCTO_DOC_VERSION_MINUS_ONE;/PATH;downloadfilename=PATH \n \
     file://.* http://sstate.yoctoproject.org/&YOCTO_DOC_VERSION;/PATH;downloadfilename=PATH \n \
     "
                        </literallayout>
                        The previous examples showed how to add sstate
                        paths for Yocto Project &YOCTO_DOC_VERSION_MINUS_ONE;,
                        &YOCTO_DOC_VERSION;, and a development area.
                        For a complete index of sstate locations, see
                        <ulink url='http://sstate.yoctoproject.org/'></ulink>.
                    </tip>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Start the Build:</emphasis>
                    Continue with the following command to build an OS image
                    for the target, which is
                    <filename>core-image-sato</filename> in this example:
                    <literallayout class='monospaced'>
     $ bitbake core-image-sato
                    </literallayout>
                    For information on using the
                    <filename>bitbake</filename> command, see the
                    "<ulink url='&YOCTO_DOCS_OM_URL;#usingpoky-components-bitbake'>BitBake</ulink>"
                    section in the Yocto Project Overview and Concepts Manual,
                    or see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-command'>BitBake Command</ulink>"
                    section in the BitBake User Manual.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Simulate Your Image Using QEMU:</emphasis>
                    Once this particular image is built, you can start
                    QEMU, which is a Quick EMUlator that ships with
                    the Yocto Project:
                    <literallayout class='monospaced'>
     $ runqemu qemux86
                    </literallayout>
                    If you want to learn more about running QEMU, see the
                    "<ulink url="&YOCTO_DOCS_DEV_URL;#dev-manual-qemu">Using the Quick EMUlator (QEMU)</ulink>"
                    chapter in the Yocto Project Development Tasks Manual.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Exit QEMU:</emphasis>
                    Exit QEMU by either clicking on the shutdown icon or by
                    typing <filename>Ctrl-C</filename> in the QEMU
                    transcript window from which you evoked QEMU.
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='customizing-your-build-for-specific-hardware'>
        <title>Customizing Your Build for Specific Hardware</title>

        <para>
            So far, all you have done is quickly built an image suitable
            for emulation only.
            This section shows you how to customize your build for specific
            hardware by adding a hardware layer into the Yocto Project
            development environment.
        </para>

        <para>
            In general, layers are repositories that contain related sets of
            instructions and configurations that tell the Yocto Project what
            to do.
            Isolating related metadata into functionally specific layers
            facilitates modular development and makes it easier to reuse the
            layer metadata.
            <note>
                By convention, layer names start with the string "meta-".
            </note>
        </para>

        <para>
            Follow these steps to add a hardware layer:
            <orderedlist>
                <listitem><para>
                    <emphasis>Find a Layer:</emphasis>
                    Lots of hardware layers exist.
                    The Yocto Project
                    <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
                    has many hardware layers.
                    This example adds the
                    <ulink url='https://github.com/kraj/meta-altera'>meta-altera</ulink>
                    hardware layer.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Clone the Layer</emphasis>
                    Use Git to make a local copy of the layer on your machine.
                    You can put the copy in the top level of the copy of the
                    Poky repository created earlier:
                    <literallayout class='monospaced'>
     $ cd ~/poky
     $ git clone https://github.com/kraj/meta-altera.git
     Cloning into 'meta-altera'...
     remote: Counting objects: 25170, done.
     remote: Compressing objects: 100% (350/350), done.
     remote: Total 25170 (delta 645), reused 719 (delta 538), pack-reused 24219
     Receiving objects: 100% (25170/25170), 41.02 MiB | 1.64 MiB/s, done.
     Resolving deltas: 100% (13385/13385), done.
     Checking connectivity... done.
                    </literallayout>
                    The hardware layer now exists with other layers inside
                    the Poky reference repository on your build host as
                    <filename>meta-altera</filename> and contains all the
                    metadata needed to support hardware from Altera, which
                    is owned by Intel.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Change the Configuration to Build for a Specific Machine:</emphasis>
                    The
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                    variable in the <filename>local.conf</filename> file
                    specifies the machine for the build.
                    For this example, set the <filename>MACHINE</filename>
                    variable to "cyclone5".
                    These configurations are used:
                    <ulink url='https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf'></ulink>.
                    <note>
                        See the
                        "<link linkend='conf-file-step'>Examine Your Local Configuration File</link>"
                        step earlier for more information on configuring the
                        build.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Add Your Layer to the Layer Configuration File:</emphasis>
                    Before you can use a layer during a build, you must add it
                    to your <filename>bblayers.conf</filename> file, which
                    is found in the
                    <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory's</ulink>
                    <filename>conf</filename> directory.</para>

                    <para>Use the <filename>bitbake-layers add-layer</filename>
                    command to add the layer to the configuration file:
                    <literallayout class='monospaced'>
     $ cd ~/poky/build
     $ bitbake-layers add-layer ../meta-altera
     NOTE: Starting bitbake server...
     Parsing recipes: 100% |##################################################################| Time: 0:00:32
     Parsing of 918 .bb files complete (0 cached, 918 parsed). 1401 targets, 123 skipped, 0 masked, 0 errors.
                    </literallayout>
                    You can find more information on adding layers in the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#adding-a-layer-using-the-bitbake-layers-script'>Adding a Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
                    section.
                    </para></listitem>
            </orderedlist>
            Completing these steps has added the
            <filename>meta-altera</filename> layer to your Yocto Project
            development environment and configured it to build for the
            "cyclone5" machine.
            <note>
                The previous steps are for demonstration purposes only.
                If you were to attempt to build an image for the
                "cyclone5" build, you should read the Altera
                <filename>README</filename>.
            </note>
        </para>
    </section>

    <section id='creating-your-own-general-layer'>
        <title>Creating Your Own General Layer</title>

        <para>
            Maybe you have an application or specific set of behaviors you
            need to isolate.
            You can create your own general layer using the
            <filename>bitbake-layers create-layer</filename> command.
            The tool automates layer creation by setting up a
            subdirectory with a <filename>layer.conf</filename>
            configuration file, a <filename>recipes-example</filename>
            subdirectory that contains an <filename>example.bb</filename>
            recipe, a licensing file, and a <filename>README</filename>.
        </para>

        <para>
            The following commands run the tool to create a layer named
            <filename>meta-mylayer</filename> in the
            <filename>poky</filename> directory:
            <literallayout class='monospaced'>
     $ cd ~/poky
     $ bitbake-layers create-layer meta-mylayer
     NOTE: Starting bitbake server...
     Add your new layer with 'bitbake-layers add-layer meta-mylayer'
            </literallayout>
            For more information on layers and how to create them, 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.
        </para>
    </section>

    <section id='brief-where-to-go-next'>
        <title>Where To Go Next</title>

        <para>
            Now that you have experienced using the Yocto Project, you might
            be asking yourself "What now?"
            The Yocto Project has many sources of information including
            the website, wiki pages, and user manuals:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Website:</emphasis>
                    The
                    <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
                    provides background information, the latest builds,
                    breaking news, full development documentation, and
                    access to a rich Yocto Project Development Community
                    into which you can tap.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Developer Screencast:</emphasis>
                    The
                    <ulink url='http://vimeo.com/36450321'>Getting Started with the Yocto Project - New Developer Screencast Tutorial</ulink>
                    provides a 30-minute video created for users unfamiliar
                    with the Yocto Project but familiar with Linux build
                    hosts.
                    While this screencast is somewhat dated, the
                    introductory and fundamental concepts are useful for
                    the beginner.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Yocto Project Overview and Concepts Manual:</emphasis>
                    The
                    <ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>
                    is a great place to start to learn about the
                    Yocto Project.
                    This manual introduces you to the Yocto Project and its
                    development environment.
                    The manual also provides conceptual information for
                    various aspects of the Yocto Project.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Yocto Project Wiki:</emphasis>
                    The
                    <ulink url='&YOCTO_WIKI_URL;'>Yocto Project Wiki</ulink>
                    provides additional information on where to go next
                    when ramping up with the Yocto Project, release
                    information, project planning, and QA information.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Yocto Project Mailing Lists:</emphasis>
                    Related mailing lists provide a forum for discussion,
                    patch submission and announcements.
                    Several mailing lists exist and are grouped according
                    to areas of concern.
                    See the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing lists</ulink>"
                    section in the Yocto Project Reference Manual for a
                    complete list of Yocto Project mailing lists.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Comprehensive List of Links and Other Documentation:</emphasis>
                    The
                    "<ulink url='&YOCTO_DOCS_REF_URL;#resources-links-and-related-documentation'>Links and Related Documentation</ulink>"
                    section in the Yocto Project Reference Manual provides a
                    comprehensive list of all related links and other
                    user documentation.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</article>
<!--
vim: expandtab tw=80 ts=4
-->
