Yocto Build with RT Kernel Patch for BeagleBone: A Comprehensive Guide
Tags: beaglebone, yocto, kernel, realtime
Published: 2023-07-19 00:25:30

---
title: Yocto Build with RT Kernel Patch for BeagleBone: A Comprehensive Guide
published: true
date: 2023-07-13 15:20:03 UTC
tags: beaglebone, Yocto, kernel, realtime
canonical_url: https://itspavan.dev/yocto-build-rt-kernel-patch-beaglebone-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**](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html).

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](https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/older/patch-5.15.55-rt48.patch.gz) (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`.