Introduction to Embedded Linux

Register Now

Fall 2016 Course

Dates: Thursdays, November 10, 17 and Wednesdays, November 30 and December 7

Time: 6 – 9 pm

Decision date: Monday, October 31, 2016

Early Registration Date deadline: October 20

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

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

WHERE: Crowne Plaza Hotel
15 Middlesex Canal Park Drive
Woburn, MA 01801

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

Speaker: Mike McCullough, RTETC, LLC

Course Overview:

Introduction to Embedded Linux

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

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. A 20-year electronics veteran, he has held various positions at LynuxWorks, Tilera, Embedded Planet, Wind River Systems, Lockheed Sanders, Stratus Computer and Apollo Computer. RTETC, LLC is a provider of Eclipse-based development tools, training and consulting for the embedded systems market.

Course Schedule

Course Schedule Day 1
The Basics
Linux Terminology, History and Versioning
The Linux Community: Desktop & Embedded
Linux and the GPL
Linux References (Books and Online)
Getting Started
Building the Kernel Source Code
Embedded Linux Kernels
Linux 2.6 and 3.x
Basic Kernel Capabilities
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
System Calls
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
Demand Paging and Virtual Memory
Allocating User and Kernel Memory
Mapping Device Memory
The Slab Allocator
The OOM Killer
Memory in Embedded Systems
Advanced Memory Operations
Linux and Memory
Managing Aligned Memory
Anonymous Memory Mappings
Debugging Memory Allocations
Locking and Reserving Memory
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)
Creating a Module and Module Loading
Dependency Issues
In Embedded Systems
Shared Libraries
A Shared Library Example
Static and Dynamic Libraries
The I/O Subsystem: A Tale of Two Models
The Original 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
Comparing the Two Driver Models
Course Schedule Day 4
Advanced I/O Operations
Standard I/O Operations
Scatter-Gather and Asynchronous I/O
Poll, Select and Epoll
Memory-Mapped I/O
File Advice
I/O Schedulers
Interrupt and Exception Handling
Bottom Halves and Deferring Work
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
Building Custom Linux Images
Target Image Builders
LTIB and Yocto
System Architecture Design Approaches
Deploying Embedded Linux
Choosing and Building the Root Filesystem
Useful Embedded Filesystems
Module Decisions
Final IT Work
Embedded Linux Trends
Some Final Recommendations