Mastering Yocto Project

If you are working with embedded Linux you will be aware that the Yocto Project is a key component for generating device firmware. This intensive four day training course will teach you how to make effective use of Yocto Project to create highly functional, reliable system images for your target device. It will show you how to select packages, how to customise system behaviour, and how to create your own meta layers. With the relevant information under your belt you will have your embedded Linux system up and running in no time!

The theory is backed up with hands-on labs where you will get a chance to try out all the concepts covered in the presentations. At the moment it is only available on-line, using a virtual classroom. You will build a fully-functional system using the QEMU emulator as the target

Download course details as a PDF
Click here for information about booking a course


4 days

Upcoming courses

None scheduled: contact us to request a quote


This course is ideal for anyone who needs to know about the Yocto Project and how to apply it to their work, and for anybody who is evaluating it for a future project


Either a good background in embedded devices,
or a reasonable proficiency in Linux command-line tools. Delegates with neither will find the learning curve rather steep

Course materials

All students will receive:

  • Electronic copies of the presentations and lab notes
  • Worked solutions to the lab sessions

Course outline

The Yocto Project

  • Introduction to OpenEmbedded and the Yocto Project
  • Installing Yocto Project
  • Building images for a target board

Packages and package managers

  • The relationship between a recipe and the packages it generates
  • Types of package: development, debug, release
  • Simple customisations: adding packages and selecting image featurest

Meta layers

  • Extending Yocto Project through layers
  • Adding third party layers
  • Creating your own meta layer
  • Dependencies and layer priorities

Bitbake and recipes

  • Bitbake variables and assignment
  • Controlling bitbake
  • Debugging: what to do when things go wrong

Bitbake tasks in detail

  • What happens when you run Bitbake?
  • How are tasks defined?
  • How are tasks run?

Writing your own recipes

  • Creating a package (application) recipe
  • Declaring dependencies with other packages
  • Building packages created with Autotools and CMake

Extending recipes with bbappend

  • Overriding a recipe vs appending with bbappend
  • Creating and adding a patch to a recipe
  • Extending tasks with prepend and append

Init daemons

  • Selecting the init daemon for your target: SystemV or systemd
  • Adding a System V init script to your recipe
  • Adding a systemd service unit to your recipe

Kernel recipes

  • Selecting a kernel
  • Custom kernel configuration
  • Customising the device tree

Image recipes

  • Images based on core-image
  • Image features
  • Creating images using package groups


  • The Poky distro
  • Distro features
  • Creating your own distro

Board Support Packages

  • Creating a BSP meta layer
  • Setting the machine configuration
  • Customising the kernel recipe

Creating an SDK

  • Creating an SDK for application developers
  • What goes into the SDK?
  • The extended SDK (eSDK)
  • Installing and using an SDK

Improving work-flow with devtool

  • Modifying local copies of a recipe
  • Testing on the target
  • Integrating with the main repository