mirror of
https://git.yoctoproject.org/poky
synced 2026-03-12 10:19:44 +01:00
Because the BSP example is now in an appendix, I re-wrote this section to overview the case. (From yocto-docs rev: c0d88c6050bd17d65d8fe8c8abb227998fd4c11e) Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
661 lines
38 KiB
XML
661 lines
38 KiB
XML
<!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-cases'>
|
||
|
||
<title>Development Cases</title>
|
||
|
||
<para>
|
||
Many development cases exist for which you can use the Yocto Project.
|
||
However, for the purposes of this manual we are going to focus on two common development cases or groupings:
|
||
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>
|
||
This chapter presents an overview of the primary cases.
|
||
Supsequent appendices in the manual provide detailed explanations of the examples.
|
||
</para>
|
||
|
||
<para>
|
||
[WRITERS NOTE: What is undetermined at this point is how much of the entire development process
|
||
we include in this particular chapter.
|
||
In other words, do we cover debugging and emulation steps here on a case-specific basis?
|
||
Or, do we capture that information in the appropriate subsequent chapter by case?]
|
||
</para>
|
||
|
||
<section id='system-development'>
|
||
<title>System Development</title>
|
||
|
||
<para>
|
||
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
|
||
covers two types of image development: BSP creation and kernel modification.
|
||
</para>
|
||
|
||
<section id='developing-a-board-support-package-bsp'>
|
||
<title>Developing a Board Support Package (BSP)</title>
|
||
|
||
<para>
|
||
A BSP is a package of recipes that when applied while building an image results in
|
||
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.
|
||
You can reference <xref linkend='dev-manual-bsp-appendix'>BSP Development Case</xref>
|
||
for a detailed example that uses the Crown Bay BSP as a base BSP from which to start.
|
||
</para>
|
||
|
||
<para>
|
||
Here are the basic steps involved in creating a BSP:
|
||
<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.
|
||
Or, at a minimum, it gives you some structure with which to start.</para>
|
||
<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>
|
||
<listitem><para><emphasis>Establish a local copy of the base BSP files</emphasis>: Having
|
||
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
|
||
<xref linkend='getting-setup'>Getting Setup</xref> earlier in this manual.</para></listitem>
|
||
<listitem><para><emphasis>Create your own BSP layer</emphasis>: Layers are ideal for
|
||
isolating and storing work for a given piece of hardware.
|
||
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
|
||
Yocto Project release: <filename>atom-pc</filename>, <filename>beagleboard</filename>,
|
||
<filename>mpc8315e</filename>, and <filename>routerstationpro</filename>.
|
||
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
|
||
<ulink url='http://www.yoctoproject.org/docs/1.1/bsp-guide/bsp-guide.html#bsp-filelayout'>
|
||
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
|
||
BSP layer.</para>
|
||
<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
|
||
that has the <filename>initramfs</filename> as part of the kernel, which allows the
|
||
system to find the first “init” program more efficiently.</para></listitem>
|
||
<listitem><para><emphasis>Minimal Live</emphasis> – A Minimal Live image.</para></listitem>
|
||
<listitem><para><emphasis>Minimal MTD Utilities</emphasis> – A minimal image that has support
|
||
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
|
||
image.</para></listitem>
|
||
</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.
|
||
</para>
|
||
</section>
|
||
|
||
<section id='modifying-a-kernel-kernel-example'>
|
||
<title>Modifying a Kernel</title>
|
||
|
||
<para>
|
||
Kernel modification involves changing or adding configurations to an existing kernel, or
|
||
adding recipes to the kernel that are needed to support specific hardware features.
|
||
The process is similar to creating a Board Support Package (BSP) except that it does not
|
||
involve a BSP layer.
|
||
</para>
|
||
|
||
<para>
|
||
This section presents a brief overview of the kernel structure and then provides a simple
|
||
example that shows how to modify the kernel.
|
||
</para>
|
||
|
||
<section id='yocto-project-kernel'>
|
||
<title>Yocto Project Kernel Overview</title>
|
||
|
||
<para>
|
||
When one thinks of the source files for a kernel they usually think of a fixed structure
|
||
of files that contain kernel patches.
|
||
The Yocto Project, however, employs mechanisims that in a sense result in a kernel source
|
||
generator.
|
||
</para>
|
||
|
||
<para>
|
||
The Yocto Project uses the source code management (SCM) tool Git to manage and track Yocto
|
||
Project files.
|
||
Git employs branching strategies that effectively produce a tree-like structure whose
|
||
branches represent diversions from more general code.
|
||
For example, suppose two kernels are basically identical with the exception of a couple
|
||
different features in each.
|
||
In the Yocto Project source repositories managed by Git a main branch can contain the
|
||
common or shared
|
||
parts of the kernel source and two branches that diverge from that common branch can
|
||
each contain the features specific to the respective kernel.
|
||
The result is a managed tree whose "leaves" represent the end of a specific path that yields
|
||
a set of kernel source files necessary for a specific piece of hardware and its features.
|
||
</para>
|
||
|
||
<para>
|
||
A big advantage to this scheme is the sharing of common features by keeping them in
|
||
"larger" branches that are further up the tree.
|
||
This practice eliminates redundant storage of similar features shared among kernels.
|
||
</para>
|
||
|
||
<para>
|
||
When you build the kernel on your development system all files needed for the build
|
||
are taken from the Yocto Project source repositories pointed to by the
|
||
<filename>SRC_URI</filename> variable and gathered in a temporary work area
|
||
where they are subsequently used to create the unique kernel.
|
||
Thus, in a sense, the process constructs a local source tree specific to your
|
||
kernel to generate the new kernel image - a source generator if you will.
|
||
</para>
|
||
|
||
<para>
|
||
For a complete discussion of the Yocto Project kernel's architcture and its branching strategy,
|
||
see the <ulink url='http://www.yoctoproject.org/docs/1.1/kernel-manual/kernel-manual.html'>
|
||
The Yocto Project Kernel Architecture and Use Manual</ulink>.
|
||
</para>
|
||
|
||
<para>
|
||
You can find a web interface to the Yocto Project source repository at
|
||
<ulink url='http://git.yoctoproject.org/'></ulink>.
|
||
Within the interface you will see groups of related source code, each of which can
|
||
be cloned using Git to result in a working Git repository on your local system
|
||
(referred to as the "local Yocto Project files" in this manual).
|
||
The Yocto Project supports four types of kernels in its source repositories at
|
||
<ulink url='http://git.yoctoproject.org/'></ulink>:
|
||
<itemizedlist>
|
||
<listitem><para><emphasis><filename>linux-yocto-2.6.34</filename></emphasis> - The
|
||
stable Linux Yocto kernel that is based on the Linux 2.6.34 release.</para></listitem>
|
||
<listitem><para><emphasis><filename>linux-yocto-2.6.37</filename></emphasis> - The current
|
||
Linux Yocto kernel that is based on the Linux 2.6.37 release.</para></listitem>
|
||
<listitem><para><emphasis><filename>linux-yocto-dev</filename></emphasis> - A development
|
||
kernel based on the Linux 2.6.39-rc1 release.</para></listitem>
|
||
<listitem><para><emphasis><filename>linux-2.6</filename></emphasis> - A kernel based on
|
||
minimal Linux mainline tracking.
|
||
[WRITER'S NOTE: I don't know which Git repository the user needs to clone to get this
|
||
repository on their development system.]</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</section>
|
||
|
||
<section id='modifying-a-kernel-example'>
|
||
<title>Modifying a Kernel Example</title>
|
||
|
||
<para>
|
||
This section presents a simple example that illustrates kernel modification
|
||
based on the <filename>linux-yocto-2.6.37</filename> kernel.
|
||
The example uses the audio and mixer capabilities supported by the
|
||
<ulink url='http://www.alsa-project.org/main/index.php/Main_Page'>Advanced Linux
|
||
Sound Architecture (ALSA) Project</ulink>.
|
||
As the example progresses you will see how to do the following:
|
||
<itemizedlist>
|
||
<listitem><para>Iteratively modify a base kernel locally.</para></listitem>
|
||
<listitem><para>Provide a recipe-based solution for your modified kernel.
|
||
</para></listitem>
|
||
<listitem><para>Proved an "in-tree" solution for your modified kernel
|
||
(i.e. make the modifcations part of the Yocto Project).</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<para>
|
||
The example flows as follows:
|
||
</para>
|
||
|
||
<para>
|
||
<itemizedlist>
|
||
<listitem><para>Be sure your host development system is set up to support
|
||
development using the Yocto Project.
|
||
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>Set up your environment for optimal local kernel development.
|
||
</para></listitem>
|
||
<listitem><para>Create a layer to isolate your kernel work.</para></listitem>
|
||
<listitem><para>Next item.</para></listitem>
|
||
<listitem><para>Next item.</para></listitem>
|
||
<listitem><para>Next item.</para></listitem>
|
||
<listitem><para>Next item.</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<section id='setting-up-yocto-project-kernel-example'>
|
||
<title>Setting Up Yocto Project</title>
|
||
|
||
<para>
|
||
You need to have the Yocto Project files available on your host system.
|
||
The process is identical to that described in the
|
||
<xref linkend='getting-setup'>"Getting Setup"</xref> section earlier in this
|
||
manual.
|
||
Be sure to either set up a local Git repository for <filename>poky</filename>
|
||
or download and unpack the Yocto Project release tarball.
|
||
</para>
|
||
</section>
|
||
|
||
<section id='create-a-git-repository-of-poky-extras'>
|
||
<title>Create a Git Repository of <filename>poky-extras</filename></title>
|
||
|
||
<para>
|
||
Everytime you change a configuration or add a recipe to the kernel you need to
|
||
do a fetch from the Linux Yocto kernel source repositories.
|
||
This can get tedious and time consuming if you need to fetch the entire
|
||
Linux Yocto 2.6.37 Git repository down from the Internet everytime you make a change
|
||
to the kernel.
|
||
</para>
|
||
|
||
<para>
|
||
You can get around this by setting up a <filename>meta-kernel-dev</filename>
|
||
area on your local system.
|
||
This area contains "append" files for every kernel recipe, which also include
|
||
a <filename>KSRC</filename> statement that points to the kernel source files.
|
||
You can set up the environment so that the <filename>KSRC</filename> points to the
|
||
<filename>meta-kernel-dev</filename>, thus pulling source from a local area.
|
||
This setup can speed up development time.
|
||
</para>
|
||
|
||
<para>
|
||
To get set up you need to do two things: create a local Git repository
|
||
of the <filename>poky-extras</filename> repository, and create a bare clone of the
|
||
Linux Yocto 2.6.37 kernel Git repository.
|
||
</para>
|
||
|
||
<para>
|
||
The following transcript shows how to clone the <filename>poky-extras</filename>
|
||
Git repository into the current working directory, which is <filename>poky</filename>
|
||
in this example.
|
||
The command creates the repository in a directory named <filename>poky-extras</filename>:
|
||
<literallayout class='monospaced'>
|
||
$ git clone git://git.yoctoproject.org/poky-extras
|
||
Initialized empty Git repository in /home/scottrif/poky/poky-extras/.git/
|
||
remote: Counting objects: 532, done.
|
||
remote: Compressing objects: 100% (472/472), done.
|
||
remote: Total 532 (delta 138), reused 307 (delta 39)
|
||
Receiving objects: 100% (532/532), 534.28 KiB | 362 KiB/s, done.
|
||
Resolving deltas: 100% (138/138), done.
|
||
</literallayout>
|
||
</para>
|
||
|
||
<para>
|
||
This transcript shows how to clone a bare Git repository of the Linux Yocto
|
||
2.6.37 kernel:
|
||
<literallayout class='monospaced'>
|
||
$ git clone --bare git://git.yoctoproject.org/linux-yocto-2.6.37
|
||
Initialized empty Git repository in /home/scottrif/linux-yocto-2.6.37.git/
|
||
remote: Counting objects: 1886034, done.
|
||
remote: Compressing objects: 100% (314326/314326), done.
|
||
remote: Total 1886034 (delta 1570202), reused 1870335 (delta 1554798)
|
||
Receiving objects: 100% (1886034/1886034), 401.51 MiB | 714 KiB/s, done.
|
||
Resolving deltas: 100% (1570202/1570202), done.
|
||
</literallayout>
|
||
</para>
|
||
|
||
<para>
|
||
The bare clone of the Linux Yocto 2.6.37 kernel on your local system mirrors
|
||
the upstream repository of the kernel.
|
||
You can effectively point to this local clone now during development to avoid
|
||
having to fetch the entire Linux Yocto 2.6.37 kernel every time you make a
|
||
kernel change.
|
||
</para>
|
||
</section>
|
||
|
||
<section id='create-a-layer-for-your-kernel-work'>
|
||
<title>Create a Layer for Your Kernel Work</title>
|
||
|
||
<para>
|
||
It is always good to isolate your work using your own layer.
|
||
Doing so allows you to experiment and easily start over should things go wrong.
|
||
This example uses a layer named <filename>meta-amixer</filename>.
|
||
</para>
|
||
|
||
<para>
|
||
When you set up a layer for kernel work you should follow the general layout
|
||
guidelines as described for BSP layers.
|
||
This layout is described in the
|
||
<ulink url='http://www.yoctoproject.org/docs/1.1/bsp-guide/bsp-guide.html#bsp-filelayout'>
|
||
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.
|
||
[WRITER'S NOTE: The <filename>meta-elc</filename> example uses an
|
||
<filename>images</filename> directory.
|
||
Currently, <filename>images</filename> is not part of the standard BSP layout.
|
||
I need to find out from Darren if this directory is required for kernel work.]
|
||
</para>
|
||
|
||
<para>
|
||
[WRITER'S NOTE: I need a paragraph here describing how to set up the layer.
|
||
I am not sure if you should copy an existing BSP layer and modify from there.
|
||
Or, if you should just look at a BSP layer and then create your own files.
|
||
Email to Darren on this but no answer yet.]
|
||
</para>
|
||
</section>
|
||
|
||
<section id='making-changes-to-your-kernel-layer'>
|
||
<title>Making Changes to Your Kernel Layer</title>
|
||
|
||
<para>
|
||
In the standard layer structure you have several areas that you need to examine or
|
||
modify.
|
||
For this example the layer contains four areas:
|
||
<itemizedlist>
|
||
<listitem><para><emphasis><filename>conf</filename></emphasis> - Contains the
|
||
<filename>layer.conf</filename> that identifies the location of the recipe files.
|
||
</para></listitem>
|
||
<listitem><para><emphasis><filename>images</filename></emphasis> - Contains the
|
||
image recipe file.
|
||
This recipe includes the base image you will be using and specifies other
|
||
packages the image might need.</para></listitem>
|
||
<listitem><para><emphasis><filename>recipes-bsp</filename></emphasis> - Contains
|
||
recipes specific to the hardware for which you are developing the kernel.
|
||
</para></listitem>
|
||
<listitem><para><emphasis><filename>recipes-kernel</filename></emphasis> - Contains the
|
||
"append" files that add information to the main recipe kernel.
|
||
</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<para>
|
||
Let's take a look at the <filename>layer.conf</filename> in the
|
||
<filename>conf</filename> directory first.
|
||
This configuration file enables the Yocto Project build system to locate and
|
||
use the information in your new layer.
|
||
</para>
|
||
|
||
<para>
|
||
The variable <filename>BBPATH</filename> needs to include the path to your layer
|
||
as follows:
|
||
<literallayout class='monospaced'>
|
||
BBPATH := "${BBPATH}:${LAYERDIR}"
|
||
</literallayout>
|
||
And, the variable <filename>BBFILES</filename> needs to be modified to include your
|
||
recipe and append files:
|
||
<literallayout class='monospaced'>
|
||
BBFILES := "${BBFILES} ${LAYERDIR}/images/*.bb \
|
||
${LAYERDIR}/images/*.bbappend \
|
||
${LAYERDIR}/recipes-*/*/*.bb \
|
||
${LAYERDIR}/recipes-*/*/*.bbappend"
|
||
</literallayout>
|
||
Finally, you need to be sure to use your layer name in these variables at the
|
||
end of the file:
|
||
<literallayout class='monospaced'>
|
||
BBFILE_COLLECTIONS += "elc"
|
||
BBFILE_PATTERN_elc := "^${LAYERDIR}/"
|
||
BBFILE_PRIORITY_elc = "9"
|
||
</literallayout>
|
||
</para>
|
||
|
||
<para>
|
||
The <filename>images</filename> directory contains an append file that helps
|
||
further define the image.
|
||
In our example, the base image is <filename>core-image-minimal</filename>.
|
||
The image does, however, need some additional modules that we are using
|
||
for this example.
|
||
These modules support the amixer functionality.
|
||
Here is the append file:
|
||
<literallayout class='monospaced'>
|
||
require recipes-core/images/poky-image-minimal.bb
|
||
|
||
IMAGE_INSTALL += "dropbear alsa-utils-aplay alsa-utils-alsamixer"
|
||
IMAGE_INSTALL_append_qemux86 += " kernel-module-snd-ens1370 \
|
||
kernel-module-snd-rawmidi kernel-module-loop kernel-module-nls-cp437 \
|
||
kernel-module-nls-iso8859-1 qemux86-audio alsa-utils-amixer"
|
||
|
||
LICENSE = "MIT"
|
||
</literallayout>
|
||
</para>
|
||
|
||
<para>
|
||
While the focus of this example is not on the BSP, it is worth mentioning that the
|
||
<filename>recipes-bsp</filename> directory has the recipes and append files for
|
||
features that the hardware requires.
|
||
In this example, there is a script and a recipe to support the
|
||
<filename>amixer</filename> functionality in QEMU.
|
||
It is beyond the scope of this manual to go too deeply into the script.
|
||
Suffice it to say that the script tests for the presence of the mixer, sets up
|
||
default mixer values, enables the mixer, unmutes master and then
|
||
sets the volume to 100.
|
||
</para>
|
||
|
||
<para>
|
||
The recipe <filename>qemu86-audio.bb</filename> installs and runs the
|
||
<filename>amixer</filename> when the system boots.
|
||
Here is the recipe:
|
||
<literallayout class='monospaced'>
|
||
SUMMARY = "Provide a basic init script to enable audio"
|
||
DESCRIPTION = "Set the volume and unmute the Front mixer setting during boot."
|
||
SECTION = "base"
|
||
LICENSE = "MIT"
|
||
LIC_FILES_CHKSUM = "file://${POKYBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58"
|
||
|
||
PR = "r4"
|
||
|
||
inherit update-rc.d
|
||
|
||
RDEPENDS = "alsa-utils-amixer"
|
||
|
||
SRC_URI = "file://qemux86-audio"
|
||
|
||
INITSCRIPT_NAME = "qemux86-audio"
|
||
INITSCRIPT_PARAMS = "defaults 90"
|
||
|
||
do_install() {
|
||
install -d ${D}${sysconfdir} \
|
||
${D}${sysconfdir}/init.d
|
||
install -m 0755 ${WORKDIR}/qemux86-audio ${D}${sysconfdir}/init.d
|
||
cat ${WORKDIR}/${INITSCRIPT_NAME} | \
|
||
sed -e 's,/etc,${sysconfdir},g' \
|
||
-e 's,/usr/sbin,${sbindir},g' \
|
||
-e 's,/var,${localstatedir},g' \
|
||
-e 's,/usr/bin,${bindir},g' \
|
||
-e 's,/usr,${prefix},g' > ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME}
|
||
chmod 755 ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME}
|
||
}
|
||
</literallayout>
|
||
</para>
|
||
|
||
<para>
|
||
The last area to look at is <filename>recipes-kernel</filename>.
|
||
This area holds configuration fragments and kernel append files.
|
||
The append file must have the same name as the kernel recipe, which is
|
||
<filename>linux-yocto-2.6.37</filename> in this example.
|
||
The file can <filename>SRC_URI</filename> statements to point to configuration
|
||
fragments you might have in the layer.
|
||
The file can also contain <filename>KERNEL_FEATURES</filename> statements that specify
|
||
included kernel configurations that ship with the Yocto Project.
|
||
</para>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
</chapter>
|
||
|
||
|
||
|
||
|
||
|
||
<!--
|
||
|
||
|
||
<para>
|
||
[WRITER'S NOTE: This section is a second example that focuses on just modifying the kernel.
|
||
I don't have any information on this yet.
|
||
</para>
|
||
|
||
<para>
|
||
Here are some points to consider though:
|
||
<itemizedlist>
|
||
<listitem><para>Reference Darren's presentation
|
||
<ulink url='http://events.linuxfoundation.org/events/embedded-linux-conference/hart'>
|
||
here</ulink></para></listitem>
|
||
<listitem><para>Reference <xref linkend='dev-manual-start'>Getting Started with the Yocto Project</xref>
|
||
section to get set up at minimum.</para></listitem>
|
||
<listitem><para>Are there extra steps I need specific to kernel development to get started?</para></listitem>
|
||
<listitem><para>What do I do to get set up?
|
||
Is it a matter of just installing YP and having some pieces together?
|
||
What are the pieces?</para></listitem>
|
||
<listitem><para>Where do I get the base kernel to start with?</para></listitem>
|
||
<listitem><para>Do I install the appropriate toolchain?</para></listitem>
|
||
<listitem><para>What kernel git repository do I use?</para></listitem>
|
||
<listitem><para>What is the conversion script?
|
||
What does it do?</para></listitem>
|
||
<listitem><para>What do I have to do to integrate the kernel layer?</para></listitem>
|
||
<listitem><para>What do I use to integrate the kernel layer?
|
||
HOB?
|
||
Do I just Bitbake it?</para></listitem>
|
||
<listitem><para>Using the System Image Creator.]</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</section>
|
||
</section>
|
||
</section>
|
||
|
||
<section id='user-application-development'>
|
||
<title>User Application Development</title>
|
||
|
||
<para>
|
||
[WRITER'S NOTE: This section is the second major development case - developing an application.
|
||
Here are points to consider:
|
||
<itemizedlist>
|
||
<listitem><para>User-space Application Development scenario overview.</para></listitem>
|
||
<listitem><para>Using the Yocto Eclipse Plug-in.</para></listitem>
|
||
<listitem><para>Back-door support.</para></listitem>
|
||
<listitem><para>I feel there is more to this area than we have captured during our two
|
||
review meetings.]</para></listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
</section>
|
||
</chapter>
|
||
-->
|
||
|
||
<!--
|
||
vim: expandtab tw=80 ts=4
|
||
-->
|