mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

I moved the flow diagram up higher and completely removed the procedures to get the build host ready for kernel development. Those are now in the common tasks chapter. Lots of rewriting Signen-off-by: Scott Rifenbark <srifenbark@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
260 lines
13 KiB
XML
260 lines
13 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='kernel-dev-intro'>
|
|
<title>Introduction</title>
|
|
|
|
<section id='kernel-dev-overview'>
|
|
<title>Overview</title>
|
|
|
|
<para>
|
|
Regardless of how you intend to make use of the Yocto Project,
|
|
chances are you will work with the Linux kernel.
|
|
This manual describes how to set up your build host to support
|
|
kernel development, introduces the kernel development process,
|
|
provides background information on the Yocto Linux kernel
|
|
<ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>,
|
|
describes common tasks you can perform using the kernel tools,
|
|
and shows you how to use the kernel Metadata needed to work with
|
|
the kernel inside the Yocto Project.
|
|
</para>
|
|
|
|
<para>
|
|
Each Yocto Project release has a set of Yocto Linux kernel recipes,
|
|
whose Git repositories you can view in the Yocto
|
|
<ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink> under
|
|
the "Yocto Linux Kernel" heading.
|
|
New recipes for the release track the latest Linux kernel
|
|
upstream developments from
|
|
<ulink url='http://www.kernel.org'></ulink> and introduce
|
|
newly-supported platforms.
|
|
Previous recipes in the release are refreshed and supported for at
|
|
least one additional Yocto Project release.
|
|
As they align, these previous releases are updated to include the
|
|
latest from the
|
|
<ulink url='&YOCTO_HOME_URL;/organization/long-term-support-initiative-ltsi'>Long Term Support Initiative</ulink>
|
|
(LTSI) project.
|
|
Also included is a Yocto Linux kernel development recipe
|
|
(<filename>linux-yocto-dev.bb</filename>) should you want to work
|
|
with the very latest in upstream Yocto Linux kernel development and
|
|
kernel Metadata development.
|
|
<note>
|
|
For more on Yocto Linux kernels, see the
|
|
"<link linkend='kernel-big-picture'>Yocto Project Kernel Development and Maintenance</link>
|
|
section.
|
|
</note>
|
|
</para>
|
|
|
|
<para>
|
|
The Yocto Project also provides a powerful set of kernel
|
|
tools for managing Yocto Linux kernel sources and configuration data.
|
|
You can use these tools to make a single configuration change,
|
|
apply multiple patches, or work with your own kernel sources.
|
|
</para>
|
|
|
|
<para>
|
|
In particular, the kernel tools allow you to generate configuration
|
|
fragments that specify only what you must, and nothing more.
|
|
Configuration fragments only need to contain the highest level
|
|
visible <filename>CONFIG</filename> options as presented by the
|
|
Yocto Linux kernel <filename>menuconfig</filename> system.
|
|
Contrast this against a complete Yocto Linux kernel
|
|
<filename>.config</filename> file, which includes all the automatically
|
|
selected <filename>CONFIG</filename> options.
|
|
This efficiency reduces your maintenance effort and allows you
|
|
to further separate your configuration in ways that make sense for
|
|
your project.
|
|
A common split separates policy and hardware.
|
|
For example, all your kernels might support the
|
|
<filename>proc</filename> and <filename>sys</filename> filesystems,
|
|
but only specific boards require sound, USB, or specific drivers.
|
|
Specifying these configurations individually allows you to aggregate
|
|
them together as needed, but maintains them in only one place.
|
|
Similar logic applies to separating source changes.
|
|
</para>
|
|
|
|
<para>
|
|
If you do not maintain your own kernel sources and need to make
|
|
only minimal changes to the sources, the released recipes provide a
|
|
vetted base upon which to layer your changes.
|
|
Doing so allows you to benefit from the continual kernel
|
|
integration and testing performed during development of the
|
|
Yocto Project.
|
|
</para>
|
|
|
|
<para>
|
|
If, instead, you have a very specific Linux kernel source tree
|
|
and are unable to align with one of the official Yocto Linux kernel
|
|
recipes, an alternative exists by which you can use the Yocto
|
|
Project Linux kernel tools with your own kernel sources.
|
|
</para>
|
|
|
|
<para>
|
|
The remainder of this manual provides instructions for completing
|
|
specific Linux kernel development tasks.
|
|
These instructions assume you are comfortable working with
|
|
<ulink url='http://openembedded.org/wiki/Bitbake'>BitBake</ulink>
|
|
recipes and basic open-source development tools.
|
|
Understanding these concepts will facilitate the process of working
|
|
with the kernel recipes.
|
|
If you find you need some additional background, please be sure to
|
|
review and understand the following documentation:
|
|
<itemizedlist>
|
|
<listitem><para>
|
|
<ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename> workflow</ulink>
|
|
as described in the Yocto Project Software Development Kit
|
|
(SDK) Developer's Guide.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
The
|
|
"<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>" section
|
|
in the Yocto Project Development Manual
|
|
</para></listitem>
|
|
<listitem><para>
|
|
The
|
|
"<link linkend='kernel-modification-workflow'>Kernel Modification Workflow</link>"
|
|
section.
|
|
</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>
|
|
Finally, while this document focuses on the manual creation of
|
|
recipes, patches, and configuration files, the Yocto Project
|
|
Board Support Package (BSP) tools are available to automate
|
|
this process with existing content and work well to create the
|
|
initial framework and boilerplate code.
|
|
For details on these tools, see the
|
|
"<ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>Using the Yocto Project's BSP Tools</ulink>"
|
|
section in the Yocto Project Board Support Package (BSP) Developer's
|
|
Guide.
|
|
</para>
|
|
</section>
|
|
|
|
<section id='kernel-modification-workflow'>
|
|
<title>Kernel Modification Workflow</title>
|
|
|
|
<para>
|
|
Kernel modification involves changing the Yocto Project kernel,
|
|
which could involve changing configuration options as well as adding
|
|
new kernel recipes.
|
|
Configuration changes can be added in the form of configuration
|
|
fragments, while recipe modification comes through the kernel's
|
|
<filename>recipes-kernel</filename> area in a kernel layer you create.
|
|
</para>
|
|
|
|
<para>
|
|
This section presents a high-level overview of the Yocto Project
|
|
kernel modification workflow.
|
|
The illustration and accompanying list provide general information
|
|
and references for further information.
|
|
<imagedata fileref="figures/kernel-dev-flow.png"
|
|
width="9in" depth="5in" align="center" scalefit="1" />
|
|
</para>
|
|
|
|
<para>
|
|
<orderedlist>
|
|
<listitem><para>
|
|
<emphasis>Set Up Your Host Development System to Support
|
|
Development Using the Yocto Project:</emphasis>
|
|
See the
|
|
"<ulink url='&YOCTO_DOCS_QS_URL;#yp-resources'>Setting Up to Use the Yocto Project</ulink>"
|
|
section in the Yocto Project Quick Start for options on how
|
|
to get a build host ready to use the Yocto Project.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Set Up Your Host Development System for Kernel Development:</emphasis>
|
|
It is recommended that you use <filename>devtool</filename>
|
|
and an extensible SDK for kernel development.
|
|
Alternatively, you can use traditional kernel development
|
|
methods with the Yocto Project.
|
|
Either way, there are steps you need to take to get the
|
|
development environment ready.</para>
|
|
|
|
<para>Using <filename>devtool</filename> and the eSDK requires
|
|
that you have a clean build of the image and that you are
|
|
set up with the appropriate eSDK.
|
|
For more information, see the
|
|
"<link linkend='getting-ready-to-develop-using-devtool'>Getting Ready to Develop Using <filename>devtool</filename></link>"
|
|
section.</para>
|
|
|
|
<para>Using traditional kernel development requires that you
|
|
have the kernel source available in an isolated local Git
|
|
repository.
|
|
For more information, see the
|
|
"<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
|
|
section.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Make Changes to the Kernel Source Code if
|
|
applicable:</emphasis>
|
|
Modifying the kernel does not always mean directly
|
|
changing source files.
|
|
However, if you have to do this, you make the changes to the
|
|
files in the eSDK's Build Directory if you are using
|
|
<filename>devtool</filename>.
|
|
For more information, see the
|
|
"<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
|
|
section.</para>
|
|
|
|
<para>If you are using traditional kernel development, you
|
|
edit the source files in the kernel's local Git repository.
|
|
For more information, see the
|
|
"<link linkend='using-traditional-kernel-development-to-patch-the-kernel'>Using Traditional Kernel Development to Patch the Kernel</link>"
|
|
section.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Make Kernel Configuration Changes if
|
|
Applicable:</emphasis>
|
|
If your situation calls for changing the kernel's
|
|
configuration, you can use
|
|
<link linkend='generating-configuration-files'><filename>menuconfig</filename></link>,
|
|
which allows you to interactively develop and test the
|
|
configuration changes you are making to the kernel.
|
|
Saving changes you make with <filename>menuconfig</filename>
|
|
updates the kernel's <filename>.config</filename> file.
|
|
<note><title>Warning</title>
|
|
Try to resist the temptation to directly edit an
|
|
existing <filename>.config</filename> file, which is
|
|
found in the Build Directory among the source code
|
|
used for the build.
|
|
Doing so, can produce unexpected results when the
|
|
OpenEmbedded build system regenerates the configuration
|
|
file.
|
|
</note>
|
|
Once you are satisfied with the configuration
|
|
changes made using <filename>menuconfig</filename>
|
|
and you have saved them, you can directly compare the
|
|
resulting <filename>.config</filename> file against an
|
|
existing original and gather those changes into a
|
|
<ulink url='&YOCTO_DOCS_DEV_URL;#creating-config-fragments'>configuration fragment file</ulink>
|
|
to be referenced from within the kernel's
|
|
<filename>.bbappend</filename> file.</para>
|
|
|
|
<para>Additionally, if you are working in a BSP layer
|
|
and need to modify the BSP's kernel's configuration,
|
|
you can use the
|
|
<ulink url='&YOCTO_DOCS_BSP_URL;#managing-kernel-patches-and-config-items-with-yocto-kernel'><filename>yocto-kernel</filename></ulink>
|
|
script as well as <filename>menuconfig</filename>.
|
|
The <filename>yocto-kernel</filename> script lets
|
|
you interactively set up kernel configurations.
|
|
</para></listitem>
|
|
<listitem><para>
|
|
<emphasis>Rebuild the Kernel Image With Your Changes:</emphasis>
|
|
Rebuilding the kernel image applies your changes.
|
|
Depending on your target hardware, you can verify your changes
|
|
on actual hardware or perhaps QEMU.
|
|
</para></listitem>
|
|
</orderedlist>
|
|
</para>
|
|
</section>
|
|
|
|
</chapter>
|
|
<!--
|
|
vim: expandtab tw=80 ts=4
|
|
-->
|