Yocto Project
The Yocto Project is an open-source collaboration hosted by the Linux Foundation that provides tools, metadata, and a reference build system for creating custom Linux distributions for embedded targets. It is not itself a Linux distribution — it is a framework for building one from source, giving engineers full control over every package, kernel version, and configuration option in the final image.
Architecture
Yocto's build system is called BitBake with metadata organized in layers:
- BitBake — task execution engine; parses recipe metadata, resolves dependencies, and runs tasks (fetch, unpack, patch, configure, compile, install, package) in a reproducible order
- OpenEmbedded-Core (OE-Core) — the base layer (
meta/) providing core recipes for the toolchain, libc, busybox, systemd, and thousands of packages - Layers (
meta-*) — collections of recipes, configuration files, and patches; stacked inbblayers.conf; override lower layers for BSP customization - Recipes (
.bb) — per-package build instructions: source URI, patches,do_configure,do_compile,do_installtasks, and packaging split .bbappend— layer override files; add patches or change variables in a recipe without forking it- Distro config —
DISTROvariable selects a distribution policy file (init system, C library, feature set) - Image recipes — define the final rootfs contents;
IMAGE_INSTALLcontrols which packages are included - SDK / eSDK — cross-compile toolchain and sysroot generated by
bitbake -c populate_sdk; installed by the developer and used independently of the build host
Key directories in a Yocto workspace:
| Path | Purpose |
|---|---|
conf/bblayers.conf |
Ordered list of active layers |
conf/local.conf |
Machine, distro, parallelism, and local overrides |
meta/ |
OE-Core base layer |
meta-poky/ |
Poky reference distro layer |
meta-yocto-bsp/ |
Reference BSP layer |
tmp/deploy/images/ |
Built kernel, DTB, rootfs images |
tmp/deploy/sdk/ |
Generated SDK installers |
Embedded and Real-Time Use
- BSP layers — silicon vendors (NXP, TI, Qualcomm, Renesas) provide
meta-<vendor>layers with machine configs, U-Boot recipes, and kernel patches; drop the layer in, setMACHINE, and the build knows the target - Kernel customization —
linux-yoctorecipe acceptsSRC_URI += "file://my.cfg"config fragments andfile://my.patchpatches without forking the recipe - PREEMPT-RT — enabled via a kernel config fragment (
CONFIG_PREEMPT_RT=y) added through a.bbappendon the kernel recipe - dm-verity / secure boot — image signing, read-only rootfs, and dm-verity block integrity are configured through distro and image variables;
meta-securitylayer provides recipes for TPM, IMA, and AppArmor - OTA updates —
meta-swupdateandmeta-menderlayers add A/B partition update support; integrate with the image build to produce update artifacts alongside the base image - Minimal images —
core-image-minimalproduces a ~5 MB rootfs;IMAGE_FEATURESandDISTRO_FEATUREStrim init system, locale data, and debug symbols for production - Reproducible builds — Yocto's shared state cache (
sstate-cache) and hash equivalence server enable bit-reproducible images; combined with a pinned layer manifest (kasorrepo) for exact reproduction
Versioning and Long-Term Support
Yocto uses named releases aligned with an 18-month cadence. Even-numbered releases are LTS (2 years of maintenance).
| Release | Codename | Status | Notes |
|---|---|---|---|
| 5.0 | Scarthgap | LTS | EOL Apr 2028; current recommended LTS |
| 4.0 | Kirkstone | LTS | EOL Apr 2026 |
| 3.1 | Dunfell | LTS | EOL Apr 2024 (EOL) |
| 5.1 | Styhead | Stable | Non-LTS |
Upstream Contribution
Yocto contributions go to the relevant layer. OE-Core and Poky use mailing-list patch workflow (git send-email to openembedded-core@lists.openembedded.org). BSP and application layers typically use GitHub pull requests. Key tools: devtool (recipe development workflow), recipetool (recipe generation), oe-selftest (CI test suite), kas (layer and branch pinning).
Related Technologies
- Linux Kernel — Yocto's
linux-yoctorecipe or vendor BSP recipe builds and packages the kernel; config fragments and patches are the primary customization mechanism - Buildroot — simpler alternative to Yocto; better for small, static images; lacks Yocto's package management, shared state, and SDK generation
- MachineLinux — 32bitmicro's custom Linux distribution built on Yocto
- U-Boot — most common bootloader target; Yocto's
u-bootrecipe handles cross-compilation and machine-specific config - Zephyr RTOS — not Yocto-built; occupies the MCU tier below Yocto's embedded Linux scope