What Is Yocto

2025-Sep-17

In the past few weeks, I've been learning about the Yocto Project. Initially, I had a difficult time grasping the fundamentals. I spend hours watching videos, reading documentation, and asking LLM's for help. Now, after some time, I have a solid understanding of the basics. I think it would be valuable for everyone to have a concise reference document, so here we are.

The Yocto Project, otherwise known as Yocto, provides open-source tools, templates, and methods for developers to create custom Linux-based operating systems/images for embedded and IoT devices.

When I say images, think of Yocto images as like a Docker image. They are self-contained bundles of a filesystem and application. The difference is that it's the entire OS, not just a single process. You could say a Yocto image is a pre-packaged OS ready to run on a computer.

What does Yocto contain?

To understand Yocto, you need to be familiar with four components: Poky, Layers, Recipes, and BitBake.

Poky

To understand Poky, you have to know the history of Yocto. In 2003, developers created the OpenEmbedded project as a common build system and codebase for various devices. OpenEmbedded was unstable, so a company, OpenedHand, forked it to create a stable version. They called tehir stable version Poky Linux. In 2008, Intel bought OpenedHand (for reasons unrelated to Poky). Then, in 2010, Intel and the Linux Foundation created the Yocto Project, basing it on Poky Linux. Today, Poky remains a key component of Yocto, serving as its default reference distribution.

Layers

Layers are a core concept of the Yocto Project. They enable developers to structure metadata, which is a collection of files and data that describes how to build a customized Linux-based OS. There are three types of layers:

  • BSP (Board Support Package) layers: Where you define the hardware you're building for. It contains all the machine-specific configurations, drivers, and patches needed to make the Linux kernel, bootloaders, and more work on a particular board.
  • Software layers: The most common type of layer. It contains recipes for specific applications and recipes for images. For example, a software layer might add a custom web server, a database, or a user application.
  • Distribution/distro layers: Defines high-level policies, features, and configurations for a custom Linux distribution. Poky, for example, is a distribution layer.
  • Recipes

    Recipes are the foundational files for creating an application within a layer. There are two types of recipes to dsitinguish: software recipes and image recipes.

  • Software recipes: Specifies where to get source code from and which patches to apply, as well as the build process.
  • Image recipes: Describe the contents of an entire image by defining which packages and features will be included in the final root filesystem. In practice, developers often use image recipes as the main entry point when building with Yocto.
  • BitBake

    BitBake was originally part of the OpenEmbedded project, inspired by the Portage package management system used by the Gentoo Linux distribution. In 2004, the OpenEmbedded project split into two distinct pieces:

  • BitBake, a generic task executer
  • OpenEmbbeded, a metadata set utilised by Bitbake.
  • I think of BitBake as a task scheduler, similar to make.

    What's next?

    Now that you understand the fundamentals of what the Yocto Project contains and does, I recommend you read my other blog on how to create a custom image for a specific board. After that, watch my video on how to make and run a custom image. I also recommend you take a look at the links below, as they are the ones I used for learning and, thus, for writing this blog post.

    Getting Started with Yocto Project - Chris Simmonds - NDC TechTown 2022 Fundamentals of Embedded Linux - Chris Simmonds - NDC TechTown 2022 The Challenges of Embedded Linux - Chris Simmonds - NDC TechTown 2023 Bootlin - Embedded Linux and Kernel engineering The Yocto Project Documentation