This course is delivered in co-operation with Doulos' training partner Feabhas, who specialise in training courses for real-time embedded developers.
Linux is often used as an embedded operating system, and yet it is still regarded as something of a black art by many. This course aims to remove the mystique by showing exactly how to deploy Linux on a typical embedded target board through a combination of theory and practice.
Starting a board with no operating system, delegates will go through a simulated product cycle during which they will build and boot a Linux kernel, build a root file system, write a device driver and a multi-threaded application. Finally, they will review the performance of the resulting system and consider what changes could be made to improve it's real-time performance.
* Describe the four essential components of an embedded project: toolchain, kernel, bootloader and root file system
* Show how to control hardware from a device driver (in outline, see EL-504 for a more in-depth treatment)
* Give an overview of application development, profiling and debugging
* Show how to configure NOR and NAND flash memory for robust code and data storage
* Look at the issues of real-time and Linux
Introduction
Linux in an embedded context • The 4 basic elements: toolchain, bootloader, kernel, root file system
The Linux Kernel
Virtual memory • configuration and cross-compiling
Booting Linux
The Linux boot sequence • boot-loaders: U-boot • loading images using TFTP
The root file-system
Creating a minimal root file-system using Busybox • The C library: glibc vs uClibc. • Creating a RAM disk image
Network configuration
Static and dynamic IP addresses • mounting the root file system over NFS
Device drivers
How to write a simple driver to access GPIO pins • kernel modules
Debugging
Logging using , syslogd • remote debugging using Eclipse and gdbserver.
POSIX programming
Processes: fork and exit, scheduling • signals and signal handlers • time and timers • pipes, message queues, semaphores, shared memory
POSIX Threads
Threads vs processes • synchronising threads using mutexes and condition variables.
Flash memory
the Linux Memory Technology Devices Layer
File systems
File-system suitable for embedded applications • Study of cramfs, tmpfs, jffs2 and yaffs
Real time Linux
Typical Interrupt latency. kernel pre-emption modes • the real-time patch • practical considerations
Profiling
Profiling using using gprof and Oprofile
Real time sub-kernels
Introduction to writing hard real-time tasks using RTAI