<!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='yocto-project-qs-intro'>
    <articleinfo>
        <title>Yocto Project Quick Start</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>
            <note>
                For the latest version of this manual associated with this
                Yocto Project release, see the
                <ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
                from the Yocto Project website.
            </note>
        </legalnotice>


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

    <section id='welcome'>
        <title>Welcome!</title>
        <para>
            Welcome to the Yocto Project!
            The Yocto Project is an open-source collaboration project whose
            focus is developers of embedded Linux systems.
            Among other things, the Yocto Project uses a build host based
            on the OpenEmbedded (OE) project, which uses the
            <ulink url='&YOCTO_DOCS_DEV_URL;#bitbake-term'>BitBake</ulink>
            tool, to construct complete Linux images.
            The BitBake and OE components are combined together to form
            a reference build host, historically known as
            <ulink url='&YOCTO_DOCS_DEV_URL;#poky'>Poky</ulink>.
        </para>

        <para>
            If you do not have a system that runs Linux and you want to give
            the Yocto Project a test run, you might consider using the Yocto
            Project Build Appliance.
            The Build Appliance allows you to build and boot a custom embedded
            Linux image with the Yocto Project using a non-Linux development
            system.
            See the
            <ulink url='https://www.yoctoproject.org/tools-resources/projects/build-appliance'>Yocto Project Build Appliance</ulink>
            for more information.
        </para>

        <para>
            This quick start is written so that you can quickly get a
            build host set up to use the Yocto Project and then build some
            Linux images.
            Rather than go into great detail about the Yocto Project and its
            many capabilities, this quick start provides the minimal
            information you need to try out the Yocto Project using a
            supported Linux build host.
            Reading and using the quick start should result in you having a
            basic understanding of what the Yocto Project is and how to use
            some of its core components.
            You will also have worked through steps to produce two images:
            one that is suitable for emulation and one that boots on actual
            hardware.
            The examples highlight the ease with which you can use the
            Yocto Project to create images for multiple types of hardware.
        </para>

        <para>
            For more detailed information on the Yocto Project, you can
            reference these resources:
            <itemizedlist>
                <listitem><para><emphasis>Website:</emphasis>
                    The
                    <ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
                    provides 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>FAQs:</emphasis>
                    Lists commonly asked Yocto Project questions and answers.
                    You can find two FAQs:
                    <ulink url='&YOCTO_WIKI_URL;/wiki/FAQ'>Yocto Project FAQ</ulink>
                    on a wiki, and the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#faq'>FAQ</ulink>"
                    chapter in the Yocto Project Reference Manual.
                    </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>
            </itemizedlist>
        </para>
    </section>

    <section id='yp-intro'>
        <title>Introducing the Yocto Project Development Environment</title>

        <para>
            The Yocto Project through the OpenEmbedded build system provides an
            open source development environment targeting the ARM, MIPS,
            PowerPC, and x86 architectures for a variety of platforms
            including x86-64 and emulated ones.
            You can use components from the Yocto Project to design, develop,
            build, debug, simulate, and test the complete software stack using
            Linux, the X Window System, GTK+ frameworks, and Qt frameworks.
        </para>

        <mediaobject>
            <imageobject>
                <imagedata fileref="figures/yocto-environment.png"
                    format="PNG" align='center' scalefit='1' width="100%"/>
            </imageobject>
            <caption>
                <para>The Yocto Project Development Environment</para>
            </caption>
         </mediaobject>

        <para>
            Here are some highlights for the Yocto Project:
        </para>

        <itemizedlist>
            <listitem><para>
                Provides a recent Linux kernel along with a set of system
                commands and libraries suitable for the embedded
                environment.
                </para></listitem>
            <listitem><para>
                Makes available system components such as X11, GTK+, Qt,
                Clutter, and SDL (among others) so you can create a rich user
                experience on devices that have display hardware.
                For devices that do not have a display or where you wish to
                use alternative UI frameworks, these components need not be
                installed.
                </para></listitem>
            <listitem><para>
                Creates a focused and stable core compatible with the
                OpenEmbedded project with which you can easily and reliably
                build and develop.
                </para></listitem>
            <listitem><para>
                Fully supports a wide range of hardware and device emulation
                through the Quick EMUlator (QEMU).
                </para></listitem>
            <listitem><para>
                Provides a layer mechanism that allows you to easily extend
                the system, make customizations, and keep them organized.
                </para></listitem>
        </itemizedlist>

        <para>
            You can use the Yocto Project to generate images for many kinds
            of devices.
            As mentioned earlier, the Yocto Project supports creation of
            reference images that you can boot within and emulate using QEMU.
            The standard example machines target QEMU full-system
            emulation for 32-bit and 64-bit variants of x86, ARM, MIPS, and
            PowerPC architectures.
            Beyond emulation, you can use the layer mechanism to extend
            support to just about any platform that Linux can run on and that
            a toolchain can target.
        </para>

        <para>
            Another Yocto Project feature is the Sato reference User
            Interface.
            This optional UI that is based on GTK+ is intended for devices with
            restricted screen sizes and is included as part of the
            OpenEmbedded Core layer so that developers can test parts of the
            software stack.
        </para>
    </section>

    <section id='yp-resources'>
        <title>Setting Up to Use the Yocto Project</title>

        <para>
            The following list shows what you need in order to use a
            Linux-based build host to use the Yocto Project to build images:
        </para>

        <itemizedlist>
            <listitem><para><emphasis>Build Host</emphasis>
                A build host with a minimum of 50 Gbytes of free disk
                space that is running a supported Linux distribution (i.e.
                recent releases of Fedora, openSUSE, CentOS, Debian, or
                Ubuntu).
                </para></listitem>
            <listitem><para><emphasis>Build Host Packages</emphasis>
                Appropriate packages installed on the build host.
                </para></listitem>
            <listitem><para><emphasis>The Yocto Project</emphasis>
                A release of the Yocto Project.
                </para></listitem>
        </itemizedlist>

        <section id='the-linux-distro'>
            <title>The Linux Distribution</title>

            <para>
                The Yocto Project team verifies each release against recent
                versions of the most popular Linux distributions that
                provide stable releases.
                In general, if you have the current release minus one of the
                following distributions, you should have no problems.
                <itemizedlist>
                    <listitem><para>
                        Ubuntu
                        </para></listitem>
                    <listitem><para>
                        Fedora
                        </para></listitem>
                    <listitem><para>
                        openSUSE
                        </para></listitem>
                    <listitem><para>
                        CentOS
                        </para></listitem>
                    <listitem><para>
                        Debian
                        </para></listitem>
                </itemizedlist>
                For a more detailed list of 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.
            </para>

            <para>
                The OpenEmbedded build system should be able to run on any
                modern distribution that has the following versions for
                Git, tar, and Python.
                <itemizedlist>
                    <listitem><para>
                        Git 1.8.3.1 or greater
                        </para></listitem>
                    <listitem><para>
                        tar 1.24 or greater
                        </para></listitem>
                    <listitem><para>
                        Python 2.7.3 or greater excluding Python
                        3.x, which is not supported.
                        </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>
        </section>

        <section id='packages'>
            <title>The Build Host Packages</title>

            <para>
                Required build host packages vary depending on your
                build machine and what you want to do with the Yocto Project.
                For example, if you want to build an image that can run
                on QEMU in graphical mode (a minimal, basic build
                requirement), then the build host package requirements
                are different than if you want to build an image on a headless
                system or build out the Yocto Project documentation set.
            </para>

            <para>
                Collectively, the number of required packages is large
                if you want to be able to cover all cases.
                <note>
                    In general, you need to have root access and then install
                    the required packages.
                    Thus, the commands in the following section may or may
                    not work depending on whether or not your Linux
                    distribution has <filename>sudo</filename> installed.
                </note>
            </para>

            <para>
                The following list shows the required packages needed to build
                an image that runs on QEMU in graphical mode (e.g. essential
                plus graphics support).
                For lists of required packages for other scenarios, see 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.
                <itemizedlist>
                    <listitem><para><emphasis>Ubuntu and Debian</emphasis>
                        <literallayout class='monospaced'>
     $ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL; libsdl1.2-dev xterm
                        </literallayout>
                        </para></listitem>
                    <listitem><para><emphasis>Fedora</emphasis>
                        <literallayout class='monospaced'>
     $ sudo dnf install &FEDORA_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
                        </literallayout>
                        </para></listitem>
                    <listitem><para><emphasis>OpenSUSE</emphasis>
                        <literallayout class='monospaced'>
     $ sudo zypper install &OPENSUSE_HOST_PACKAGES_ESSENTIAL; libSDL-devel xterm
                        </literallayout>
                        </para></listitem>
                    <listitem><para><emphasis>CentOS</emphasis>
                        <literallayout class='monospaced'>
     $ sudo yum install &CENTOS_HOST_PACKAGES_ESSENTIAL; SDL-devel xterm
                        </literallayout>
                        <note>
                            CentOS 6.x users need to ensure that the required
                            versions of Git, tar and Python are available.
                            For details, 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.
                        </note>
                        </para></listitem>
                </itemizedlist>
            </para>
        </section>

        <section id='releases'>
            <title>Yocto Project Release</title>

            <para>
                The last requirement you need to meet before using the
                Yocto Project is getting a Yocto Project release.
                It is recommended that you get the latest Yocto Project release
                by setting up (cloning in
                <ulink url='&YOCTO_DOCS_DEV_URL;#git'>Git</ulink> terms) a
                local copy of the <filename>poky</filename> Git repository on
                your build host and then checking out the latest release.
                Doing so allows you to easily update to newer Yocto Project
                releases as well as contribute back to the Yocto Project.
            </para>

            <para>
                Here is an example from an Ubuntu build host that clones the
                <filename>poky</filename> repository and then checks out the
                latest Yocto Project Release (i.e. &DISTRO;):
                <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.
     $ git checkout &DISTRO_NAME_NO_CAP;
                </literallayout>
                You can also get the Yocto Project Files by downloading
                Yocto Project releases from the
                <ulink url="&YOCTO_HOME_URL;">Yocto Project website</ulink>.
            </para>

            <para>
                For more information on getting set up with the Yocto Project
                release, see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#local-yp-release'>Yocto Project Release</ulink>"
                item in the Yocto Project Development Manual.
            </para>
        </section>
    </section>

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

        <para>
            Now that you have your system requirements in order, you can give
            Yocto Project a try.
            You can try out Yocto Project using either the command-line
            interface or using Toaster, which uses a graphical user
            interface.
            If you want to try out the Yocto Project using a GUI, see the
            <ulink url='&YOCTO_DOCS_TOAST_URL;'>Toaster User Manual</ulink>
            for information on how to install and set up Toaster.
        </para>

        <para>
            You can try out the Yocto Project using the command-line interface
            by finishing this quick start, which presents steps that let you
            do the following:
            <itemizedlist>
                <listitem><para>
                    Build a <filename>qemux86</filename> reference image
                    and run it in the QEMU emulator.
                    </para></listitem>
                <listitem><para>
                    Easily change configurations so that you can quickly
                    create a second image, which would be for MinnowBoard
                    MAX-compatible boards.
                    </para></listitem>
            </itemizedlist>
            <note>
                The steps in this section do not provide detail, but rather
                provide minimal, working commands and examples designed to
                just get you started.
                For more details, see the appropriate manuals in the
                <ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project manual set</ulink>.
            </note>
        </para>

        <para>
            Use the following commands to build your image.
            The OpenEmbedded build system creates an entire Linux
            distribution, including the toolchain, from source.
            <note><title>Note about Network Proxies</title>
                <para>
                    By default, the build process searches for source code
                    using a pre-determined order through a set of
                    locations.
                    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>

                <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 using the
                    Yocto Project behind a firewall in the Yocto Project
                    Reference Manual
                    <ulink url='&YOCTO_DOCS_REF_URL;#how-does-the-yocto-project-obtain-source-code-and-will-it-work-behind-my-firewall-or-proxy-server'>FAQ</ulink>
                    and on the
                    "<ulink url='https://wiki.yoctoproject.org/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
                    wiki page.
                </para>
            </note>
        </para>

        <para>
            <orderedlist>
                <listitem><para><emphasis>Be Sure Your Build Host is Set Up:</emphasis>
                    The steps to build an image in this section depend on
                    your build host being properly set up.
                    Be sure you have worked through the requirements
                    described in the
                    "<link linkend='yp-resources'>Setting Up to Use the Yocto Project</link>"
                    section.
                    </para></listitem>
                <listitem><para><emphasis>Check Out Your Branch:</emphasis>
                    Be sure you are in the
                    <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
                    (e.g. <filename>poky</filename>) and then check out
                    the branch associated with the latest Yocto Project
                    Release:
                    <literallayout class='monospaced'>
     $ cd ~/poky
     $ git checkout -b &DISTRO_NAME_NO_CAP; origin/&DISTRO_NAME_NO_CAP;
                    </literallayout>
                    Git's <filename>checkout</filename> command checks out
                    the current Yocto Project release into a local branch
                    whose name matches the release (i.e.
                    <filename>&DISTRO_NAME_NO_CAP;</filename>).
                    The local branch tracks the upstream branch of the
                    same name.
                    Creating your own branch based on the released
                    branch ensures you are using the latest files for
                    that release.
                    </para></listitem>
                <listitem><para><emphasis>Initialize the Build Environment:</emphasis>
                    Run the
                    <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
                    environment setup script to define the OpenEmbedded
                    build environment on your build host.
                    <literallayout class='monospaced'>
     $ source &OE_INIT_FILE;
                    </literallayout>
                    Among other things, the script creates the
                    <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>,
                    which is <filename>build</filename> in this case
                    and is located in the
                    <ulink url='&YOCTO_DOCS_DEV_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.
                    <note>
                        For information on running a memory-resident
                        <ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>,
                        see the
                        <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>
                        setup script.
                    </note>
                    </para></listitem>
                <listitem><para><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.
                    Before using BitBake to start the build, you can
                    look at this file and be sure your general
                    configurations are how you want them:
                    <itemizedlist>
                        <listitem><para>
                            To help conserve disk space during builds,
                            you can add the following statement to your
                            project's configuration file, which for this
                            example is
                            <filename>poky/build/conf/local.conf</filename>.
                            Adding this statement deletes the work
                            directory used for building a recipe once the
                            recipe is built.
                            <literallayout class='monospaced'>
     INHERIT += "rm_work"
                            </literallayout>
                            </para></listitem>
                        <listitem><para>
                            By default, the target machine for the build is
                            <filename>qemux86</filename>,
                            which produces an image that can be used in
                            the QEMU emulator and is targeted at an
                            <trademark class='registered'>Intel</trademark>
                            32-bit based architecture.
                            Further on in this example, this default is
                            easily changed through the
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                            variable so that you can quickly
                            build an image for a different machine.
                            </para></listitem>
                        <listitem><para>
                            Another consideration before you build is the
                            package manager used when creating the image.
                            The default <filename>local.conf</filename>
                            file selects the RPM package manager.
                            You can control this configuration by using the
                            <filename><ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink></filename>
                            variable.</para>
                            <para>Selection of the package manager is separate
                            from whether package management is used at runtime
                            in the target image.</para>
                            <para>For additional package manager selection
                            information, see the
                            "<ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-package'><filename>package.bbclass</filename></ulink>"
                            section in the Yocto Project Reference Manual.
                            </para></listitem>
                    </itemizedlist>
                    </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:
                    <note>
                        Depending on the number of processors and cores, the
                        amount of RAM, the speed of your Internet connection
                        and other factors, the build process could take several
                        hours the first time you run it.
                        Subsequent builds run much faster since parts of the
                        build are cached.
                    </note>
                    <literallayout class='monospaced'>
     $ bitbake core-image-sato
                    </literallayout>
                    For information on using the
                    <filename>bitbake</filename> command, see the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#usingpoky-components-bitbake'>BitBake</ulink>"
                    section in the Yocto Project Reference Manual, or see the
                    "<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-command'>BitBake Command</ulink>"
                    section in the BitBake User Manual.
                    For information on other targets, see the
                    "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
                    chapter in the Yocto Project Reference Manual.
                    </para></listitem>
                <listitem><para><emphasis>Simulate Your Image Using QEMU:</emphasis>
                    Once this particular image is built, you can start QEMU
                    and run the image:
                    <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 Manual.
                    </para></listitem>
                <listitem><para><emphasis>Exit QEMU:</emphasis>
                    Exit QEMU by either clicking on the shutdown icon or by
                    opening a terminal, typing
                    <filename>poweroff</filename>, and then pressing "Enter".
                    </para></listitem>
            </orderedlist>
        </para>

        <para id='qs-minnowboard-example'>
            The following steps show how easy it is to set up to build an
            image for a new machine.
            These steps build an image for the MinnowBoard MAX, which is
            supported by the Yocto Project and the
            <filename>meta-intel</filename> <filename>intel-corei7-64</filename>
            and <filename>intel-core2-32</filename> Board Support Packages
            (BSPs).
            <note>
                The MinnowBoard MAX ships with 64-bit firmware.
                If you want to use the board in 32-bit mode, you must
                download the
                <ulink url='http://firmware.intel.com/projects/minnowboard-max'>32-bit firmware</ulink>.
            </note>
        </para>

        <para>
            <orderedlist>
                <listitem><para><emphasis>Create a Local Copy of the
                    <filename>meta-intel</filename> Repository:</emphasis>
                    Building an image for the MinnowBoard MAX requires the
                    <filename>meta-intel</filename> layer.
                    Use the <filename>git clone</filename> command to create
                    a local copy of the repository inside your
                    <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>,
                    which is <filename>poky</filename> in this example:
                    <literallayout class='monospaced'>
     $ cd $HOME/poky
     $ git clone git://git.yoctoproject.org/meta-intel
     Cloning into 'meta-intel'...
     remote: Counting objects: 11988, done.
     remote: Compressing objects: 100% (3884/3884), done.
     Receiving objects: 100% (11988/11988), 2.93 MiB | 2.51 MiB/s, done.
     remote: Total 11988 (delta 6881), reused 11752 (delta 6645)
     Resolving deltas: 100% (6881/6881), done.
     Checking connectivity... done.
                    </literallayout>
                    By default when you clone a Git repository, the
                    "master" branch is checked out.
                    Before you build your image that uses the
                    <filename>meta-intel</filename> layer, you must be
                    sure that both repositories
                    (<filename>meta-intel</filename> and
                    <filename>poky</filename>) are using the same releases.
                    Consequently, you need to checkout out the
                    "<filename>&DISTRO_NAME_NO_CAP;</filename>" release after
                    cloning <filename>meta-intel</filename>:
                    <literallayout class='monospaced'>
     $ cd $HOME/poky/meta-intel
     $ git checkout &DISTRO_NAME_NO_CAP;
     Branch &DISTRO_NAME_NO_CAP; set up to track remote branch &DISTRO_NAME_NO_CAP; from origin.
     Switched to a new branch '&DISTRO_NAME_NO_CAP;'
                    </literallayout>
                    </para></listitem>
                <listitem><para><emphasis>Configure the Build:</emphasis>
                    To configure the build, you edit the
                    <filename>bblayers.conf</filename> and
                    <filename>local.conf</filename> files, both of which are
                    located in the <filename>build/conf</filename> directory.
                    </para>

                    <para>Here is a quick way to make the edits.
                    The first command uses the
                    <filename>bitbake-layers add-layer</filename> command
                    to add the <filename>meta-intel</filename>
                    layer, which contains the <filename>intel-core*</filename>
                    BSPs to the build.
                    The second command selects the BSP by setting the
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                    variable.
                    <literallayout class='monospaced'>
     $ cd $HOME/poky/build
     $ bitbake-layers add-layer "$HOME/poky/meta-intel"
     $ echo 'MACHINE = "intel-corei7-64"' >> conf/local.conf
                    </literallayout>
                    <note><title>Notes</title>
                    <para>
                        If you want a 64-bit build, use the following:
                        <literallayout class='monospaced'>
     $ echo 'MACHINE = "intel-corei7-64"' >> conf/local.conf
                        </literallayout>
                    </para>

                    <para>
                        If you want 32-bit images, use the following:
                        <literallayout class='monospaced'>
     $ echo 'MACHINE = "intel-core2-32"' >> conf/local.conf
                        </literallayout>
                    </para>
                    </note>
                    </para></listitem>
                <listitem><para><emphasis>Build a Minimal Image for MinnowBoard MAX:</emphasis>
                    Use the following command to build the minimal image for
                    MinnowBoard MAX.
                    Because configuration changes are minimal to set up for
                    this second build, the OpenEmbedded build system can
                    re-use files from previous builds as much as possible.
                    Re-using files means this second build will be much faster
                    than an initial build.
                    <literallayout class='monospaced'>
     $ bitbake core-image-minimal
                    </literallayout>
                    Once the build completes, the resulting basic console image
                    is located in the Build Directory here:
                    <literallayout class='monospaced'>
     tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg
                    </literallayout>
                    </para></listitem>
                <listitem><para><emphasis>Write the Image:</emphasis>
                    You can write the image to a USB key, SATA drive, or SD
                    card by using the <filename>mkefidisk.sh</filename> script,
                    which is included in the <filename>poky</filename>
                    repository at
                    <filename>scripts/contrib/mkefidisk.sh</filename>:
                    <literallayout class='monospaced'>
     $ sudo $HOME/source/poky/scripts/contrib/mkefidisk.sh <replaceable>HOST_DEVICE</replaceable> \
        tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg <replaceable>TARGET_DEVICE</replaceable>
                    </literallayout>
                    In the previous command,
                    <replaceable>HOST_DEVICE</replaceable> is the device node
                    on the build host (e.g. <filename>/dev/sdc</filename> or
                    <filename>/dev/mmcblk0</filename>).
                    <replaceable>TARGET_DEVICE</replaceable> is the name of the
                    device as the MinnowBoard MAX sees it (e.g.
                    <filename>/dev/sda</filename> or
                    <filename>/dev/mmcblk0</filename>).
                    </para></listitem>
                <listitem><para><emphasis>Boot the Hardware:</emphasis>
                    With the boot device provisioned, you can insert the
                    media into the MinnowBoard MAX and boot the hardware.
                    The board should automatically detect the media and boot to
                    the bootloader and subsequently the operating system.
                    </para>

                    <para>If the board does not boot automatically, you can
                    boot it manually from the EFI shell as follows:
                    <literallayout class='monospaced'>
     Shell> connect -r
     Shell> map -r
     Shell> fs0:
     Shell> bootx64
                    </literallayout>
                    <note>
                        For a 32-bit image use the following:
                        <literallayout class='monospaced'>
     Shell> bootia32
                        </literallayout>
                    </note>
                    </para></listitem>
            </orderedlist>
        </para>
    </section>

    <section id='qs-next-steps'>
        <title>Next Steps</title>

        <para>
            If you completed all the steps in the previous section then
            congratulations!
            What now?
        </para>

        <para>
            Depending on what you primary interests are with the Yocto Project,
            you could consider any of the following:
            <itemizedlist>
                <listitem><para><emphasis>Visit the Yocto Project Web Site:</emphasis>
                    The official
                    <ulink url='&YOCTO_HOME_URL;'>Yocto Project</ulink>
                    web site contains information on the entire project.
                    Visiting this site is a good way to familiarize yourself
                    with the overall project.
                    </para></listitem>
                <listitem><para><emphasis>Look Through the Yocto Project Development Manual:</emphasis>
                    The
                    <ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-intro'>Yocto Project Development Manual</ulink>
                    is a great place to get a feel for how to use the Yocto
                    Project.
                    The manual contains conceptual and procedural information
                    that covers
                    <ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-model'>common development models</ulink>
                    and introduces
                    <ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-newbie'>the Yocto Project open source development environment</ulink>.
                    The manual also contains several targeted sections that
                    cover specific
                    <ulink url='&YOCTO_DOCS_DEV_URL;#extendpoky'>common tasks</ulink>
                    such as understanding and creating layers, customizing
                    images, writing new recipes, working with libraries, and
                    configuring and patching the kernel.
                    </para></listitem>
                <listitem><para><emphasis>Look Through the Yocto Project Software Development Kit (SDK) Developer's Guide:</emphasis>
                    The
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-intro'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>
                    describes how to use both the
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-using-the-standard-sdk'>standard SDK</ulink>
                    and the
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-extensible'>extensible SDK</ulink>,
                    which are used primarily for application development.
                    This manual also provides an example workflow that uses
                    the popular <trademark class='trade'>Eclipse</trademark>
                    development environment.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#workflow-using-eclipse'>Workflow using Eclipse™</ulink>"
                    section.
                    </para></listitem>
                <listitem><para><emphasis>Learn About Board Support Packages (BSPs):</emphasis>
                    If you want to learn about BSPs, see the
                    <ulink url='&YOCTO_DOCS_BSP_URL;#bsp'>Yocto Project Board Support Packages (BSP) Developer's Guide</ulink>.
                    </para></listitem>
                <listitem><para><emphasis>Learn About Toaster:</emphasis>
                    Toaster is a web interface to the Yocto Project's
                    OpenEmbedded build system.
                    If you are interested in using this type of interface to
                    create images, see the
                    <ulink url='&YOCTO_DOCS_TOAST_URL;#toaster-manual-intro'>Toaster User Manual</ulink>.
                    </para></listitem>
                <listitem><para><emphasis>Have Available the Yocto Project Reference Manual</emphasis>
                    The
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-manual-intro'>Yocto Project Reference Manual</ulink>,
                    unlike the rest of the Yocto Project manual set, is
                    comprised of material suited for reference rather than
                    procedures.
                    You can get
                    <ulink url='&YOCTO_DOCS_REF_URL;#usingpoky'>build details</ulink>,
                    a
                    <ulink url='&YOCTO_DOCS_REF_URL;#closer-look'>closer look</ulink>
                    at how the pieces of the Yocto Project development
                    environment work together, information on various
                    <ulink url='&YOCTO_DOCS_REF_URL;#technical-details'>technical details</ulink>,
                    guidance on
                    <ulink url='&YOCTO_DOCS_REF_URL;#migration'>migrating to a newer Yocto Project release</ulink>,
                    reference material on the
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-structure'>directory structure</ulink>,
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes'>classes</ulink>,
                    and
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks'>tasks</ulink>.
                    The Yocto Project Reference Manual also contains a fairly
                    comprehensive
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-variables-glossary'>glossary of variables</ulink>
                    used within the Yocto Project.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</article>
<!--
vim: expandtab tw=80 ts=4
-->
