forked from brl/citadel
405 lines
19 KiB
XML
405 lines
19 KiB
XML
|
<!DOCTYPE chapter 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; ] >
|
||
|
|
||
|
<chapter id='sdk-intro'>
|
||
|
<title>Introduction</title>
|
||
|
|
||
|
<section id='sdk-manual-intro'>
|
||
|
<title>Introduction</title>
|
||
|
|
||
|
<para>
|
||
|
Welcome to the Yocto Project Application Development and the
|
||
|
Extensible Software Development Kit (eSDK) manual.
|
||
|
This manual provides information that explains how to use both the
|
||
|
Yocto Project extensible and standard SDKs to develop
|
||
|
applications and images.
|
||
|
Additionally, the manual also provides information on how to use
|
||
|
the popular <trademark class='trade'>Eclipse</trademark> IDE as part
|
||
|
of your application development workflow within the SDK environment.
|
||
|
<note>
|
||
|
Prior to the 2.0 Release of the Yocto Project, application
|
||
|
development was primarily accomplished through the use of the
|
||
|
Application Development Toolkit (ADT) and the availability
|
||
|
of stand-alone cross-development toolchains and other tools.
|
||
|
With the 2.1 Release of the Yocto Project, application development
|
||
|
has transitioned to within a tool-rich extensible SDK and the more
|
||
|
traditional standard SDK.
|
||
|
</note>
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
All SDKs consist of the following:
|
||
|
<itemizedlist>
|
||
|
<listitem><para><emphasis>Cross-Development Toolchain</emphasis>:
|
||
|
This toolchain contains a compiler, debugger, and various
|
||
|
miscellaneous tools.
|
||
|
</para></listitem>
|
||
|
<listitem><para><emphasis>Libraries, Headers, and Symbols</emphasis>:
|
||
|
The libraries, headers, and symbols are specific to the image
|
||
|
(i.e. they match the image).
|
||
|
</para></listitem>
|
||
|
<listitem><para><emphasis>Environment Setup Script</emphasis>:
|
||
|
This <filename>*.sh</filename> file, once run, sets up the
|
||
|
cross-development environment by defining variables and
|
||
|
preparing for SDK use.
|
||
|
</para></listitem>
|
||
|
</itemizedlist>
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
Additionally an extensible SDK has tools that allow you to easily add
|
||
|
new applications and libraries to an image, modify the source of an
|
||
|
existing component, test changes on the target hardware, and easily
|
||
|
integrate an application into the
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>OpenEmbedded build system</ulink>.
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
You can use an SDK to independently develop and test code
|
||
|
that is destined to run on some target machine.
|
||
|
SDKs are completely self-contained.
|
||
|
The binaries are linked against their own copy of
|
||
|
<filename>libc</filename>, which results in no dependencies
|
||
|
on the target system.
|
||
|
To achieve this, the pointer to the dynamic loader is
|
||
|
configured at install time since that path cannot be dynamically
|
||
|
altered.
|
||
|
This is the reason for a wrapper around the
|
||
|
<filename>populate_sdk</filename> and
|
||
|
<filename>populate_sdk_ext</filename> archives.
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
Another feature for the SDKs is that only one set of cross-compiler
|
||
|
toolchain binaries are produced for any given architecture.
|
||
|
This feature takes advantage of the fact that the target hardware can
|
||
|
be passed to <filename>gcc</filename> as a set of compiler options.
|
||
|
Those options are set up by the environment script and contained in
|
||
|
variables such as
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#var-CC'><filename>CC</filename></ulink>
|
||
|
and
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#var-LD'><filename>LD</filename></ulink>.
|
||
|
This reduces the space needed for the tools.
|
||
|
Understand, however, that a sysroot is still needed for every target
|
||
|
since those binaries are target-specific.
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
The SDK development environment consists of the following:
|
||
|
<itemizedlist>
|
||
|
<listitem><para>The self-contained SDK, which is an
|
||
|
architecture-specific cross-toolchain and
|
||
|
matching sysroots (target and native) all built by the
|
||
|
OpenEmbedded build system (e.g. the SDK).
|
||
|
The toolchain and sysroots are based on a
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>
|
||
|
configuration and extensions,
|
||
|
which allows you to cross-develop on the host machine for the
|
||
|
target hardware.
|
||
|
Additionally, the extensible SDK contains the
|
||
|
<filename>devtool</filename> functionality.
|
||
|
</para></listitem>
|
||
|
<listitem><para>The Quick EMUlator (QEMU), which lets you simulate
|
||
|
target hardware.
|
||
|
QEMU is not literally part of the SDK.
|
||
|
You must build and include this emulator separately.
|
||
|
However, QEMU plays an important role in the development
|
||
|
process that revolves around use of the SDK.
|
||
|
</para></listitem>
|
||
|
<listitem><para>The Eclipse IDE Yocto Plug-in.
|
||
|
This plug-in is available for you if you are an Eclipse
|
||
|
user.
|
||
|
In the same manner as QEMU, the plug-in is not literally part
|
||
|
of the SDK but is rather available for use as part of the
|
||
|
development process.
|
||
|
</para></listitem>
|
||
|
<listitem><para>Various performance-related
|
||
|
<ulink url='http://www.eclipse.org/linuxtools/index.php'>tools</ulink>
|
||
|
that can enhance your development experience.
|
||
|
These tools are also separate from the actual SDK but can be
|
||
|
independently obtained and used in the development process.
|
||
|
</para></listitem>
|
||
|
</itemizedlist>
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
In summary, the extensible and standard SDK share many features.
|
||
|
However, the extensible SDK has powerful development tools to help you
|
||
|
more quickly develop applications.
|
||
|
Following is a table that summarizes the primary differences between
|
||
|
the standard and extensible SDK types when considering which to
|
||
|
build:
|
||
|
<informaltable frame='none'>
|
||
|
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
|
||
|
<colspec colname='c1' colwidth='1*'/>
|
||
|
<colspec colname='c2' colwidth='1*'/>
|
||
|
<colspec colname='c3' colwidth='1*'/>
|
||
|
<thead>
|
||
|
<row>
|
||
|
<entry align="left"><emphasis>Feature</emphasis></entry>
|
||
|
<entry align="left"><emphasis>Standard SDK</emphasis></entry>
|
||
|
<entry align="left"><emphasis>Extensible SDK</emphasis></entry>
|
||
|
</row>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry align="left">Toolchain</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
<entry align="left">Yes*</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Debugger</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
<entry align="left">Yes*</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Size</entry>
|
||
|
<entry align="left">100+ MBytes</entry>
|
||
|
<entry align="left">1+ GBytes (or 300+ MBytes for minimal w/toolchain)</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left"><filename>devtool</filename></entry>
|
||
|
<entry align="left">No</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Build Images</entry>
|
||
|
<entry align="left">No</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Updateable</entry>
|
||
|
<entry align="left">No</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Managed Sysroot**</entry>
|
||
|
<entry align="left">No</entry>
|
||
|
<entry align="left">Yes</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Installed Packages</entry>
|
||
|
<entry align="left">No***</entry>
|
||
|
<entry align="left">Yes****</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry align="left">Construction</entry>
|
||
|
<entry align="left">Packages</entry>
|
||
|
<entry align="left">Shared State</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
<literallayout class='monospaced'>
|
||
|
* Extensible SDK will contain the toolchain and debugger if <ulink url='&YOCTO_DOCS_REF_URL;#var-SDK_EXT_TYPE'><filename>SDK_EXT_TYPE</filename></ulink> is "full" or <ulink url='&YOCTO_DOCS_REF_URL;#var-SDK_INCLUDE_TOOLCHAIN'><filename>SDK_INCLUDE_TOOLCHAIN</filename></ulink> is "1", which is the default.
|
||
|
|
||
|
** Sysroot is managed through use of <filename>devtool</filename>. Thus, it is less likely that you will corrupt your SDK sysroot when you try to add additional libraries.
|
||
|
|
||
|
*** Runtime package management can be added to the standard SDK but it is not supported by default.
|
||
|
|
||
|
**** You must build and make the shared state available to extensible SDK users for "packages" you want to enable users to install.
|
||
|
</literallayout>
|
||
|
</para>
|
||
|
|
||
|
<section id='the-cross-development-toolchain'>
|
||
|
<title>The Cross-Development Toolchain</title>
|
||
|
|
||
|
<para>
|
||
|
The
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#cross-development-toolchain'>Cross-Development Toolchain</ulink>
|
||
|
consists of a cross-compiler, cross-linker, and cross-debugger
|
||
|
that are used to develop user-space applications for targeted
|
||
|
hardware.
|
||
|
Additionally, for an extensible SDK, the toolchain also has
|
||
|
built-in <filename>devtool</filename> functionality.
|
||
|
This toolchain is created by running a SDK installer script
|
||
|
or through a
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
|
||
|
that is based on your Metadata configuration or extension for
|
||
|
your targeted device.
|
||
|
The cross-toolchain works with a matching target sysroot.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section id='sysroot'>
|
||
|
<title>Sysroots</title>
|
||
|
|
||
|
<para>
|
||
|
The native and target sysroots contain needed headers and libraries
|
||
|
for generating binaries that run on the target architecture.
|
||
|
The target sysroot is based on the target root filesystem image
|
||
|
that is built by the OpenEmbedded build system and uses the same
|
||
|
Metadata configuration used to build the cross-toolchain.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section id='the-qemu-emulator'>
|
||
|
<title>The QEMU Emulator</title>
|
||
|
|
||
|
<para>
|
||
|
The QEMU emulator allows you to simulate your hardware while
|
||
|
running your application or image.
|
||
|
QEMU is not part of the SDK but is made available a number of ways:
|
||
|
<itemizedlist>
|
||
|
<listitem><para>
|
||
|
If you have cloned the <filename>poky</filename> Git
|
||
|
repository to create a
|
||
|
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
|
||
|
and you have sourced the environment setup script, QEMU is
|
||
|
installed and automatically available.
|
||
|
</para></listitem>
|
||
|
<listitem><para>
|
||
|
If you have downloaded a Yocto Project release and unpacked
|
||
|
it to create a Source Directory and you have sourced the
|
||
|
environment setup script, QEMU is installed and
|
||
|
automatically available.
|
||
|
</para></listitem>
|
||
|
<listitem><para>
|
||
|
If you have installed the cross-toolchain tarball and you
|
||
|
have sourced the toolchain's setup environment script, QEMU
|
||
|
is also installed and automatically available.
|
||
|
</para></listitem>
|
||
|
</itemizedlist>
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section id='eclipse-overview'>
|
||
|
<title>Eclipse Yocto Plug-in</title>
|
||
|
|
||
|
<para>
|
||
|
The Eclipse IDE is a popular development environment and it fully
|
||
|
supports development using the Yocto Project.
|
||
|
When you install and configure the Eclipse Yocto Project Plug-in
|
||
|
into the Eclipse IDE, you maximize your Yocto Project experience.
|
||
|
Installing and configuring the Plug-in results in an environment
|
||
|
that has extensions specifically designed to let you more easily
|
||
|
develop software.
|
||
|
These extensions allow for cross-compilation, deployment, and
|
||
|
execution of your output into a QEMU emulation session.
|
||
|
You can also perform cross-debugging and profiling.
|
||
|
The environment also supports many performance-related
|
||
|
<ulink url='http://www.eclipse.org/linuxtools/index.php'>tools</ulink>
|
||
|
that enhance your development experience.
|
||
|
<note>
|
||
|
Previous releases of the Eclipse Yocto Plug-in supported
|
||
|
"user-space tools" (i.e. LatencyTOP, PowerTOP, Perf, SystemTap,
|
||
|
and Lttng-ust) that also added to the development experience.
|
||
|
These tools have been deprecated beginning with this release
|
||
|
of the plug-in.
|
||
|
</note>
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
For information about the application development workflow that
|
||
|
uses the Eclipse IDE and for a detailed example of how to install
|
||
|
and configure the Eclipse Yocto Project Plug-in, see the
|
||
|
"<link linkend='sdk-eclipse-project'>Developing Applications Using <trademark class='trade'>Eclipse</trademark></link>"
|
||
|
Chapter.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
<section id='performance-enhancing-tools'>
|
||
|
<title>Performance Enhancing Tools</title>
|
||
|
|
||
|
<para>
|
||
|
Supported performance enhancing tools are available that let you
|
||
|
profile, debug, and perform tracing on your projects developed
|
||
|
using Eclipse.
|
||
|
For information on these tools see
|
||
|
<ulink url='http://www.eclipse.org/linuxtools/'>http://www.eclipse.org/linuxtools/</ulink>.
|
||
|
</para>
|
||
|
</section>
|
||
|
</section>
|
||
|
|
||
|
<section id='sdk-development-model'>
|
||
|
<title>SDK Development Model</title>
|
||
|
|
||
|
<para>
|
||
|
Fundamentally, the SDK fits into the development process as follows:
|
||
|
<imagedata fileref="figures/sdk-environment.png" align="center" width="6in" depth="5in" scalefit="100" />
|
||
|
The SDK is installed on any machine and can be used to develop
|
||
|
applications, images, and kernels.
|
||
|
An SDK can even be used by a QA Engineer or Release Engineer.
|
||
|
The fundamental concept is that the machine that has the SDK installed
|
||
|
does not have to be associated with the machine that has the
|
||
|
Yocto Project installed.
|
||
|
A developer can independently compile and test an object on their
|
||
|
machine and then, when the object is ready for integration into an
|
||
|
image, they can simply make it available to the machine that has the
|
||
|
Yocto Project.
|
||
|
Once the object is available, the image can be rebuilt using the
|
||
|
Yocto Project to produce the modified image.
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
You just need to follow these general steps:
|
||
|
<orderedlist>
|
||
|
<listitem><para><emphasis>Install the SDK for your target hardware:</emphasis>
|
||
|
For information on how to install the SDK, see the
|
||
|
"<link linkend='sdk-installing-the-sdk'>Installing the SDK</link>"
|
||
|
section.</para></listitem>
|
||
|
<listitem><para><emphasis>Download or Build the Target Image:</emphasis>
|
||
|
The Yocto Project supports several target architectures
|
||
|
and has many pre-built kernel images and root filesystem
|
||
|
images.</para>
|
||
|
<para>If you are going to develop your application on
|
||
|
hardware, go to the
|
||
|
<ulink url='&YOCTO_MACHINES_DL_URL;'><filename>machines</filename></ulink>
|
||
|
download area and choose a target machine area
|
||
|
from which to download the kernel image and root filesystem.
|
||
|
This download area could have several files in it that
|
||
|
support development using actual hardware.
|
||
|
For example, the area might contain
|
||
|
<filename>.hddimg</filename> files that combine the
|
||
|
kernel image with the filesystem, boot loaders, and
|
||
|
so forth.
|
||
|
Be sure to get the files you need for your particular
|
||
|
development process.</para>
|
||
|
<para>If you are going to develop your application and
|
||
|
then run and test it using the QEMU emulator, go to the
|
||
|
<ulink url='&YOCTO_QEMU_DL_URL;'><filename>machines/qemu</filename></ulink>
|
||
|
download area.
|
||
|
From this area, go down into the directory for your
|
||
|
target architecture (e.g. <filename>qemux86_64</filename>
|
||
|
for an <trademark class='registered'>Intel</trademark>-based
|
||
|
64-bit architecture).
|
||
|
Download kernel, root filesystem, and any other files you
|
||
|
need for your process.
|
||
|
<note>
|
||
|
To use the root filesystem in QEMU, you
|
||
|
need to extract it.
|
||
|
See the
|
||
|
"<link linkend='sdk-extracting-the-root-filesystem'>Extracting the Root Filesystem</link>"
|
||
|
section for information on how to extract the root
|
||
|
filesystem.
|
||
|
</note>
|
||
|
</para></listitem>
|
||
|
<listitem><para><emphasis>Develop and Test your
|
||
|
Application:</emphasis> At this point, you have the tools
|
||
|
to develop your application.
|
||
|
If you need to separately install and use the QEMU
|
||
|
emulator, you can go to
|
||
|
<ulink url='http://wiki.qemu.org/Main_Page'>QEMU Home Page</ulink>
|
||
|
to download and learn about the emulator.
|
||
|
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
|
||
|
for information on using QEMU within the Yocto
|
||
|
Project.</para></listitem>
|
||
|
</orderedlist>
|
||
|
</para>
|
||
|
|
||
|
<para>
|
||
|
The remainder of this manual describes how to use both the standard
|
||
|
SDK and the extensible SDK.
|
||
|
Information also exists in appendix form that describes how you can
|
||
|
build, install, and modify an SDK.
|
||
|
</para>
|
||
|
</section>
|
||
|
|
||
|
</chapter>
|
||
|
<!--
|
||
|
vim: expandtab tw=80 ts=4
|
||
|
-->
|