Return to Training Programs


Course-Number: ATR-041

Course-Description: Embedded Linux

Duration of course: 3 days

Course Description:

This is a 3-day course that focuses on how to build applications for an embedded environment using Linux.

Starting from first principles, the course discusses the unique hardware and software requirements for embedded environments and also the build process mechanisms, which are quite different from those of host based systems.

The course looks at building a new kernel keeping in mind the small footprint requirement as well as the restriction in boot-sizes generally featuring in embedded environments. Participants are encouraged to ask detailed questions about each kernel functionality and its relevance to the target image.

The next module deals with the booting sequence and initialization. A detailed walk thru is provided into the boot-up sequence so that every stage is understood.

After this, the participants are introduced to the GNU toolchain for building kernel programs, such as compiler, linker etc, and advanced concepts such as linker/loader scripts for fine-tuning the load process, dealing with MMU-less environments, cross-compiling in cases where the target processor is different from the development system etc.

Patching the kernel for controlling and debugging it thru a serial port using kgdb is also covered.

The course then looks at critical packages required to make a linux system functional. Static and shared libraries are discussed and a bare-bones shell is created from scratch. A minimalistic root file system is created and concepts of a RAM disk and its relevance are also covered.

The course uses specialized hardware in the form of “IDE to Compact Flash adapor” to teach how to build embedded systems. An 8 MB Compact Flash boot disk is used which holds the kernel as well as the shell as well as a minimalistic set of libraries and a simple embedded application.

Target Audience:

This is not an entry level course. The course does not cover Kernel Internals, Device Drivers or Kernel Programming Mechanisms. It is expected that the participants already have some knowledge of basic kernel level programming to draw some benefit from this course.


The course expects a reasonably good knowledge of ‘C’ programming. Knowledge of basic Unix/Linux commands to navigate, write source-code, search for files, compile, execute etc. is expected. Also, some knowledge of kernel internals is expected.






Introduction to embedded systems

1.5 hrs

Overall picture of embedded environments.

Development tools under linux

1.5 hrs

The 'C' compiler, assembler, linker, static and dynamic libraries, objdump, ldd, ldconfig, nm and strip.

Compiling a new kernel

1.5 hrs

Selecting/deselecting components for creation of the kernel image, techniques for reducing the kernel footprint etc.

The booting process

1.5 hrs

Detailed overview of booting the linux kernel, boot-loaders, 1st and 2nd stage loading, initialization scripts etc.


Compiling a minimalistic shell

1.5 hrs

A statically compiled shell.

Other packages / utilities

1.5 hrs

Core utilities, file-system utilities, initialization scripts, driver support utils

Booting from the target system

1.5 hrs

Transferring the image, Using the IDE to Compact Flash adaptor etc.

Developing an embedded application

1.5 hrs

Auto-Kickstarting the application on the target board, controlling the application.


Controlling the target system

1.5 hrs

Using kgdb, setting breakpoints etc.

Developing Board Support Packages

1.5 hrs

Various interfaces to control the target board, using ethernet, usb, serial and parallel ports and protocol stacks on top of standard connections.

Debugging the target kernel

1.5 hrs

Advanced techniques in debugging the target system, debugging loadable kernel modules on the target etc.

Case study - A complete embedded application

1.5 hrs

Building a complete, simple embedded application on the target.

(C) 2005 -   All Rights Reserved.

Return to Training Programs