2.1.2. Getting Ready for Traditional Kernel Development

Getting ready for traditional kernel development using the Yocto Project involves many of the same steps as described in the previous section. However, you need to establish a local copy of the kernel source since you will be editing these files.

Follow these steps to prepare to update the kernel image using traditional kernel development flow with the Yocto Project. Completing this procedure leaves you ready to make modifications to the kernel source as described in the "Using Traditional Kernel Development to Patch the Kernel" section:

  1. Initialize the BitBake Environment: Before you can do anything using BitBake, you need to initialize the BitBake build environment by sourcing the build environment script (i.e. oe-init-build-env). Also, for this example, be sure that the local branch you have checked out for poky is the Yocto Project Thud branch. If you need to checkout out the Thud branch, see the "Checking out by Branch in Poky" section in the Yocto Project Development Tasks Manual.

         $ cd ~/poky
         $ git branch
         master
         * Thud
         $ source oe-init-build-env
                            

    Note

    The previous commands assume the Source Repositories (i.e. poky) have been cloned using Git and the local repository is named "poky".

  2. Prepare Your local.conf File: By default, the MACHINE 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 MACHINE variable appropriately in your conf/local.conf file found in the Build Directory (i.e. ~/poky/build in this example).

    Also, since you are preparing to work on the kernel image, you need to set the MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS variable to include kernel modules.

    This example uses the default "qemux86" for the MACHINE variable but needs to add the "kernel-modules":

         MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
                            

  3. Create a Layer for Patches: You need to create a layer to hold patches created for the kernel image. You can use the bitbake-layers create-layer command as follows:

         $ cd ~/poky/build
         $ bitbake-layers create-layer ../../meta-mylayer
         NOTE: Starting bitbake server...
         Add your new layer with 'bitbake-layers add-layer ../../meta-mylayer'
                            

    Note

    For background information on working with common and BSP layers, see the "Understanding and Creating Layers" section in the Yocto Project Development Tasks Manual and the "BSP Layers" section in the Yocto Project Board Support (BSP) Developer's Guide, respectively. For information on how to use the bitbake-layers create-layer command to quickly set up a layer, see the "Creating a General Layer Using the bitbake-layers Script" section in the Yocto Project Development Tasks Manual.

  4. Inform the BitBake Build Environment About Your Layer: As directed when you created your layer, you need to add the layer to the BBLAYERS variable in the bblayers.conf file as follows:

         $ cd ~/poky/build
         $ bitbake-layers add-layer ../../meta-mylayer
         NOTE: Starting bitbake server ...
         $
                            

  5. Create a Local Copy of the Kernel Git Repository: You can find Git repositories of supported Yocto Project kernels organized under "Yocto Linux Kernel" in the Yocto Project Source Repositories at http://git.yoctoproject.org.

    For simplicity, it is recommended that you create your copy of the kernel Git repository outside of the Source Directory, which is usually named poky. Also, be sure you are in the standard/base branch.

    The following commands show how to create a local copy of the linux-yocto-4.12 kernel and be in the standard/base branch.

    Note

    The linux-yocto-4.12 kernel can be used with the Yocto Project 2.4 release and forward. You cannot use the linux-yocto-4.12 kernel with releases prior to Yocto Project 2.4:

         $ cd ~
         $ git clone git://git.yoctoproject.org/linux-yocto-4.12 --branch standard/base
         Cloning into 'linux-yocto-4.12'...
         remote: Counting objects: 6097195, done.
         remote: Compressing objects: 100% (901026/901026), done.
         remote: Total 6097195 (delta 5152604), reused 6096847 (delta 5152256)
         Receiving objects: 100% (6097195/6097195), 1.24 GiB | 7.81 MiB/s, done.
         Resolving deltas: 100% (5152604/5152604), done.
         Checking connectivity... done.
         Checking out files: 100% (59846/59846), done.
                            

  6. Create a Local Copy of the Kernel Cache Git Repository: For simplicity, it is recommended that you create your copy of the kernel cache Git repository outside of the Source Directory, which is usually named poky. Also, for this example, be sure you are in the yocto-4.12 branch.

    The following commands show how to create a local copy of the yocto-kernel-cache and be in the yocto-4.12 branch:

         $ cd ~
         $ git clone git://git.yoctoproject.org/yocto-kernel-cache --branch yocto-4.12
         Cloning into 'yocto-kernel-cache'...
         remote: Counting objects: 22639, done.
         remote: Compressing objects: 100% (9761/9761), done.
         remote: Total 22639 (delta 12400), reused 22586 (delta 12347)
         Receiving objects: 100% (22639/22639), 22.34 MiB | 6.27 MiB/s, done.
         Resolving deltas: 100% (12400/12400), done.
         Checking connectivity... done.
                            

At this point, you are ready to start making modifications to the kernel using traditional kernel development steps. For a continued example, see the "Using Traditional Kernel Development to Patch the Kernel" section.