2011-07-15 19:54:29 +00:00
|
|
|
|
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
|
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
|
|
|
|
|
|
<chapter id='dev-manual-model'>
|
|
|
|
|
|
|
|
|
|
<title>Common Development Models</title>
|
|
|
|
|
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<para>
|
|
|
|
|
Many development models exist for which you can use the Yocto Project.
|
|
|
|
|
However, for the purposes of this manual we are going to focus on two common ones:
|
|
|
|
|
System Development and User Application Development.
|
|
|
|
|
System Development covers Board Support Package (BSP) development and kernel modification.
|
|
|
|
|
User Application Development covers development of applications that you intend to run on some
|
|
|
|
|
target hardware.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
2011-07-27 20:29:36 +00:00
|
|
|
|
This chapter presents overviews of both system and application models.
|
|
|
|
|
If you want to reference specific examples of these development models,
|
|
|
|
|
see <xref linkend='dev-manual-bsp-appendix'>BSP Development Example</xref> and
|
|
|
|
|
<xref linkend='dev-manual-kernel-appendix'>Kernel Modification Example</xref>.
|
2011-07-27 19:47:59 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<section id='system-development-model'>
|
|
|
|
|
<title>System Development</title>
|
2011-07-15 20:17:07 +00:00
|
|
|
|
|
|
|
|
|
<para>
|
2011-07-27 19:47:59 +00:00
|
|
|
|
System development involves modification or creation of an image that you want to run on
|
|
|
|
|
a specific hardware target.
|
|
|
|
|
Usually when you want to create an image that runs on embedded hardware the image does
|
|
|
|
|
not require the same amount of features that a full-fledged Linux distribution provides.
|
|
|
|
|
Thus, you can create a much smaller image that is designed to just use the hardware
|
|
|
|
|
features for your particular hardware.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
To help you understand how system development works in the Yocto Project, this section
|
2011-07-28 13:21:28 +00:00
|
|
|
|
covers two types of image development: BSP creation and kernel modification
|
|
|
|
|
(see <xref linkend='kernel-spot'></xref>).
|
2011-07-15 20:17:07 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
2011-07-27 19:59:59 +00:00
|
|
|
|
<section id='developing-a-board-support-package-bsp'>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<title>Developing a Board Support Package (BSP)</title>
|
2011-07-15 20:17:07 +00:00
|
|
|
|
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<para>
|
2011-07-28 12:57:17 +00:00
|
|
|
|
A BSP is a package of recipes that when applied during a build results in
|
2011-07-27 19:10:25 +00:00
|
|
|
|
an image you can run on a particular board.
|
|
|
|
|
Thus, the package, when compiled into the new image, supports the operation of the board.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
For a brief list of terms used when describing the development process in the Yocto Project,
|
|
|
|
|
see <xref linkend='yocto-project-terms'>Yocto Project Terms</xref> in this manual.
|
|
|
|
|
</note>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
The remainder of this section presents the basic steps to create a BSP basing it on an
|
|
|
|
|
existing BSP that ships with the Yocto Project.
|
2011-07-28 12:57:17 +00:00
|
|
|
|
You can reference <xref linkend='dev-manual-bsp-appendix'>BSP Development Example</xref>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
for a detailed example that uses the Crown Bay BSP as a base BSP from which to start.
|
|
|
|
|
</para>
|
|
|
|
|
|
2011-07-27 22:04:14 +00:00
|
|
|
|
<para>
|
2011-07-28 12:57:17 +00:00
|
|
|
|
This illustration and the following list summarizes the BSP creation general workflow.
|
2011-07-27 22:04:14 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
2011-07-28 20:19:56 +00:00
|
|
|
|
<imagedata fileref="figures/bsp-dev-flow.png" width="6in" depth="8.5in" align="left" scale="100" />
|
2011-07-27 22:04:14 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<para>
|
|
|
|
|
<orderedlist>
|
|
|
|
|
<listitem><para><emphasis>Set up your host development system to support
|
|
|
|
|
development using the Yocto Project</emphasis>: See
|
|
|
|
|
<ulink url='http://www.yoctoproject.org/docs/1.1/yocto-project-qs/yocto-project-qs.html#the-linux-distro'>
|
|
|
|
|
The Linux Distributions</ulink> section and
|
|
|
|
|
<ulink url='http://www.yoctoproject.org/docs/1.1/yocto-project-qs/yocto-project-qs.html#packages'>
|
|
|
|
|
The Packages</ulink> section both
|
|
|
|
|
in the Yocto Project Quick Start for requirements.
|
|
|
|
|
You will also need a release of Yocto Project installed on the host.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Establish a local copy of the Yocto Project files on your
|
|
|
|
|
system</emphasis>: You need to have the Yocto Project files available on your host system.
|
|
|
|
|
Having the Yocto Project files on your system gives you access to the build
|
|
|
|
|
process and tools you need.
|
|
|
|
|
For information on how to get these files, see the
|
|
|
|
|
<xref linkend='getting-setup'>Getting Setup</xref> section in this manual.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Choose a Yocto Project-supported BSP as your base BSP</emphasis>:
|
|
|
|
|
The Yocto Project ships with several BSPs that support various hardware.
|
|
|
|
|
It is best to base your new BSP on an existing BSP rather than create all the
|
|
|
|
|
recipes and configuration files from scratch.
|
|
|
|
|
While it is possible to create everything from scratch, basing your new BSP
|
|
|
|
|
on something that is close is much easier.
|
2011-07-27 19:47:59 +00:00
|
|
|
|
Or, at a minimum, it gives you some structure with which to start.</para>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<para>At this point you need to understand your target hardware well enough to determine which
|
|
|
|
|
existing BSP it most closely matches.
|
|
|
|
|
Things to consider are your hardware’s on-board features such as CPU type and graphics support.
|
|
|
|
|
You should look at the README files for supported BSPs to get an idea of which one
|
|
|
|
|
you could use.
|
|
|
|
|
A generic Atom-based BSP to consider is the Crown Bay that does not support
|
|
|
|
|
the Intel® Embedded Media Graphics Driver (EMGD).
|
|
|
|
|
The remainder of this example uses that base BSP.</para>
|
|
|
|
|
<para>To see the supported BSPs, go to the Yocto Project
|
|
|
|
|
<ulink url='http://www.yoctoproject.org/download'>download page</ulink> and click
|
|
|
|
|
on “BSP Downloads.”</para></listitem>
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<listitem><para><emphasis>Establish a local copy of the base BSP files</emphasis>: Having
|
2011-07-27 19:10:25 +00:00
|
|
|
|
the BSP files on your system gives you access to the build
|
|
|
|
|
process and tools you need.
|
|
|
|
|
For information on how to get these files, see
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<xref linkend='getting-setup'>Getting Setup</xref> earlier in this manual.</para></listitem>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<listitem><para><emphasis>Create your own BSP layer</emphasis>: Layers are ideal for
|
2011-07-27 19:47:59 +00:00
|
|
|
|
isolating and storing work for a given piece of hardware.
|
2011-07-27 19:10:25 +00:00
|
|
|
|
A layer is really just a location or area in which you place the recipes for your BSP.
|
|
|
|
|
In fact, a BSP is, in itself, a special type of layer.
|
|
|
|
|
Consider an application as another example that illustrates a layer.
|
|
|
|
|
Suppose you are creating an application that has library or other dependencies in
|
|
|
|
|
order for it to compile and run.
|
|
|
|
|
The layer, in this case, would be where all the recipes that define those dependencies
|
|
|
|
|
are kept. The key point for a layer is that it is an isolated area that contains
|
|
|
|
|
all the relevant information for the project that the Yocto Project build
|
|
|
|
|
system knows about.</para>
|
|
|
|
|
<note>The Yocto Project supports four BSPs that are part of the
|
2011-07-27 19:47:59 +00:00
|
|
|
|
Yocto Project release: <filename>atom-pc</filename>, <filename>beagleboard</filename>,
|
|
|
|
|
<filename>mpc8315e</filename>, and <filename>routerstationpro</filename>.
|
2011-07-27 19:10:25 +00:00
|
|
|
|
The recipes and configurations for these four BSPs are located and dispersed
|
|
|
|
|
within local Yocto Project files.
|
|
|
|
|
Consequently, they are not totally isolated in the spirit of layers unless you think
|
|
|
|
|
of <filename>meta-yocto</filename> as a layer itself.
|
|
|
|
|
On the other hand, BSP layers for Crown Bay, Emenlow, Jasper Forest,
|
|
|
|
|
N450, and Sugar Bay are isolated.</note>
|
|
|
|
|
<para>When you set up a layer for a new BSP you should follow a standard layout.
|
|
|
|
|
This layout is described in the
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<ulink url='http://www.yoctoproject.org/docs/1.1/bsp-guide/bsp-guide.html#bsp-filelayout'>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
Example Filesystem Layout</ulink> section of the Board Support Package (BSP) Development
|
|
|
|
|
Guide.
|
|
|
|
|
In the standard layout you will notice a suggested structure for recipes and
|
|
|
|
|
configuration information.
|
|
|
|
|
You can see the standard layout for the Crown Bay BSP in this example by examining the
|
|
|
|
|
directory structure of the <filename>meta-crownbay</filename> layer inside the
|
|
|
|
|
local Yocto Project files.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Make configuration and recipe changes to your new BSP
|
|
|
|
|
layer</emphasis>: The standard BSP layer structure organizes the files you need to edit in
|
|
|
|
|
<filename>conf</filename> and several <filename>recipes-*</filename> within the
|
2011-07-27 19:47:59 +00:00
|
|
|
|
BSP layer.</para>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
<para>Configuration changes identify where your new layer is on the local system
|
|
|
|
|
and identify which kernel you are going to use.
|
|
|
|
|
Recipe changes include altering recipes (<filename>.bb</filename> files), removing
|
|
|
|
|
recipes you don't use, and adding new recipes that you need to support your hardware.
|
|
|
|
|
</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Prepare for the build</emphasis>: Once you have made all the
|
|
|
|
|
changes to your BSP layer there remains a few things
|
|
|
|
|
you need to do for the Yocto Project build system in order for it to create your image.
|
|
|
|
|
You need to get the build environment ready by sourcing an environment setup script
|
|
|
|
|
and you need to be sure two key configuration files are configured appropriately.</para>
|
|
|
|
|
<para>The entire process for building an image is overviewed in the
|
|
|
|
|
<ulink url='http://www.yoctoproject.org/docs/1.1/yocto-project-qs/yocto-project-qs.html#building-image'>
|
|
|
|
|
Building an Image</ulink> section of the Yocto Project Quick Start.
|
|
|
|
|
You might want to reference this information.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Build the image</emphasis>: The Yocto Project uses the BitBake
|
|
|
|
|
tool to build images based on the type of image
|
|
|
|
|
you want to create.
|
|
|
|
|
You can find more information on BitBake
|
|
|
|
|
<ulink url='http://bitbake.berlios.de/manual/'>here</ulink>.</para>
|
|
|
|
|
<para>The build process supports several types of images to satisfy different needs.
|
|
|
|
|
When you issue the BitBake command you provide a “top-level” recipe that essentially
|
|
|
|
|
starts the process off of building the type of image you want.</para>
|
|
|
|
|
<para>[WRITER'S NOTE: Consider moving this to the Poky Reference Manual.]</para>
|
|
|
|
|
<para>You can find these recipes in the <filename>meta/recipes-core/images</filename> and
|
|
|
|
|
<filename>meta/recipes-sato/images</filename> directories of your local Yocto Project
|
|
|
|
|
file structure (Git repository or extracted release tarball).
|
|
|
|
|
Although the recipe names are somewhat explanatory, here is a list that describes them:
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem><para><emphasis>Base</emphasis> – A foundational basic image without support
|
|
|
|
|
for X that can be reasonably used for customization.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Core</emphasis> – A foundational basic image with support for
|
|
|
|
|
X that can be reasonably used for customization.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Direct Disk</emphasis> – An image that you can copy directory to
|
|
|
|
|
the disk of the target device.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Live</emphasis> – An image you can run from a USB device or from
|
|
|
|
|
a CD without having to first install something.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Minimal</emphasis> – A small image without a GUI.
|
|
|
|
|
This image is not much more than a kernel with a shell.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Minimal Development</emphasis> – A Minimal image suitable for
|
|
|
|
|
development work.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Minimal Direct Disk</emphasis> – A Minimal Direct
|
|
|
|
|
Disk image.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Minimal RAM-based Initial Root Filesystem</emphasis> –
|
|
|
|
|
A minimal image
|
2011-07-27 19:47:59 +00:00
|
|
|
|
that has the <filename>initramfs</filename> as part of the kernel, which allows the
|
2011-07-27 19:10:25 +00:00
|
|
|
|
system to find the first “init” program more efficiently.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Minimal Live</emphasis> – A Minimal Live image.</para></listitem>
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<listitem><para><emphasis>Minimal MTD Utilities</emphasis> – A minimal image that has support
|
2011-07-27 19:10:25 +00:00
|
|
|
|
for the MTD utilities, which let the user interact with the MTD subsystem in
|
|
|
|
|
the kernel to perform operations on flash devices.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato</emphasis> – An image with Sato support, a mobile environment
|
|
|
|
|
and visual style that works well with mobile devices.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato Development</emphasis> – A Sato image suitable for
|
|
|
|
|
development work.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato Direct Disk</emphasis> – A Sato Direct
|
|
|
|
|
Disk image.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato Live</emphasis> – A Sato Live image.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato SDK</emphasis> – A Sato image that includes the Yocto Project
|
|
|
|
|
toolchain and development libraries.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato SDK Direct Disk</emphasis> – A Sato SDK Direct
|
|
|
|
|
Disk image.</para></listitem>
|
|
|
|
|
<listitem><para><emphasis>Sato SDK Live</emphasis> – A Sato SDK Live
|
2011-07-27 19:47:59 +00:00
|
|
|
|
image.</para></listitem>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para></listitem>
|
|
|
|
|
</orderedlist>
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
You can view a video presentation of the BSP creation process
|
|
|
|
|
<ulink url='http://free-electrons.com/blog/elc-2011-videos'>here</ulink>.
|
|
|
|
|
You can also find supplemental information in the
|
|
|
|
|
<ulink url='http://yoctoproject.org/docs/1.1/bsp-guide/bsp-guide.html'>
|
|
|
|
|
Board Support Package (BSP) Development Guide</ulink>.
|
|
|
|
|
Finally, there is wiki page write up of the example located
|
|
|
|
|
<ulink url='https://wiki.yoctoproject.org/wiki/Transcript:_creating_one_generic_Atom_BSP_from_another'>
|
|
|
|
|
here</ulink> you might find helpful.
|
2011-07-27 19:47:59 +00:00
|
|
|
|
</para>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
</section>
|
|
|
|
|
|
2011-07-28 13:21:28 +00:00
|
|
|
|
<section id='modifying-the-kernel'>
|
|
|
|
|
<title><anchor id='kernel-spot' />Modifying the Kernel</title>
|
2011-07-27 19:10:25 +00:00
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Text needed here.
|
|
|
|
|
</para>
|
|
|
|
|
</section>
|
2011-07-15 20:17:07 +00:00
|
|
|
|
</section>
|
|
|
|
|
|
2011-07-27 19:47:59 +00:00
|
|
|
|
<section id='place-holder-section-two'>
|
|
|
|
|
<title>Place-Holder Section For Application Development</title>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
Text needed here.
|
|
|
|
|
</para>
|
|
|
|
|
</section>
|
|
|
|
|
|
2011-07-15 19:54:29 +00:00
|
|
|
|
</chapter>
|
|
|
|
|
<!--
|
|
|
|
|
vim: expandtab tw=80 ts=4
|
|
|
|
|
-->
|