Introduction to Embedded Linux – Fall 2018

This course has been canceled!

Fall 2018 Course

Dates: Mondays, November 12, 19, 26 and December 3

Time: 6 – 9 pm

Decision date: Monday, November 5

Early Registration Date deadline: Monday, October 29

Before Early Registration Date:
Members $400
Non-members $430

After Early Registration Date:
Members $430
Non-members $455

WHERE: Woburn Area

Phone 781-245-5405
Fax 781-245-5406

If paying by check, the check must be received before the appropriate dates for Early Registration and Decision Dates.

Make Checks payable and send to:
IEEE Boston Section
One Centre Street, Suite 203
Wakefield, MA 01880

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 4 day 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

Course Schedule Day 1
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
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
Crash and Core Dumps

Course Schedule Day 2
Process & Threads Management
What are Processes and Threads?
Virtual Memory Mapping
Creating and Managing Processes and Threads
Thread-Specific Data (TSD)
The Native POSIX Threading Library (NPTL)
Kernel Threads
Signals in Embedded Linux
System Calls in Embedded Linux
Linux 2.4 and 2.6 Scheduling Models
The O(1) Scheduler
The Completely Fair Scheduler (CFS)
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

Course Schedule Day 3
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
How Linux Tells Time
Kernel, POSIX and Interval Timers
High-Resolution Timers (HRTs)
Sleep Waiting and Spinlocks
Using Timers
Embedded Recommendations for Timing
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

Course Schedule Day 4
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