Refresher to Embedded Linux & Intro to the Yocto Project

Refresher to Embedded Linux & Intro to the Yocto Project

5-day class

The course content could be tailored to better suit your needs and objectives. If time permits consulting during the training can be included. Please click the public tab to see the public sessions.

Private online
Onsite at your premises
We'll never share your email with anyone else.
Pick Quarter Quarter Status Access Delivery Location Language Timezone Book Until
3rd quarter 2024 private remote virtual German/English (to be defined) UTC+2 (to be defined) Oct 01, 2024
4th quarter 2024 private remote virtual German/English (to be defined) UTC+2 (to be defined) Jan 01, 2025

Content as described below. Starting from three attendees from the same company please check our private sessions.

Public online
Public workshop in classroom
We'll never share your email with anyone else.
Pick Date Date Status Access Delivery Location Language Timezone Book Until
Sep 09, 2024 public classroom Munich German UTC+2 Aug 16, 2024
Oct 21, 2024 public remote virtual German/English (to be defined) UTC+2 Sep 27, 2024
Nov 18, 2024 public classroom Munich German UTC+2 Oct 25, 2024
Dec 16, 2024 public remote virtual German/English (to be defined) UTC+2 Nov 22, 2024

After a “Refresher to Embedded Linux (2 days)” you’ll see “How the Yocto Project® works (3 days)”

Course Objectives

  • You already know the basics of (Embedded) Linux and just want to refresh your knowledge.
  • After a short (2 days) “Introduction to Embedded Linux”, we will show you (3 days) how the “Yocto Project®” works.
  • After the “refresher” we will see how BSP / Framework maintainers can use the “Yocto Project®”. 
  • We’ll also see how developers can use the SDK who may not even need to know they are using it.


This five-day class demonstrates the concepts of “Embedded Linux” and the “Yocto Project®” using practical exercises in combination with theory. The course is designed to get you up to speed quickly.

Frequently asked questions like those are answered:

  • What is Linux?
  • Where to get u-boot/the kernel from? configuration / build / install
  • Why would you use upstream components?
  • How does interprocess communication work and which mechanisms to use/avoid?
  • Is it really necessary to use another version of the toolchain/libraries/packages for each Embedded Linux project and on top of that to follow a different workflow?
  • Can you ensure that the development environment is identical for all developers/suppliers and that you can still produce identical builds like today in 10+ years from now?
  • Can the Yocto Project® help you with Open Source license audits or do you prefer a copyright troll instead?
  • … and much more

Hands-on sessions are performed on the host, in a docker container, and on target hardware (e.g. i.mx6). After the workshop, you will be able to download a docker container based on Ubuntu with all dependencies pre-installed plus the examples to work with the course material on your own. Please note that for the first two days ”Refresher to Embedded Linux” it would be ideal if you already have some (Embedded) Linux experience. If not we’ll get you up to date in two days. This should enable you to follow the second part of the course dealing with the “Yocto Training”.

In case you search for an Embedded Linux beginner course, we’ll recommend “Embedded Linux – From Systems Architecture to Real-Time (5 days)” or “Introduction to Embedded Linux in Theory and Practice – a Crash Course (3 days)”.


  • Basic familiarity with using a Linux system (e.g. Ubuntu) as an end user in user space
  • Basic familiarity with a command-line shell
  • Basic knowledge of user/kernel space programming with Linux
  • Intermediate C programming knowledge
  • Ideally, you have basic experience with Embedded Linux (kernel, userspace, root file-system, tools) to follow this training.

Course Roadmap

Who should attend?

You think about using Linux for your embedded project or already use it for your projects. You have probably heard about the Yocto Project®, but did not dare to have a closer look into it, or had difficulties using it. Besides you want a refresher on Linux interprocess communication and real-time. You don’t know whether and how your daily workflow can be accommodated in the Yocto Project® and generally find the Yocto Project rather complicated. Why do we need all this since up to now everything was (supposedly) much easier? After the training, you should be able to decide whether you need the Yocto Project® or not. The workshop is aimed at software-, development-, system engineers, testers, administrators, engineers, and other parties interested in the Yocto Project®, with a basic knowledge of Embedded Linux who want to refresh their knowledge.

Course Outline

Day 1


  • Introduction | History

Eval Board

  • How does Linux boot on a PC and on the evaluation board? | Boot sequence | SD card partitions | See it booting

Stuff needed

  • git | u-boot
    •  scripting | fancy stuff | checkout | config | build | install
  • kernel
    • checkout | config-kconfig | build-kbuild | kernel modules | install
  • Flat device tree (fdt)
    • investigate | build | install

Kernel Modules

  • init / exit | Licensing | tainted module/kernel | EXPORT_SYMBOL | out of tree .ko makefile
  • module-init-tools
  • put the module in the kernel tree
  • parameter passing

Character Driver

  • Device Files | Device Types | Device Nodes major/minor | Kernel Driver Interface
  • Device Driver: Intro | Registration | Initialization | Open/Release
  • Miscellaneous Character Drivers
  • Simple tools
    • lsof | ltrace | strace | procfs | top | netstat | syslog |
  • Advanced tools
    • What’s a debugger?
    • gdb: gdb on the target system | gdb for remote debugging

Kernel Debugging (optional)

  • Debugging Intro | kgdb / gdb + agent-proxy | JTAG
Day 2

Process and Inter-Process Communication

  • Linux architecture | operating system | scheduler – priorities – scheduling classes | process, task, thread | errno | fork | process termination | process states | zombies | watch processes | simple IPC
    • shell redirection | shelling out | tmpfiles
  • advanced IPC
    • pipes | signals | interrupted system calls | message queues | semaphores | mutex | shared memory | sockets | select | poll
  • other IPC methods | IPC techniques which should be avoided


  • prerequisites
    • interrupts | re-entrant code
  • Real-Time Intro
    • What is Real-Time? | What is hard Real-Time?
  • Real-Time Linux
    • Hypervisor | Dual kernel | Fully Preemptive Kernel
  • Degrees of Real-Time behavior
    • explicit/implicit preemption points | real-time preemption patch | fully preemptive kernel | hard real-time extensions
  • Dual Kernel: Adeos/Xenomai
    • Adeos patch | Xenomai | patch/config/build kernel | test it on the target system
  • Real-Time Myths
Day 3

Yocto Introduction

  • What is Yocto? | What is the Yocto Project®? (features/challenges) | Some tools hosted/used by the Yocto Project® (Poky | BitBake | OpenEmbedded-Core | Metadata) | Why would you use the Yocto Project®?

How to become part of our Yocto Project® community? (optional)

  • First steps | How to get in touch | Participate | Contribute | Social Media | Events

Development Environment

  • What is needed for a Yocto Project® build? | Layer versions/dependencies | host dependencies | config files | host/kernel dependencies

The Yocto Project® Workflow

  • Intro
  • Workflow | OpenEmbedded architecture
  • Configuration (User) | Metadata (Recipes) | Machine (BSP) | Distribution (Policy)
  • Features | Recipe Versioning | Layers
  • Sources
  • Source fetching | Patching | Configure/Compile/Staging | SSTATE | Pseudo | recipetool | Examples of Recipes | PACKAGECONFIG | Packages and their contents | Output analysis/Packaging | How to generate Images | SDK Generation | Tasks
  • Customization of Images (Intro | local.conf | IMAGE_FEATURES | custom image recipes (.bb files) | custom packagegroups)
Day 4


  • History
  • Syntax (Variable Expansion | Variable Assignment | Prepend/Append | Remove | Variable Flags | Conditional Syntax – OVERRIDES)
  • BitBake Debugging (debug level | find recipes/images/packagegroups | BitBake environment/tasks/logging | force build/force building a specific task | cleansstate | How to invalidate the stamp | devshell | dependencies | packages | kill all BitBake instances | BitBake graphical wrapper)
  • Cleaning (gain disk space | rebuild)


  • Intro | bitbake-layers tool | dynamic layers

Board Support Package (BSP)

  • Intro | System Development Workflow | BSP Developer’s Guide (bsp-tool – ported to recent Poky versions) | BSP creation | non-mainline kernel patches


  • Intro | System Development Workflow | Kernel Development Manual (defconfig | defconfig + configuration fragment | in tree kmod | out of tree kmod | fdt classic | fdt with devicetree.bbclass | …)
Day 5

Software Development Kit

  • Intro | cross-development Toolchain | Sysroot | BBCLASSEXTEND | Multilib | The QEMU Emulator | SDK-Eclipse Yocto Plug-in (deprecated) | User Space Tools | Installing SDKs & toolchains
  • Cross-Toolchains/Software Development Kits
    • Building a Cross-Toolchain installer
    • Using the Standard Software Development Kit (Cross-Toolchain + Makefile/Autotools/Autotools lib + App | recipes)
    • Building/Using the Extensible Software Development Kit

Package Management

  • SW update vs. Package Management | Working with Packages | ipk | creating a package feed | installing a package with opkg on the target system


  • Intro | Add custom license | Add commercial license | Firmware License | Open Source License Compliance


  • Intro | Add recipe/Build/Deploy | Create/Add layer | Finish | Modify/Update-Recipe | Build/Run | Build: Image

Course Brochure (pdf)

What customers are saying