Embedded Linux Development

Developers building embedded solutions using Linux often need to make certain decisions and complete tasks such as: selecting the proper tool-chain, software versions, changing and adding some kernel code (device drivers) and system code, and also evaluating the time needed to deliver working solution. Within 5 intensive days of lectures and exercises 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 programing, and code organization, system level programing, to creating GUI and network embedded applications, making use of high-level open source software and finally debugging, profiling and optimizing system. Supporting tools and lots of code examples are provided too.

You will develop and test code running on an ARM target board . Through hands-on exercises, you will gain experience of device drivers, protocols and components often found in embedded systems, such as: RS-232C, I2C, SPI, MMC, USB (host and client), Bluetooth, LCD, touch screen, analog to digital converters and many more.

Duration:
5-days (40h)

Course outline

During the training more subjects are discussed with corresponding examples.

These are extensive topics, such as: licenses, ownage and control of open-source code, system security and even some aspects of Linux administration (needed in embedded context). Other general topics, are: keeping latency at the lowest possible level, optimizing work, reusing code, being close to standards and maintaining best practices.

Detailed agenda

Day 1. Linux embedded systems fundamentals

After ‘Day 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). This system will become a base for further research and optimization.

Day 2. In-kernel programming and debugging

After ‘Day 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.

Day 3. Linux device model, kernel debugging and specific embedded subsystems.

After ‘Day 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.

Day 4. Root filesystem strategies, filesystems, building and debugging system as a whole, userspace programming.

After ‘Day 4’:

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.

Day 5. Debugging and tracing system as a whole. Real-Time in Linux

After ‘Day 5’:

We will find bugs in some code examples and fix them. We will consider real time aspects of Linux e.g. ensuring system reaction to input signal (via. input device or network) in a given time and under system load.