Embedded Linux Development

Embedded Linux

Developers building embedded solutions using Linux often need to make certain decisions and complete tasks such as: selecting the proper toolchain, software versions, changing and adding some kernel code (device drivers) and system code, and also evaluating the time needed to deliver working solution. This advanced course will provide you with the knowledge and experience needed to use Linux within your project (regardless whether you are already using it, or just evaluating).

You will gain a complete understanding of all aspects of building and deploying an embedded Linux system: from boot-loader and system boot-strapping, through kernel drivers programming, and code organization, system level programming, to creating GUI and network embedded applications, making use of high-level open source software and finally debugging, profiling and optimizing system. Lots of code examples are provided too.

Through hands-on exercises, you will gain experience of device drivers, protocols and components often found in embedded systems.

Course outline

During this intensive training more subjects are discussed with corresponding examples, such as: licenses, ownage and control of open-source code, system security and even some aspects of Linux administration (needed in embedded context) as well as maintaining best practices.

Detailed agenda

1. Linux embedded systems fundamentals

After 'Part 1'

Participants will be able to select proper tool-chain for a task, prepare simple Linux system: configure kernel, select drivers and mechanisms, configure it: create boot scripts, configure standard system services (such as network connectivity) and security (users and permissions). Participants will gain a hands-on familiarity with essential components of Embedded Linux stack and understand their relationships.


During this day's series of practical exercises the participants configure, compile from scratch and experiment with building blocks of Linux Embedded system.

2. Building and debugging system as a whole using Yocto Project. Root filesystem strategies. Introduction to kernel development

After 'Part 2'

All about Linux kernel programming is the layer based design and framework. Participants will understand the design of Linux kernel and will be able to extend code (adding and adjusting drivers) as well as to select a proper layer and framework for a given task (not all tasks need in-kernel programming, some can be resolved totally in userspace). Many code snippets and working examples will be presented.


Part 3. Linux kernel device model. Userspace programs - Systemd. Embedded Linux debugging and profiling

After 'Part 3'

Today nobody implements drivers by creating code for all its layers (from userspace interaction to hardware handling) as there are frameworks for almost every driver.

The complete system will be deployed to a development board. Participants will be given overview of potentially interesting tools and technologies. Again, with numerous working examples and code snippets, such as: embedded controller with GUI in QT, embedded measuring device with network access and control via WEB interface, wireless connected device, multimedia appliances, and so on.


This series of exercises contains lots of examples of scripts, source code and applications to be modified and run on the device.

All the boilerplate is ready, the participant needs to modify the code, add important function or modify the code to perform an experiment.