Yocto Build with RT Kernel Patch for BeagleBone: A Comprehensive Guide

Photo by Zan on Unsplash

Yocto Build with RT Kernel Patch for BeagleBone: A Comprehensive Guide

Introduction

Real-time (RT) systems are crucial in many industries, from automotive to robotics, and even aerospace. This blog will guide you on how to build Yocto with a Real-Time kernel patch for BeagleBone - a powerful open hardware computer.

Setting Up the Build Environment

Before we can dive into the details, we need to set up the build environment. This involves cloning Poky and setting up the environment as per the official Yocto Project documentation.

Now, to configure the build environment, we need to modify a few lines in the conf/local.conf file. I've used the following

# Change or verify these following lines
MACHINE ?= "beaglebone-yocto"

PACKAGE_CLASSES ?= "package_deb"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks tools-sdk package-management"

# Add the following
PREFERRED_VERSION_linux-yocto ?= "5.15%"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "kernel-modules"
CORE_IMAGE_EXTRA_INSTALL += "usbinit"

Patching the Kernel and Configuring It

To apply a real-time patch to the kernel and configure it, we have to work with a new layer in Yocto. This layer-creation process includes setting up several directories and adding configuration files, for example, create a new layer called meta-mylayer

mkdir meta-mylayer
mkdir meta-mylayer/conf
mkdir meta-mylayer/recipes-kernel
mkdir meta-mylayer/recipes-kernel/linux
mkdir meta-mylayer/recipes-kernel/linux/linux-yocto

Now, fill the configuration of the layer in meta-mylayer/conf/layer.conf as follows

# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
            ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "mylayer"
BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
BBFILE_PRIORITY_mylayer = "5"

add a file called linuxyocto_5.15.bbappend in meta-mylayer/recipes-kernel/linux and add the following

FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"

KBRANCH:genericx86  = "v5.15/standard/base"
KBRANCH:genericx86-64  = "v5.15/standard/base"
KBRANCH:edgerouter = "v5.15/standard/edgerouter"
KBRANCH:beaglebone-yocto = "v5.15/standard/beaglebone"

KMACHINE:genericx86 ?= "common-pc"
KMACHINE:genericx86-64 ?= "common-pc-64"
KMACHINE:beaglebone-yocto ?= "beaglebone"

SRCREV_machine:genericx86 ?= "efe20512212b0e85b5f884b1bfc8fbba2b43541a"
SRCREV_machine:genericx86-64 ?= "efe20512212b0e85b5f884b1bfc8fbba2b43541a"
SRCREV_machine:edgerouter ?= "90f1ee6589264545f548d731c2480b08a007230f"
SRCREV_machine:beaglebone-yocto ?= "9aabbaa89fcb21af7028e814c1f5b61171314d5a"

COMPATIBLE_MACHINE:genericx86 = "genericx86"
COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
COMPATIBLE_MACHINE:edgerouter = "edgerouter"
COMPATIBLE_MACHINE:beaglebone-yocto = "beaglebone-yocto"

LINUX_VERSION:genericx86 = "5.15.59"
LINUX_VERSION:genericx86-64 = "5.15.59"
LINUX_VERSION:edgerouter = "5.15.54"
LINUX_VERSION:beaglebone-yocto = "5.15.54"

SRC_URI += "file://usbeth.cfg"
SRC_URI += "file://patch-5.15.55-rt48.patch"

Now, we need to get the patch and add the configuration file usbeth.cfg in meta-mylayer/recipes-kernel/linux/linux-yocto

Please get the patch from here (you can get a newer version, but ensure it is compatible with your kernel) and unzip it in the above directory and add the following for the usbeth.cfg in the same directory as well to configure USB, USB ethernet

CONFIG_USB_ETH=y
CONFIG_USB_G_NCM=m
CONFIG_USB_MASS_STORAGE=y

Now, go back to the poky build directory and add this new layer to the belayers by running the following

cd ~/poky/build
bitbake-layers add-layer ../../meta-mylayer

Building the Image and Transferring It to an SD Card

With everything set up and configured, the next step is building the image using bitbake core-image-minimal. Please note that this process can be quite time-consuming, so be patient.

Once completed, the image files are stored in the <build directory>/tmp/deploy/images/beaglebone-yocto/ directory. Then you need to transfer this image onto your SD card using the dd command.

Conclusion

Building Yocto with a Real-Time kernel patch for BeagleBone might seem like a complex task, but with this comprehensive guide, you can handle it with ease. Remember to login into Yocto via serial as root.