Training > IoT & Embedded Development > Embedded Linux Development (LFD450)

Embedded Linux Development (LFD450)

This instructor-led 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.

Who Is It For

This course is for experienced developers who need to develop an embedded Linux product from the ground up.
read less read more
What You’ll Learn

In this course you will learn about the Linux kernel architecture, emphasizing the essential points relevant to adapting the kernel to a custom embedded platform. The course also covers techniques for right-sizing systems 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.
read less read more
What It Prepares You For

The course will prepare you to use the tools and techniques necessary for developing embedded Linux devices.
read less read more
Course Outline
Expand All
Collapse All
Who You Are
The Linux Foundation
Linux Foundation Training
Certification Programs and Digital Badging
Linux Distributions
Preparing Your System
Things change in Linux
Documentation and Links
Course Registration
Linux Distributions
Virtual Machine Installation
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
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
Cross-Development Environments: Goals and Needs
Why is it Hard?
Project Goal Considerations
Links to Additional Discussions
Kbuild System
Kbuild Makefiles
Kconfig Basics
Searching Kconfig
Cross-Development Toolchain
The Compiler Triplet
Built-in Linux Distribution Cross Compiler
Yocto Project
Booting the Target Development Board from uSD
Why do we use uSD Cards?
Getting SW onto a uSD card
Why is using uSD cards a bad idea
Booting a Target Development Board over Ethernet
Using Virtual Hardware
An easier way to develop
Objectives of the Lab
Boot loaders and U-Boot
Boot Code Stages
Some GPL Boot Loaders
Das U-Boot
U-Boot Command Line
U-Boot Environment
Kernel Configuration, Compilation, Booting
Configuring the Kernel for the Development Board
Device Drivers**
Types of Devices
Device Nodes
Character Drivers
An Example
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
Target Filesystem Packaging
Embedded Filesystem Goals
Directories: a Survey
Embedded Filesystem Types
Build Target Root Filesystem
Objectives of the Lab
Root Filesystem Choices
SysV init vs. BusyBox init
udev vs. BusyBox mdev
C Library Choices
Configuring uClibc
Configuring uClibc for NFS
Another Alternate C-library: musl **
What is musl?
Configuring BuildRoot for musl
Build BusyBox Utility Suite
Basic Workings
Integrated with Buildroot
Kernel Monitoring and Debugging
Tracing and Profiling
Ftrace, Trace-Cmd, Kernelshark
Using perf
SysRq Key and oops Messages
Kernel Debuggers
Oft-Needed Embedded Components
Taking Inventory of Kernel Sizes
Memory Technology Devices (Flash Memory Filesystems)
What are MTD Devices?
NAND vs. NOR vs. eMMC
Driver and User Modules
Flash Filesystems
Compressed Filesystems
Deploying in an MTD Partition
System Upgrades
When do we need to update?
Update strategies
Prebuilt upgrade systems
Real-Time Extensions
Predictability and Preemption and Locks
Real-Time Checklist
Closing and Evaluation Survey
Evaluation Survey
Kernel Architecture Preview
Linux and UNIX
Monolithic and Micro Kernels
Main Kernel Tasks
User-Space and Kernel-Space
Kernel Source Tree Overview
Installation and Layout of the Kernel Source
Kernel Browsers
Kernel Configuration Files
Why is it Hard? Part 2
Kernel Programming Preview
Coding Style
Using Generic Kernel Routines and Methods
Error Numbers, Printing Kernel Output, syslogd
Task Structure
Memory Allocation
Transferring Data between User and Kernel Space
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 **

** 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.
Jan 2021
I thought the course presenter was very knowledgeable about the topic, and provided good information beyond what was in the course. I found his first hand, and "a friend of mine" accounts, particularly insightful.
Jan 2021
I found the devkit script extremely helpful! Saved us a lot of time when typing out long qemu commands. Also, using $RESOURCES and $SOLUTION was nice.
Jan 2021
I liked that our instructor was a well qualified Linux guru.
Jan 2021
Instructor was great!
Nov 2020
Instructor was great! Friendly, fun and knowledgeable. Appreciated his live diagrams, and focus on helping make the material fun.
Nov 2020
I liked the whiteboard explanation, that really helped.