Embedded Linux BSPs and Device Drivers

Register Now

Spring 2017 Course

Dates: Wednesdays, April 12, 19, 26 and May 3

Time: 6 – 9 pm

Decision date: Monday, April 3

Early Registration Date deadline: Friday, March 31, 2017

Before Early Registration Date:
Members $395
Non-members $415

After Early Registration Date:
Members $415
Non-members $435

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

Phone 781-245-5405
email sec.boston@ieee.org
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. 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 software development tools, training and consulting services for the embedded systems market.

Course Summary – This 4-day technical training course provides advanced training in the development of Embedded Linux Board Support Packages (BSPs), Device Drivers and Distributions. The first part of the course focuses on BSP and Software Development Kit (SDK) development in an Embedded Linux context with a focus on application performance measurement and improvement. The latter part of the course covers Embedded Linux Device Driver development including key device driver decisions and deployment considerations for Embedded Linux BSPs.

Who Should Attend – The course is designed for real-time engineers who are developing Embedded Linux BSPs and Device Drivers for Embedded Linux distributions. It is also targeted at experienced developers requiring a refresher course on Linux BSP and Device Driver development.

Course Objectives

• To gain an understanding of the complexities of BSP and SDK development and their uses in Embedded Linux systems.
• To provide a basic understanding of the Linux I/O Subsystem and the Device Driver Models provided with Embedded Linux distributions.
• To gain an in-depth understanding of character-based device drivers in Embedded Linux
• To understand key device driver subsystems including relatively slow I/O interconnects such as I2C, SPI and USB as well as high-speed interfaces such as USB 3.0 and PCIe
• To give students the confidence to apply these concepts to their next Embedded Linux project.

Course Schedule Day 1
Getting Started with Embedded Linux
Linux and the GPL
Building the Kernel Source Code
Embedded Linux Kernels
BSPs and SDKs
Linux References (Books and Online)

Embedded Linux BSP Development Basics
BSP Requirements
U-Boot and Bootloader Development
Basic BSP Development
Files and Filesystem Support
The I/O Subsystem: Talking to Hardware
Memory Management and Paging
Error Handling in Embedded Linux BSPs
Timing and Timers
Interrupt Handling in BSPs
BSP Deployment Issues and Practices
Embedded Linux SDK Basics
The 3 Pieces of an SDK
Embedded Linux Distributions
The GNU Compiler Collection (GCC)
Other Embedded Linux Development Tools
Library Support
Glibc and Alternatives
SDK Deployment and Support
Debugging
GDB, GDB Server and the GDB Server Debugger
Other Debug Tools
An Abatron Board Bring-Up Example
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

Course Schedule Day 2
Configuring Embedded Linux
Config Methods
Config Syntax
Adding Code to the Linux Kernel
Booting Embedded Linux
The Linux Boot Process
NFS and RAMdisk Booting
Root and Flash File System Development
Building the RAMdisk
Busybox Development
Testing and Debug of Embedded Linux BSPs
Kernel Debug and Kernel Probes
Kexec and Kdump
The Linux Test Project (LTP)
Performance Tuning Embedded Linux BSPs
User Mode Linux and Virtualization
Measuring Embedded Linux BSP Performance
Common Considerations
Uncommon Considerations
BootLoader Optimizations
Boot Time Measurements
Effective Memory and Flash Usage
Filesystem Performance Issues
Some Ideas on Performance Measurement

Course Schedule Day 3
The Original Device Driver Model
The fops struct and Char Drivers
The inode and dentry structs
Major and Minor Numbers
Embedding Channel Information
Deferring Work
The /proc Filesystem
Configuring the Device Driver
Modularization Revisited
The New Device Driver Model
An Object-Oriented Approach
Platform Devices and Drivers
Subsystem Registration
The Probe and Init Functions
The Show and Store Functions
The /sys Filesystem
Configuring the New Device Driver
Comparing the Two Driver Models
The Flattened Device Tree (FDT)
openBoot and its Effect on Embedded Linux
The Device Tree Script (dts) File
The Device Tree Compiler (dtc)
The Device Tree Blob (dtb) File
Building a dtb File
Hybrid Device Drivers
Other fops Functions
The Need for Ioctl
A Simulated Char Device Driver
The SIM Device Driver
Initialization
Open and Close
Read and Write
The /proc Driver Interface
MMAP Support

Course Schedule Day 4
Linux Device Driver Subsystems
Serial Drivers
The RTC Subsystem
Watchdogs
I2C & SPI
Block Devices
PCI
USB
VME
Video
Sound
What’s Missing?
Memory Technology Devices
What is an MTD?
NAND vs NOR Flash Interfaces
The Common Flash Interface (CFI)
Driver and User Modules
Flash Filesystems
Drivers in User Space
Accessing I/O Regions
Accessing Memory Regions
User Mode SCSI, USB and I2C
UIO
High-Speed Interconnects
PCIe
GigE
iSCSI
Infiniband
FibreChannel
Serial RapidIO
Debugging Device Drivers
kdb, kgdb and JTAG
Kernel Probes
Kexec and Kdump
Kernel Profiling
User Mode Linux and Kernel Hacking

Performance Tuning Device Drivers

Some Final Recommendations