Free Online Training Events
Free Technical Resources
PLEASE NOTE: This is a LIVE INSTRUCTOR-LED training event delivered ONLINE.
It covers the same scope and content as a scheduled in-person class and delivers comparable learning outcomes.
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.
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:
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
Complete an enquiry form and a Doulos representative will get back to you.
Enquiry FormPrice on request