recipes, an alternative exists by which you can use the Yocto
Project Linux kernel tools with your own kernel sources.
</para>
-</section>
-
-<section id='preparing-the-build-host-to-work-on-the-kernel'>
- <title>Preparing the Build Host to Work on the Kernel</title>
<para>
- Before you can do any kernel development, you need to be
- sure your build host is set up to use the Yocto Project.
- For information on how to get set up, see the
- "<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Setting Up to Use the Yocto Project</ulink>"
- section in the Yocto Project Development Manual.
- Part of preparing the system is creating a local Git
- repository of the
- <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
- (<filename>poky</filename>) on your system.
- Follow the steps in the
- "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
- section in the Yocto Project Development Manual to set up your
- Source Directory.
- <note>
- Be sure you check out the appropriate development branch or
- by tag to get the version of Yocto Project you want.
- See the
- "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
- and
- "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
- sections in the Yocto Project Development Manual for more
- information.
- </note>
+ 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>
- Kernel development is best accomplished using
- <ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename></ulink>
- and not through traditional kernel workflow methods.
- The remainder of this section provides information for both scenarios.
+ 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 id='getting-ready-to-develop-using-devtool'>
- <title>Getting Ready to Develop using <filename>devtool</filename></title>
-
- <para>
- Follow these steps to prepare to update the kernel image using
- <filename>devtool</filename>.
- Completing this procedure leaves you with a clean kernel image
- and ready to make modifications as described in the
- "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
- section:
- <orderedlist>
- <listitem><para>
- <emphasis>Initialize the BitBake Environment:</emphasis>
- Before building an extensible SDK, you need to
- initialize the BitBake build environment by sourcing a
- build environment script
- (i.e. <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>oe-init-build-env</filename></ulink>
- or
- <ulink url='&YOCTO_DOCS_REF_URL;#structure-memres-core-script'><filename>oe-init-build-env-memres</filename></ulink>):
- <literallayout class='monospaced'>
- $ cd ~/poky
- $ source oe-init-build-env
- </literallayout>
- <note>
- The previous commands assume the
- <ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
- (i.e. <filename>poky</filename>) have been cloned
- using Git and the local repository is named
- "poky".
- </note>
- </para></listitem>
- <listitem><para>
- <emphasis>Prepare Your <filename>local.conf</filename> File:</emphasis>
- By default, the
- <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
- variable is set to "qemux86", which is fine if you are
- building for the QEMU emulator in 32-bit mode.
- However, if you are not, you need to set the
- <filename>MACHINE</filename> variable appropriately in
- your <filename>conf/local.conf</filename> file found in the
- <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
- (i.e. <filename>~/poky/build</filename> in this example).
- </para>
-
- <para>Also, since you are preparing to work on the kernel
- image, you need to set the
- <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS'><filename>MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS</filename></ulink>
- variable to include kernel modules.</para>
-
- <para>This example uses the default "qemux86" for the
- <filename>MACHINE</filename> variable but needs to
- add the "kernel-modules":
- <literallayout class='monospaced'>
- MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
- </literallayout>
- </para></listitem>
- <listitem><para>
- <emphasis>Create a Layer for Patches:</emphasis>
- You need to create a layer to hold patches created
- for the kernel image.
- You can use the <filename>yocto-layer</filename> command
- as follows:
- <literallayout class='monospaced'>
- $ cd ~/poky
- $ yocto-layer create my-kernel -o ../meta-my-kernel
- Please enter the layer priority you'd like to use for the layer: [default: 6]
- Would you like to have an example recipe created? (y/n) [default: n]
- Would you like to have an example bbappend file created? (y/n) [default: n]
-
- New layer created in ../meta-my-kernel.
-
- Don't forget to add it to your BBLAYERS (for details see ../meta-my-kernel/README).
- </literallayout>
- </para></listitem>
- <listitem><para>
- <emphasis>Inform the BitBake Build Environment About Your Layer:</emphasis>
- As directed when you created your layer, you need to add
- the layer to the
- <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
- variable in the <filename>bblayers.conf</filename> file
- as follows:
- <literallayout class='monospaced'>
- $ cd ~/poky/build
- $ bitbake-layers add-layer ../../meta-my-kernel
- </literallayout>
- </para></listitem>
- <listitem><para>
- <emphasis>Build the Extensible SDK:</emphasis>
- Use BitBake to build the extensible SDK specifically for
- the Minnowboard:
- <literallayout class='monospaced'>
- $ cd ~/poky/build
- $ bitbake core-image-minimal -c populate_sdk_ext
- </literallayout>
- Once the build finishes, you can find the SDK installer
- file (i.e. <filename>*.sh</filename> file) in the
- following directory:
- <literallayout class='monospaced'>
- ~/poky/build/tmp/deploy/sdk
- </literallayout>
- For this example, the installer file is named
- <filename>poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh</filename>
- </para></listitem>
- <listitem><para>
- <emphasis>Install the Extensible SDK:</emphasis>
- Use the following command to install the SDK.
- For this example, install the SDK in the default
- <filename>~/poky_sdk</filename> directory:
- <literallayout class='monospaced'>
- $ cd ~/poky/build/tmp/deploy/sdk
- $ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-&DISTRO;.sh
- Poky (Yocto Project Reference Distro) Extensible SDK installer version &DISTRO;
- ============================================================================
- Enter target directory for SDK (default: ~/poky_sdk):
- You are about to install the SDK to "/home/scottrif/poky_sdk". Proceed[Y/n]? Y
- Extracting SDK......................................done
- Setting it up...
- Extracting buildtools...
- Preparing build system...
- Parsing recipes: 100% |#################################################################| Time: 0:00:52
- Initializing tasks: 100% |############## ###############################################| Time: 0:00:04
- Checking sstate mirror object availability: 100% |######################################| Time: 0:00:00
- Parsing recipes: 100% |#################################################################| Time: 0:00:33
- Initializing tasks: 100% |##############################################################| Time: 0:00:00
- done
- SDK has been successfully set up and is ready to be used.
- Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
- $ . /home/scottrif/poky_sdk/environment-setup-i586-poky-linux
- </literallayout>
- </para></listitem>
- <listitem><para id='setting-up-the-esdk-terminal'>
- <emphasis>Set Up a New Terminal to Work With the Extensible SDK:</emphasis>
- You must set up a new terminal to work with the SDK.
- You cannot use the same BitBake shell used to build the
- installer.</para>
-
- <para>After opening a new shell, run the SDK environment
- setup script as directed by the output from installing
- the SDK:
- <literallayout class='monospaced'>
- $ source ~/poky_sdk/environment-setup-i586-poky-linux
- "SDK environment now set up; additionally you may now run devtool to perform development tasks.
- Run devtool --help for further details.
- </literallayout>
- <note>
- If you get a warning about attempting to use the
- extensible SDK in an environment set up to run
- BitBake, you did not use a new shell.
- </note>
- </para></listitem>
- <listitem><para>
- <emphasis>Build the Clean Image:</emphasis>
- The final step in preparing to work on the kernel is to
- build an initial image using <filename>devtool</filename>
- in the new terminal you just set up and initialized for
- SDK work:
- <literallayout class='monospaced'>
- $ devtool build-image
- Parsing recipes: 100% |##########################################| Time: 0:00:05
- Parsing of 830 .bb files complete (0 cached, 830 parsed). 1299 targets, 47 skipped, 0 masked, 0 errors.
- WARNING: No packages to add, building image core-image-minimal unmodified
- Loading cache: 100% |############################################| Time: 0:00:00
- Loaded 1299 entries from dependency cache.
- NOTE: Resolving any missing task queue dependencies
- Initializing tasks: 100% |#######################################| Time: 0:00:07
- Checking sstate mirror object availability: 100% |###############| Time: 0:00:00
- NOTE: Executing SetScene Tasks
- NOTE: Executing RunQueue Tasks
- NOTE: Tasks Summary: Attempted 2866 tasks of which 2604 didn't need to be rerun and all succeeded.
- NOTE: Successfully built core-image-minimal. You can find output files in /home/scottrif/poky_sdk/tmp/deploy/images/qemux86
- </literallayout>
- If you were building for actual hardware and not for
- emulation, you could flash the image to a USB stick
- on <filename>/dev/sdd</filename> and boot your device.
- For an example that uses a Minnowboard, see the
- <ulink url='https://wiki.yoctoproject.org/wiki/TipsAndTricks/KernelDevelopmentWithEsdk'>TipsAndTricks/KernelDevelopmentWithEsdk</ulink>
- Wiki page.
- </para></listitem>
- </orderedlist>
- </para>
-
- <para>
- At this point you have set up to start making modifications to the
- kernel by using the extensible SDK.
- For a continued example, see the
- "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
- section.
- </para>
- </section>
-
- <section id='getting-ready-for-traditional-kernel-development'>
- <title>Getting Ready for Traditional Kernel Development</title>
-
- <para>
- For traditional kernel development using the Yocto
- Project, you need to establish a local copy of the
- kernel source.
- You can find Git repositories of supported Yocto Project
- kernels organized under "Yocto Linux Kernel" in the Yocto
- Project Source Repositories at
- <ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
- </para>
-
- <para>
- For simplicity, it is recommended that you create your copy
- of the kernel Git repository outside of the
- <ulink url='&YOCTO_DOCS_REF_URL;source-directory'>Source Directory</ulink>,
- which is usually named <filename>poky</filename>.
- </para>
-
- <para>
- The following command shows how to create a local copy of the
- <filename>linux-yocto-4.9</filename> kernel:
- <literallayout class='monospaced'>
- $ git clone git://git.yoctoproject.org/linux-yocto-4.9 linux-yocto-4.9.git
- Cloning into 'linux-yocto-4.9.git'...
- remote: Counting objects: 5094108, done.
- remote: Compressing objects: 100% (765113/765113), done.
- remote: Total 5094108 (delta 4294009), reused 5088388 (delta 4288312)
- Receiving objects: 100% (5094108/5094108), 1.02 GiB | 7.82 MiB/s, done.
- Resolving deltas: 100% (4294009/4294009), done.
- Checking connectivity... done.
- Checking out files: 100% (56233/56233), done.
- </literallayout>
- </para>
- </section>
</section>
<section id='kernel-modification-workflow'>
<para>
This section presents a high-level overview of the Yocto Project
kernel modification workflow.
- You can find additional information here:
- <itemizedlist>
- <listitem><para>
- The
- "<link linkend='using-devtool-to-patch-the-kernel'>Using <filename>devtool</filename> to Patch the Kernel</link>"
- section.
- </para></listitem>
- <listitem><para>
- The
- "<ulink url='&YOCTO_DOCS_DEV_URL;#configuring-the-kernel'>Configuring the Kernel</ulink>"
- section in the Yocto Project Development Manual.
- </para></listitem>
- </itemizedlist>
- This illustration and the following list summarizes the kernel
- modification general 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>:
+ <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>Establish the Temporary Kernel Source Files</emphasis>:
- Temporary kernel source files are kept in the
- <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
- created by the OpenEmbedded build system when you run BitBake.
- If you have never built the kernel in which you are
- interested, you need to run an initial build to
- establish local kernel source files.</para>
-
- <para>If you are building an image for the first time, you
- need to get the build environment ready by sourcing an
- environment setup script
- (i.e. <filename>oe-init-build-env</filename> or
- <filename>oe-init-build-env-memres</filename>).
- You also need to be sure two key configuration files
- (<filename>local.conf</filename> and
- <filename>bblayers.conf</filename>) are configured
- appropriately.</para>
-
- <para>The entire process for building an image is overviewed
- in the
- "<ulink url='&YOCTO_DOCS_QS_URL;#qs-building-images'>Building Images</ulink>"
- section of the Yocto Project Quick Start.
- You might want to reference this information.
- You can find more information on BitBake in the
- <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
- </para>
-
- <para>The build process supports several types of images to
- satisfy different needs.
- See the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
- chapter in the Yocto Project Reference Manual for information
- on supported images.
+ <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>:
+ 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 Build Directory.
+ 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>:
+ Applicable:</emphasis>
If your situation calls for changing the kernel's
configuration, you can use
<link linkend='generating-configuration-files'><filename>menuconfig</filename></link>,
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 (e.g. see the workflow illustration
- in the
- "<link linkend='kernel-modification-workflow'>Kernel Modification Workflow</link>"
- section).
+ used for the build.
Doing so, can produce unexpected results when the
OpenEmbedded build system regenerates the configuration
file.
you interactively set up kernel configurations.
</para></listitem>
<listitem><para>
- <emphasis>Rebuild the Kernel Image With Your Changes</emphasis>:
+ <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>
-<section id='kernel-dev-other-resources'>
- <title>Other Resources</title>
-
- <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>
-
</chapter>
<!--
vim: expandtab tw=80 ts=4