1066 lines
57 KiB
XML
1066 lines
57 KiB
XML
<!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>©RIGHT_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 & Wales</ulink> as published by Creative Commons.
|
|
</para>
|
|
<note><title>Manual Notes</title>
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
This version of the
|
|
<emphasis>Yocto Project Quick Start</emphasis>
|
|
is for the &YOCTO_DOC_VERSION; release of the
|
|
Yocto Project.
|
|
To be sure you have the latest version of the manual
|
|
for this release, use the manual from the
|
|
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
For manuals associated with other releases of the Yocto
|
|
Project, go to the
|
|
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
|
|
and use the drop-down "Active Releases" button
|
|
and choose the manual associated with the desired
|
|
Yocto Project.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
To report any inaccuracies or problems with this
|
|
manual, send an email to the Yocto Project
|
|
discussion group at
|
|
<filename>yocto@yoctoproject.com</filename> or log into
|
|
the freenode <filename>#yocto</filename> channel.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</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_REF_URL;#bitbake-term'>BitBake</ulink>
|
|
tool, to construct complete Linux images.
|
|
The BitBake and OE components combine together to form
|
|
a reference build host, historically known as
|
|
<ulink url='&YOCTO_DOCS_REF_URL;#poky'>Poky</ulink>
|
|
(<emphasis>Pah</emphasis>-kee).
|
|
</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 either a
|
|
supported Linux build host or a build host set up to use
|
|
<ulink url='https://git.yoctoproject.org/cgit/cgit.cgi/crops/about/'>CROPS</ulink>,
|
|
which leverages
|
|
<ulink url='https://www.docker.com/'>Docker Containers</ulink>.
|
|
</para>
|
|
|
|
<para>
|
|
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 runs on the emulator (QEMU) and one that boots on actual
|
|
hardware (i.e. MinnowBoard Turbot).
|
|
The examples highlight the ease with which you can use the
|
|
Yocto Project to create images for multiple types of hardware.
|
|
</para>
|
|
|
|
<para>
|
|
The following list directs you to key sections of this
|
|
quick start:
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
<ulink url='http://www.yoctoproject.org/docs/2.4/yocto-project-qs/yocto-project-qs.html#yp-resources'>Setting Up to Use the Yocto Project</ulink>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<ulink url='http://www.yoctoproject.org/docs/2.4/yocto-project-qs/yocto-project-qs.html#building-an-image-for-emulation'>Building an Image for Emulation</ulink>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<ulink url='http://www.yoctoproject.org/docs/2.4/yocto-project-qs/yocto-project-qs.html#building-an-image-for-hardware'>Building an Image for Hardware</ulink>
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
<!--
|
|
<note>
|
|
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.
|
|
</note>
|
|
-->
|
|
</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 bacground 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>Yocto Project Development Environment Overview:</emphasis>
|
|
The
|
|
"<ulink url='&YOCTO_DOCS_REF_URL;#yp-intro'>Introducing the Yocto Project Development Environment</ulink>"
|
|
section presents an overview of the Yocto Project
|
|
development environment.
|
|
</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>
|
|
<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 related links and documentation.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
|
|
<section id='yp-resources'>
|
|
<title>Setting Up to Use the Yocto Project</title>
|
|
|
|
<para>
|
|
Setting up to use the Yocto Project involves getting your build
|
|
host ready.
|
|
If you have a native Linux machine that runs a Yocto Project
|
|
supported distribution as described by the
|
|
"<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
|
|
section in the Yocto Project Reference Manual, you can prepare
|
|
that machine as your build host.
|
|
See the
|
|
"<link linkend='qs-native-linux-build-host'>Using a Native Linux Machine</link>"
|
|
section for more information.
|
|
</para>
|
|
|
|
<para>
|
|
If you do not want to use the Yocto Project on a native Linux
|
|
machine, you can prepare your build host to use
|
|
<ulink url='https://git.yoctoproject.org/cgit/cgit.cgi/crops/about/'>CROPS</ulink>,
|
|
which leverages
|
|
<ulink url='https://www.docker.com/'>Docker Containers</ulink>.
|
|
You can set up a build host for Windows, Mac, and Linux
|
|
machines.
|
|
See the
|
|
"<link linkend='qs-crops-build-host'>Using CROPS and Containers</link>"
|
|
section for more information.
|
|
</para>
|
|
|
|
<section id='qs-crops-build-host'>
|
|
<title>Using CROPS and Containers</title>
|
|
|
|
<para>
|
|
Follow these steps to get your build host set up with a
|
|
Poky container that you can use to complete the build
|
|
examples further down in the Quick Start:
|
|
<orderedlist>
|
|
<listitem><para>
|
|
<emphasis>Set Up to use CROss PlatformS (CROPS):</emphasis>
|
|
Work through the first six steps of the procedure
|
|
in the
|
|
"<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-to-use-crops'>Setting Up to Use CROss PlatformS (CROPS)</ulink>"
|
|
section of the Yocto Project Development Tasks Manual.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Set Up the Poky Container to Use the Yocto Project:</emphasis>
|
|
Go to
|
|
<ulink url='https://github.com/crops/poky-container/blob/master/README.md'></ulink>
|
|
and follow the directions to set up the Poky container
|
|
on your build host.</para>
|
|
|
|
<para>Once you complete the setup instructions for your
|
|
machine, you need to get a copy of the
|
|
<filename>poky</filename> repository on your build
|
|
host.
|
|
See the
|
|
"<link linkend='releases'>Yocto Project Release</link>"
|
|
section to continue.
|
|
</para></listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</section>
|
|
|
|
<section id='qs-native-linux-build-host'>
|
|
<title>Using a Native Linux Machine</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>
|
|
</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.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>
|
|
</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><title>Notes</title>
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
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.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Extra Packages for Enterprise Linux
|
|
(i.e. <filename>epel-release</filename>)
|
|
is a collection of packages from Fedora
|
|
built on RHEL/CentOS for easy installation
|
|
of packages not included in enterprise
|
|
Linux by default.
|
|
You need to install these packages
|
|
separately.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
The <filename>makecache</filename> command
|
|
consumes additional Metadata from
|
|
<filename>epel-release</filename>.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</note>
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</section>
|
|
|
|
<para>
|
|
Once you complete the setup instructions for your
|
|
machine, you need to get a copy of the
|
|
<filename>poky</filename> repository on your build
|
|
host.
|
|
Continue with the
|
|
"<link linkend='releases'>Yocto Project Release</link>"
|
|
section.
|
|
</para>
|
|
</section>
|
|
|
|
<section id='releases'>
|
|
<title>Yocto Project Release</title>
|
|
|
|
<para>
|
|
Now that your build host has the right packages (native
|
|
Linux machine) or you have the Poky container set up
|
|
(CROPS), you need to get a copy of the Yocto Project.
|
|
It is recommended that you get the latest Yocto Project release
|
|
by setting up (cloning in
|
|
<ulink url='&YOCTO_DOCS_REF_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 a native Linux machine that is
|
|
running Ubuntu.
|
|
<note>
|
|
If your build host is using a Poky container, you can
|
|
use the same Git commands.
|
|
</note>
|
|
The following example clones the <filename>poky</filename>
|
|
repository and then checks out the latest Yocto Project Release
|
|
by tag (i.e. <filename>&DISTRO_REL_TAG;</filename>):
|
|
<literallayout class='monospaced'>
|
|
$ git clone git://git.yoctoproject.org/poky
|
|
Cloning into 'poky'...
|
|
remote: Counting objects: 361782, done.
|
|
remote: Compressing objects: 100% (87100/87100), done.
|
|
remote: Total 361782 (delta 268619), reused 361439 (delta 268277)
|
|
Receiving objects: 100% (361782/361782), 131.94 MiB | 6.88 MiB/s, done.
|
|
Resolving deltas: 100% (268619/268619), done.
|
|
Checking connectivity... done.
|
|
$ git checkout tags/&DISTRO_REL_TAG; -b poky_&DISTRO;
|
|
</literallayout>
|
|
</para>
|
|
|
|
<para>
|
|
The previous Git <filename>checkout</filename> command
|
|
creates a local branch named
|
|
<filename>poky_&DISTRO;</filename>.
|
|
The files available to you in that branch exactly match the
|
|
repository's files in the
|
|
<filename>&DISTRO_NAME_NO_CAP;</filename>
|
|
development branch at the time of the Yocto Project &DISTRO;
|
|
release.
|
|
<note>
|
|
Rather than checking out the entire development branch
|
|
of a release (i.e. the tip), which could be continuously
|
|
changing while you are doing your development, you would
|
|
check out a branch based on a release tag as shown in
|
|
the previous example.
|
|
Doing so provides you with an unchanging, stable set of
|
|
files.
|
|
</note>
|
|
</para>
|
|
|
|
<para>
|
|
For more options and information about accessing Yocto
|
|
Project related repositories, see the
|
|
"<ulink url='&YOCTO_DOCS_DEV_URL;#working-with-yocto-project-source-files'>Working With Yocto Project Source Files</ulink>"
|
|
section in the Yocto Project Development Tasks Manual.
|
|
</para>
|
|
</section>
|
|
</section>
|
|
|
|
<section id='qs-building-images'>
|
|
<title>Building Images</title>
|
|
|
|
<para>
|
|
You are now ready to give the Yocto Project a try.
|
|
For this example, you will be using the command line to build
|
|
your images.
|
|
<note>
|
|
A graphical user interface to the Yocto Project is available
|
|
through
|
|
<ulink url='&YOCTO_DOCS_REF_URL;#toaster-term'>Toaster</ulink>.
|
|
See the
|
|
<ulink url='&YOCTO_DOCS_TOAST_URL;'>Toaster User Manual</ulink>
|
|
for more information.
|
|
</note>
|
|
</para>
|
|
|
|
<para>
|
|
The remainder of this quick start steps you through 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 that you can load onto bootable
|
|
media and actually boot target hardware.
|
|
This example uses the MinnowBoard
|
|
Turbot-compatible boards.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
<note>
|
|
The steps in the following two sections 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>
|
|
|
|
<section id='building-an-image-for-emulation'>
|
|
<title>Building an Image for Emulation</title>
|
|
|
|
<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>Notes about Network Proxies</title>
|
|
<itemizedlist>
|
|
<listitem><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></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 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></listitem>
|
|
</itemizedlist>
|
|
</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_REF_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_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>
|
|
<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>
|
|
<note>
|
|
<para>
|
|
If you experience a build error due to resources
|
|
temporarily being unavailable and it appears you
|
|
should not be having this issue, it might be due
|
|
to the combination of a 4.3+ Linux kernel and
|
|
<filename>systemd</filename> version 228+
|
|
(i.e. see this
|
|
<ulink url='http://unix.stackexchange.com/questions/253903/creating-threads-fails-with-resource-temporarily-unavailable-with-4-3-kernel'>link</ulink>
|
|
for information).
|
|
</para>
|
|
|
|
<para>
|
|
To work around this issue, you can try either
|
|
of the following:
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
Try the build again.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Modify the "DefaultTasksMax"
|
|
<filename>systemd</filename> parameter
|
|
by uncommenting it and setting it to
|
|
"infinity".
|
|
You can find this parameter in the
|
|
<filename>system.conf</filename> file
|
|
located in
|
|
<filename>/etc/systemd</filename>
|
|
on most systems.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</note>
|
|
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 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='building-an-image-for-hardware'>
|
|
<title>Building an Image for Hardware</title>
|
|
|
|
<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 Turbot, 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 Turbot 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 Turbot 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_REF_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: 14039, done.
|
|
remote: Compressing objects: 100% (4471/4471), done.
|
|
remote: Total 14039 (delta 8130), reused 13837 (delta 7947)
|
|
Receiving objects: 100% (14039/14039), 4.27 MiB | 3.98 MiB/s, done.
|
|
Resolving deltas: 100% (8130/8130), 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.
|
|
Because you used the <filename>&DISTRO_REL_TAG;</filename>
|
|
tag when you checked out the <filename>poky</filename>
|
|
repository by tag, you should use a
|
|
<filename>meta-intel</filename>
|
|
tag that corresponds with the release you used for
|
|
<filename>poky</filename>.
|
|
Consequently, you need to checkout out the
|
|
"<filename>&METAINTELVERSION;-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;</filename>"
|
|
branch after cloning <filename>meta-intel</filename>:
|
|
<literallayout class='monospaced'>
|
|
$ cd $HOME/poky/meta-intel
|
|
$ git checkout tags/&METAINTELVERSION;-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION; -b meta-intel-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;
|
|
Switched to a new branch 'meta-intel-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;'
|
|
</literallayout>
|
|
The previous Git <filename>checkout</filename> command
|
|
creates a local branch named
|
|
<filename>meta-intel-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;</filename>.
|
|
You have the option to name your local branch whatever
|
|
you want by providing any name you like for
|
|
"meta-intel-&DISTRO_NAME_NO_CAP;-&YOCTO_DOC_VERSION;"
|
|
in the above example.
|
|
</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 an Image for MinnowBoard
|
|
Turbot:</emphasis>
|
|
The type of image you build depends on your goals.
|
|
For example, the previous build created a
|
|
<filename>core-image-sato</filename> image, which is an
|
|
image with Sato support.
|
|
It is possible to build many image types for the
|
|
MinnowBoard Turbot.
|
|
Some possibilities are <filename>core-image-base</filename>,
|
|
which is a console-only image.
|
|
Another choice could be a
|
|
<filename>core-image-full-cmdline</filename>, which is
|
|
another console-only image but has more full-features
|
|
Linux system functionality installed.
|
|
For types of images you can build using the Yocto
|
|
Project, see the
|
|
"<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
|
|
chapter in the Yocto Project Reference Manual.</para>
|
|
<para>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.
|
|
For this example, the <filename>core-image-base</filename>
|
|
image is built:
|
|
<literallayout class='monospaced'>
|
|
$ bitbake core-image-base
|
|
</literallayout>
|
|
<note>
|
|
<para>
|
|
If you experience a build error due to resources
|
|
temporarily being unavailable and it appears you
|
|
should not be having this issue, it might be due
|
|
to the combination of a 4.3+ Linux kernel and
|
|
<filename>systemd</filename> version 228+
|
|
(i.e. see this
|
|
<ulink url='http://unix.stackexchange.com/questions/253903/creating-threads-fails-with-resource-temporarily-unavailable-with-4-3-kernel'>link</ulink>
|
|
for information).
|
|
</para>
|
|
|
|
<para>
|
|
To work around this issue, you can try either
|
|
of the following:
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
Try the build again.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
Modify the "DefaultTasksMax"
|
|
<filename>systemd</filename> parameter
|
|
by uncommenting it and setting it to
|
|
"infinity".
|
|
You can find this parameter in the
|
|
<filename>system.conf</filename> file
|
|
located in
|
|
<filename>/etc/systemd</filename>
|
|
on most systems.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</note>
|
|
Once the build completes, the resulting console-only image
|
|
is located in the Build Directory here:
|
|
<literallayout class='monospaced'>
|
|
tmp/deploy/images/intel-corei7-64/core-image-base-intel-corei7-64.wic
|
|
</literallayout>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Write the Image:</emphasis>
|
|
You can write the image just built to a bootable media
|
|
(e.g. a USB key, SATA drive, SD card, etc.) using the
|
|
<filename>dd</filename> utility:
|
|
<literallayout class='monospaced'>
|
|
$ sudo dd if=tmp/deploy/images/intel-corei7-64/core-image-base-intel-corei7-64.wic of=TARGET_DEVICE
|
|
</literallayout>
|
|
In the previous command, the
|
|
<filename>TARGET_DEVICE</filename> is the device node in
|
|
the host machine (e.g. <filename>/dev/sdc</filename>, which
|
|
is most likely a USB stick, or
|
|
<filename>/dev/mmcblk0</filename>, which is most likely an
|
|
SD card).
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Boot the Hardware:</emphasis>
|
|
With the boot device provisioned, you can insert the
|
|
media into the MinnowBoard Turbot 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>
|
|
|
|
<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
|
|
<ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-intro'>Yocto Project Development Tasks Manual</ulink>:</emphasis>
|
|
This manual contains procedural information grouped to
|
|
help you get set up, work with layers, customize images,
|
|
write new recipes, work with libraries, and use QEMU.
|
|
The information is task-based and spans the breadth of the
|
|
Yocto Project.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Look Through the
|
|
<ulink url='&YOCTO_DOCS_SDK_URL;#sdk-intro'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
|
|
manual:</emphasis>
|
|
This manual 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 example workflows
|
|
that use the popular <trademark class='trade'>Eclipse</trademark>
|
|
development environment and that use <filename>devtool</filename>.
|
|
See the
|
|
"<ulink url='&YOCTO_DOCS_SDK_URL;#workflow-using-eclipse'>Workflow using Eclipse™</ulink>"
|
|
and
|
|
"<ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'>Using <filename>devtool</filename> in your SDK Workflow</ulink>"
|
|
sections for more information.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Learn About Kernel Development:</emphasis>
|
|
If you want to see how to work with the kernel and
|
|
understand Yocto Linux kernels, see the
|
|
<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#kernel-dev-intro'>Yocto Project Linux Kernel Development Manual</ulink>.
|
|
This manual provides information on how to patch the
|
|
kernel, modify kernel recipes, and configure the kernel.
|
|
</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>.
|
|
This manual also provides an example BSP creation workflow.
|
|
See the
|
|
<ulink url='&YOCTO_DOCS_BSP_URL;#developing-a-board-support-package-bsp'>"Developing a Board Support Package (BSP)</ulink>"
|
|
section.
|
|
</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
|
|
<ulink url='&YOCTO_DOCS_REF_URL;#ref-manual-intro'>Yocto Project Reference Manual:</ulink></emphasis>
|
|
Unlike the rest of the Yocto Project manual set, this manual
|
|
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;#development-concepts'>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
|
|
-->
|