Introduction to Embedded Linux – Spring 2015

When:
April 27, 2015 @ 6:00 pm – 9:00 pm America/New York Timezone
2015-04-27T18:00:00-04:00
2015-04-27T21:00:00-04:00
Where:
Crowne Plaza Hotel
15 Middlesex Canal Park Drive
Woburn, MA 01801
USA
Cost:
variable
Introduction to Embedded Linux - Spring 2015 @ Crowne Plaza Hotel | Woburn | Massachusetts | United States
This course has been canceled.
 
Speaker: Mike McCullough, RTETC, LLC
Date & Time: Mondays, April 6, 15, 20, 27, 6 – 9PM

By: March 23

Members: $400
Non-Members: $430

After: March 23

Members: $430
Non-Members: $455
Decision: Wednesday, March 25

Phone 781-245-5405
email sec.boston@ieee.org
Fax 781-245-5406

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

Course Overview:

This 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 gain an understanding of the complexities of Embedded Linux Distributions and their use 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

Bio– 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 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
Modularization
Debugging
GDB, GDB Server and the GDB Server Debugger
Other Debug 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 Dumps
An Eclipse Debug Example
Other Debug and Test Tools
Other System-Level Debug Approaches

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)
POSIX
The Native POSIX Threading Library (NPTL)
Kernel Threads
Signals and System Calls
Scheduling and Synchronization
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
Inter-Process Communications (IPC)
Message Queues
Semaphores Revisited
Shared Memory
Pipes, FIFOs and Futexes
Remote Procedure Calls and Networking

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 Memory
Reserving Memory

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)
Modularization
Creating a Module and Module Loading
Dependency Issues
In Embedded Systems
Shared Libraries
A Shared Library Example
Static and Dynamic Libraries

Course Schedule Day 4
The I/O Subsystem: A Tale of Two Models
The Original Device Driver Model
The Standard I/O Interface
The New Device Driver Model
Platform Devices, Busses, Adapters and Drivers
Comparing the Two Driver Models
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