<!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; ] >
<!--SPDX-License-Identifier: CC-BY-2.0-UK-->

<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 may use Windows Subsystem For Linux v2 to set up a build
                        host using Windows 10.
                        <note>
                          The Yocto Project is not compatible with WSLv1, it is
                          compatible but not officially supported nor validated
                          with WSLv2, if you still decide to use WSL please upgrade
                          to WSLv2.
                        </note>
                        See the
                        <ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-to-use-wsl'>Setting Up to Use Windows Subsystem For Linux</ulink>"
                        section in the Yocto Project Development Tasks Manual for more
                        information.
                        </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.28 or greater
                            </para></listitem>
                        <listitem><para>
                            Python 3.5.0 or greater.
                        </para></listitem>
                        <listitem><para>
                            gcc 5.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-python-and-gcc-versions'>Required Git, tar, Python and gcc 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.6.2
     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-64'
                    </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-64
                    </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
-->
