Introduction to Embedded Linux – Online Course

Register Now

You will have 90 days to access the on-line course.

Speaker: Mike McCullough, President RTETC, LLC.

Course – Introduction to Embedded Linux (EL201)

Lecturer – Mike McCullough is President and CEO of RTETC, LLC. Mike has a BS in Computer Engineering and an MS in Systems Engineering from Boston University. He has held a variety of software engineering positions at LynuxWorks, Embedded Planet, Wind River Systems and Lockheed Sanders. RTETC, LLC provides real-time embedded training and consulting to many embedded systems companies. RTETC focuses on real-time operating systems (RTOS), Linux and Android solutions for the embedded systems market.

Course Summary – This video course introduces the Linux Operating System and Embedded Linux Distributions. The course focuses on the development and creation of applications in an Embedded Linux context using the Eclipse IDE. The first part of the course focuses on acquiring an understanding of the basic Linux Operating System, highlighting areas of concern for Embedded Linux applications development using Eclipse. The latter part of the course covers testing, booting and configuring of Embedded Linux systems including embedded cross-development and target board considerations.

Who Should Attend – The course is designed for real-time engineers who are building Embedded Linux solutions. It is also targeted at experienced developers requiring a refresher course on Embedded Linux. This course will clearly demonstrate both the strengths and weaknesses of the Linux Operating System in Embedded Systems.

Course Objectives

• To provide a basic understanding of the Linux OS and the Eclipse IDE framework.
• To understand the complexities of Embedded Linux Distributions in embedded systems.
• To learn how to configure, boot and test Embedded Linux distributions and applications running on Embedded Linux target systems.
• To give students the confidence to apply these concepts to their next Embedded Linux project

Hardware and Software Requirements – The student should have a working Linux desktop environment either directly installed or in a virtualization environment. The desktop Linux should have the GNU compiler and binary utilities (binutils) already installed. A working Eclipse C/C++ installation or prior knowledge of C-based Makefiles is useful for completion of lab exercises. Lab solutions are also provided with the course. An Embedded Linux target hardware platform is useful but not absolutely required for this course.

Additional Reference Materials

• Linux Kernel Development by Robert Love
• Linux System Programming by Robert Love
• Embedded Linux Primer by Christopher Hallinan
• Pro Linux Embedded Systems by Gene Sally
• Embedded Linux Development Using Eclipse by Doug Abbott
• Linux Device Drivers by Jonathan Corbet et al
• Essential Linux Device Drivers by Sreekrishnan Venkateswaran

Embedded Development Basics
Embedded Systems Characteristics
Embedded Real-Time Systems
Embedded Linux Systems and the Internet of Things (IOT)

Embedded Linux Basics
Embedded Linux Training Overview
Linux Terminology, History and Versioning
The Linux Community: Desktop & Embedded
Linux and the GPL
Linux References (Books and Online)

Getting Started in Embedded Linux
Kernel Source Code
Building the Kernel
Embedded Linux Kernels
Linux 2.6, 3.x and 4.x

Embedded Linux Kernel Overview
Process and Threads Management
Signals and System Calls
Synchronization, IPC and Error Handling
Timing and Timers
Memory Management and Paging
The I/O Subsystem: A Tale of Two Models
Modularization

Debugging
Process-Level and System-Level Debug
GDB, GDB Server and the GDB Server Debugger
Other Debug and Test Tools
An Eclipse Remote Debug Example
Advanced Debug with printk, syslogd and LTTng

System-Level Debug
System-Level Debug Tools
The /proc Filesystem
Advanced Logging Methods
KGDB and KDB
Crash and Core Dumps

Process & Threads Management
What are Processes and Threads?
Virtual Memory Mapping
Creating and Managing Processes and Threads
Thread-Specific Data (TSD)
POSIX
The Native POSIX Threading Library (NPTL)
Kernel Threads

Signals in Embedded Linux

System Calls in Embedded Linux

Scheduling
Linux 2.4 and 2.6 Scheduling Models
The O(1) Scheduler
The Completely Fair Scheduler (CFS)

Synchronization
Via Global Data
Via Semaphores, Files and Signals
Condition and Completion Variables
Mutexes and Futexes

Inter-Process Communications (IPC)
Message Queues
Semaphores Revisited
Shared Memory
Pipes and FIFOs
Remote Procedure Calls
Networking

Memory Management and Paging
Linux, Demand Paging and Virtual Memory
Allocating User and Kernel Memory
Mapping Device Memory
The Slab Allocator
The OOM Killer
Managing Aligned Memory
Anonymous Memory Mappings
Debugging Memory Allocations
Locking and Reserving Memory
Huge Pages
Memory in Embedded Systems

Error Handling
errno and perror
strerror and strerror_r
oops, panics and Segmentation Faults

Timing
How Linux Tells Time
Kernel, POSIX and Interval Timers
High-Resolution Timers (HRTs)

Sleeping
Sleep Waiting and Spinlocks
Using Timers
Embedded Recommendations for Timing

Modularization
Creating and Building a Module
A Simple Kernel Module
Module Loading
Module Dependencies
Module Licensing

Shared Libraries
A Shared Library Example
Static and Dynamic Libraries

Interrupt and Exception Handling

Bottom Halves and Deferring Work

The I/O Subsystem: A Tale of Two Models
The UNIX Device Driver Model
The Standard I/O Interface
Major and Minor Numbers
Configuring the Device Driver

The Evolution of the New Device Driver Model
The Initial Object-Oriented Approach
Platform Devices, Busses, Adapters and Drivers
A Generic Subsystem Model

The Generic Subsystem Model in Detail
Subsystem Registration
The Probe and Init Functions
The Show and Store Functions
User Access via the /sys Filesystem
Configuring the New Device Driver
The udev Linux Application

Comparing the Two Driver Models

Advanced I/O Operations

Standard UNIX I/O Operations
Scatter-Gather and Asynchronous I/O
Poll/Select and Epoll
Memory-Mapped I/O
File Advice
I/O Schedulers and inotify

The Linux Boot Process
The Root Filesystem
Desktop Linux Boot
Bootloaders and U-Boot
Embedded Linux Boot Methods
Building and Booting from SD Cards

Managing Embedded Linux Builds
Configuring and menuconfig
Oldconfig, menuconfig, xconfig and gconfig
Building Custom Linux Images
Target Image Builders
The Open Embedded Project and the Yocto Project

System Architecture Design Approaches

Deploying Embedded Linux
Choosing and Building the Root Filesystem
Module Decisions
Final IT Work

Embedded Linux Trends
Development Trends
Monitoring Trends
Testing Trends

Some Final Recommendations

Course Fee Schedule: Registration is On-Going

Cost: $350