Global training solutions for engineers creating the world's electronics

System Programming for Embedded Linux

Standard Level - 4 days


This course is available Live Online worldwide: View the Live Online full course description »


The performance and stability of a system ultimately depends on how well you use the resources of the underlying operating system. This course explains how to make effective use of the facilities of the POSIX compliant Linux GNU C library when implementing embedded devices. Attendees will begin with the basics of file handling, device I/O and memory and process management. They will learn how to use signals safely, how to compartmentalize an application into multiple processes and threads and the trade-offs between various types of Inter Process Communication using sockets, message queues and shared memory.

The course focusses on robust design, efficient use of resources and real-time behaviour. All lab exercises are cross-compiled and tested on a BeagleBone embedded development board.

If you have specific requirements, please contact Doulos to discuss your options.

This course is aimed at engineers working on embedded devices.

  • Basics of file handling, device I/O and memory and process management
  • How to use signals safely
  • How to compartmentalize an application into multiple processes and threads
  • Trade-offs between various types of Inter Process Communication using sockets, message queues and shared memory.
  • Good working knowledge of C language is essential
  • Familiarity with Linux or Unix command-line and Linux development tools such as make and gcc is recommended

Please contact Doulos directly to discuss and assess your specific experience against the pre-requisites.

Doulos course materials are renowned for being the most comprehensive and user friendly available. Their unique style, content and coverage has made them sought after resources in their own right. 

The materials include:

  • Copies of the presentations and lab notes
  • Sample code
  • Worked solutions for the labs

Developing for embedded Linux
The tool-chain: choosing, installing and testing • Application program interfaces: the POSIX standard • Open source licenses: GPL/LGPL, BSD, etc

Debugging
Debugging a remote target device using gdb and gdbserver

Files and devices
Files and file-related API: waiting for several things to happen with select() and poll() • Devices: everything is a file. Interfacing with a simple device driver. Using the ioctl() function to access device-specific operations

Processes
Process life cycle: fork(), exit() and exec() • Scheduling: real-time and non-real-time policies; setting priority and niceness

Memory
Virtual memory and its consequences • Allocating from the heap and stack • Mapping memory using mmap

Signals
Standard and real-time signals • Writing robust signal handlers • Signal masks and how to handle signals synchronously

Real-time Linux kernels
Kernel preemption • The real-time PREEMPT_RT patch

Inter-process communication
Pipes • Shared memory and semaphores • Message queues • Sockets: internet and UNIX (local). Stream and datagram connections

POSIX Threads
Thread life cycle: pthread_create(), pthread_exit(), pthread_join() • Scheduling threads: real-time and non-real-time • The thread stack and how to set the stack size

Thread synchronisation
Synchronisation using mutexes; priority inversion and priority inheritance • Condition variables: producer and consumer threads • Thread cancellation and clean-up operators

Time and timers
Timer accuracy: high-resolution timers, POSIX clocks and timers • Measuring time • Periodic tasks

Looking for team-based training, or other locations?

Complete an enquiry form and a Doulos representative will get back to you.

Enquiry FormPrice on request