TipsAndTricks/KernelDevelopmentWithEsdk: Difference between revisions

From Yocto Project
Jump to navigationJump to search
Line 11: Line 11:
  source poky/oe-init-build-env kernel-dev
  source poky/oe-init-build-env kernel-dev


== Build Extensible SDK (bitbake terminal) ==
== Build Extensible SDK ==


  bitbake -c populate_sdk_ext core-image-minimal
  bitbake -c populate_sdk_ext core-image-minimal
Alternatively, if you are based on a poky derivative for a particular release, you can download the minimal esdk and install it. For example, the pyro core-image-minimal esdk release for x86-64 is located [[http://downloads.yoctoproject.org/releases/yocto/yocto-2.3/toolchain/x86_64/poky-glibc-x86_64-core-image-minimal-core2-64-toolchain-ext-2.3.sh here]].
Alternatively, if you are based on a poky derivative for a particular release, you can download the minimal esdk and install it. For example, the pyro core-image-minimal esdk release for x86-64 is located [[http://downloads.yoctoproject.org/releases/yocto/yocto-2.3/toolchain/x86_64/poky-glibc-x86_64-core-image-minimal-core2-64-toolchain-ext-2.3.sh here]].


== Install Extensible SDK (eSDK terminal) ==
== Install Extensible SDK ==


The ESDK installer can be found in /path_to_build_directory/kernel-dev/tmp/deploy/sdk/
The ESDK installer can be found in /path_to_build_directory/kernel-dev/tmp/deploy/sdk/
Line 24: Line 24:
Follow the installer instructions and provide a target directory for your ESDK installation e.g /path_to_esdk/
Follow the installer instructions and provide a target directory for your ESDK installation e.g /path_to_esdk/


== Checkout the kernel source tree and construct .config (eSDK terminal) ==
== Checkout the kernel source tree and construct .config ==


Check out the Linux kernel source and construct a .config from the Yocto kernel configuration segments. The sources can be found in /path_to_build_directory/kernel-dev/workspace/sources/linux-yocto.
Check out the Linux kernel source and construct a .config from the Yocto kernel configuration segments. The sources can be found in /path_to_build_directory/kernel-dev/workspace/sources/linux-yocto.

Revision as of 21:48, 26 June 2017

Overview

This manual describes the Linux kernel development process with Yocto and devtool.

Setup your bitbake build environment

Open a new terminal window and navigate to your poky directory. We'll refer to this terminal as your 'bitbake terminal'.

The following command will configure the Yocto build environment

source poky/oe-init-build-env kernel-dev

Build Extensible SDK

bitbake -c populate_sdk_ext core-image-minimal

Alternatively, if you are based on a poky derivative for a particular release, you can download the minimal esdk and install it. For example, the pyro core-image-minimal esdk release for x86-64 is located [here].

Install Extensible SDK

The ESDK installer can be found in /path_to_build_directory/kernel-dev/tmp/deploy/sdk/

./tmp/deploy/sdk/poky-glibc-x86_64-core-image-minimal-corei7-64-toolchain-ext-2.3.sh

Follow the installer instructions and provide a target directory for your ESDK installation e.g /path_to_esdk/

Checkout the kernel source tree and construct .config

Check out the Linux kernel source and construct a .config from the Yocto kernel configuration segments. The sources can be found in /path_to_build_directory/kernel-dev/workspace/sources/linux-yocto.

devtool modify linux-yocto

If you are just using a kernel from somewhere else, for example kernel.org, you can just clone it instead of using devtool modify in this step.

Setup your ESDK build environment (ESDK terminal)

Open a new terminal and setup your build environment. We'll refer to this terminal as your 'ESDK terminal'

. /path_to_esdk/environment-setup-corei7-64-poky-linux

NOTE: If you see the message below you will really need to open a new terminal :).

"SDK environment now set up; additionally you may now run devtool to perform development tasks. Run devtool --help for further details. WARNING: attempting to use the extensible SDK in an environment set up to run bitbake - this may lead to unexpected results. Please source this script in a new shell session instead."

Build your kernel (ESDK terminal)

Navigate to your workspace directory e.g /path_to_build_directory/kernel-dev/workspace/sources/linux-yocto and build the kernel

make

Modify your kernel and commit your changes (ESDK terminal)

You can navigate to the Linux source directory (/path_to_build_directory/kernel-dev/workspace/sources/linux-yocto) and modify the kernel. Commit your kernel changes.

Build an image with your kernel changes (optional) (bitbake terminal)

devtool build-image core-image-minimal

For faster iteration, in 2.4 some wic commands are being included to allow you to insert the kernel in an image without going through the full recreation of the image. For older releases you can do:

sudo kpartx -a <foo>.wic
sudo mount /dev/mapper/loopNpM /mnt/wic-partionM

In this case, it will be the next available loopback device. If you are not using any , it will be loop0. so in the std case it would look like

sudo mount /dev/mapper/loop0p1 /mnt/wic-partion1

Then you could dd the kernel into the kernel partion. Then unmount and unkaprtx...

sudo umount mnt/wic-partionM
sudo kaprtx -d /dev/loopN

Note that this requires root/sudo rights. The assumption here is most kernel devs would have this or could do it in a vm/container.

Export patches and create a bbappend file (bitbake terminal)

To export your commits to patches and a bbappend file use the following command.

devtool finish linux-yocto /path_to_poky_directory/meta-yocto-bsp/

The patches and the bbappend can be found in /path_to_poky_directory/meta-yocto-bsp/recipes-kernel/linux.

Build image with your modified kernel (bitbake terminal)

You can now build an image which will include your kernel patches.

Execute the following command from your build directory ( e.g /path_to_build_directory/kernel-dev/)

bitbake core-image-minimal