Embedded Linux Development (LFD450)

This course will give you the step-by-step framework for developing an embedded Linux product. You’ll learn the methods used to adapt the Linux kernel and user-space libraries and utilities to particular embedded environments, such as those in use in consumer electronics, military, medical, industrial, and auto industries.

Course Overview

This course will teach you the tools and techniques necessary for developing embedded Linux devices.

Show More

In this course you’ll learn:

  • The Linux kernel architecture, emphasizing the essential points relevant to adapting the kernel to a custom embedded platform.
  • The techniques for right-sizing the system to meet project constraints
  • The multitude of resources available for constructing a cross development environment for embedded projects.
  • The options available for populating libraries and application user-spaces to meet the goals and constraints of embedded systems.
  • And more.

The information in this course will work with any major Linux distribution.


8/31/2020 - 9/3/2020
9:00am - 5:00pm US/Eastern
$3250 Add to cart Get A Quote >
If none of these fits your schedule, check out our Partner offerings >

Course Outline

  1. Introduction
    • Objectives
    • Who You Are
    • The Linux Foundation
    • Linux Foundation Training
    • Certification Programs and Digital Badging
    • Linux Distributions
    • Platforms
    • Preparing Your System
    • Things change in Linux
    • Documentation and Links
    • Course Registration
  2. Preliminaries
    • Linux Distributions
    • Virtual Machine Installation
    • Procedures
  3. How to Work in OSS Projects **
    • Overview on How to Contribute Properly
    • Stay Close to Mainline for Security and Quality
    • Study and Understand the Project DNA
    • Figure Out What Itch You Want to Scratch
    • Identify Maintainers and Their Work Flows and Methods
    • Get Early Input and Work in the Open
    • Contribute Incremental Bits, Not Large Code Dumps
    • Leave Your Ego at the Door: Don’t Be Thin-Skinned
    • Be Patient, Develop Long Term Relationships, Be Helpful
  4. Embedded and Real-Time Systems Concepts
    • Basic Concepts
    • Protection Motivations
    • Off the Shelf (OTS)
    • Embedded Caveats
    • Real Time Operating Systems
    • Real Time Linux
    • Custom Hardware Assistance
    • Resources
  5. Cross-Development Environments: Goals and Needs
    • Introduction
    • Why is it Hard?
    • Project Goal Considerations
    • Links to Additional Discussions
    • Labs
  6. Kbuild System
    • Introduction
    • Kbuild Makefiles
    • Kconfig Basics
    • Searching Kconfig
  7. Cross-Development Toolchain
    • The Compiler Triplet
    • Built-in Linux Distribution Cross Compiler
    • Linaro
    • CodeSourcery
    • crosstool-ng
    • Buildroot
    • OpenEmbedded
    • Yocto Project
    • Clang
    • Labs
  8. Basic Target Development Board Setup
    • Objectives of the Lab
    • Labs
  9. Booting the Target Development Board from uSD
    • Objectives of the Lab
    • Labs
  10. Booting a Target Development Board over Ethernet
    • An easier way to develop
    • Objectives of the Lab
    • Labs
  11. Boot loaders and U-Boot
    • Boot Code Stages
    • Some GPL Boot Loaders
    • Das U-Boot
    • U-Boot Command Line
    • U-Boot Environment
    • Labs
  12. Kernel Configuration, Compilation, Booting
    • Configuring the Kernel for the Development Board
    • Labs
  13. Device Drivers**
    • Types of Devices
    • Device Nodes
    • Character Drivers
    • An Example
    • Labs
  14. Device Trees
    • What are Device Trees?
    • What Device Trees Do and What They Do Not Do
    • Device Tree Syntax
    • Device Tree Walk Through
    • Device Tree Bindings
    • Device Tree support in Boot Loaders
    • Using Device Tree Data in Drivers
    • Coexistence and Conversion of Old Drivers
    • Labs
  15. Target Filesystem Packaging
    • Embedded Filesystem Goals
    • Directories: a Survey
    • Embedded Filesystem Types
  16. Build Target Root Filesystem
    • Objectives of the Lab
    • Labs
  17. Root Filesystem Choices
    • SysV init vs. BusyBox init
    • udev vs. BusyBox mdev
    • Systemd
    • C Library Choices
  18. Configuring uClibc
    • Configuring uClibc for NFS
    • Labs
  19. Another Alternate C-library: musl **
    • What is musl?
    • Configuring BuildRoot for musl
    • Labs
  20. Build BusyBox Utility Suite
    • Basic Workings
    • Integrated with Buildroot
    • Labs
  21. Kernel Monitoring and Debugging
    • Tracing and Profiling
    • Ftrace, Trace-Cmd, Kernelshark
    • Perf
    • Using perf
    • sysctl
    • SysRq Key and oops Messages
    • Kernel Debuggers
    • Labs
  22. Right-Sizing
    • Oft-Needed Embedded Components
    • Taking Inventory of Kernel Sizes
  23. Memory Technology Devices (Flash Memory Filesystems)
    • What are MTD Devices?
    • NAND vs. NOR vs. eMMC
    • Driver and User Modules
    • Flash Filesystems
    • Labs
  24. Compressed Filesystems
    • SquashFS
    • Deploying in an MTD Partition
    • Labs
  25. System Upgrades
    • When do we need to update?
    • Update strategies
    • Prebuilt upgrade systems
    • Labs
  26. Real-Time Extensions
    • Predictability and Preemption and Locks
    • PREEMPT_RT Project
    • Real-Time Checklist
  27. Closing and Evaluation Survey
    • Evaluation Survey


  1. Kernel Architecture Preview
    • Linux and UNIX
    • Monolithic and Micro Kernels
    • Main Kernel Tasks
    • User-Space and Kernel-Space
  2. Kernel Source Tree Overview
    • Installation and Layout of the Kernel Source
    • Kernel Browsers
    • Kernel Configuration Files
    • Why is it Hard? Part 2
  3. Kernel Programming Preview
    • Coding Style
    • kernel-doc
    • Using Generic Kernel Routines and Methods
    • Error Numbers, Printing Kernel Output, syslogd
    • Task Structure
    • Memory Allocation
    • Transferring Data between User and Kernel Space
  4. Modules
    • What are Modules?
    • A Trivial Example
    • Compiling Modules
    • Modules vs Built-in
    • Module Utilities
    • Automatic Loading/Unloading of Modules
    • Module Usage Count
    • Module Licensing
    • Exporting Symbols
    • Resolving Symbols **
    • {D.11Labs

** These sections may be considered in part or in whole as optional. They contain either background reference material, specialized topics, or advanced subjects. The instructor may choose to cover or not cover them depending on classroom experience and time constraints.


The course is primarily intended for experienced developers, programmers, and engineers who are interested in learning how to adapt Linux to an embedded system. You should be familiar with basic Linux utilities, know the C programming language, and be comfortable developing for Linux or UNIX. Pre-class preparation material will be provided before class.


The course illuminated a lot of things that I didn’t know before, like device tree, and general linux shortcuts.”  Jan 2020


I really appreciated the attention the instructor gave to individual questions and challenges. There was a great connection between the lessons and labs.”  Jan 2020


The instructor had relevant experience and a great passion for Linux.”  Jan 2020


At a Glance

Delivery Method

Live (Classroom)


  • 4 days of Instructor-led class time
  • Hands-on Labs & Assignments
  • Resources & Course Manual
  • Certificate of Completion
  • Digital Badge
  • Free Chromebook

Experience Level


Course Rating



Training 5 or more individuals?
Get a Corporate Quote >


Get training and a free Chromebook.

When you train with The Linux Foundation you’re already getting the best open source training straight from the source. And now, we are including a free Chromebook with the purchase of select Linux Foundation instructor-led training courses to help you get the most out of your training experience.

Learn More