Training Categories
Click on a link to see more about each course.
Course Outline
Dates Offered (click on the desired date to register):
This course is currently not scheduled for the near future.
Embedded and Real-Time Linux Development
Course Number: LIN11
Course Description:
Linux has become increasingly popular as an embedded operating system. Characteristics such as its reliability, robustness, open source, license-free nature, and successful implementation on a wide range of hardware, are some of the key reasons. This course acquaints developers with the issues essential for embedded and real-time Linux development. The course progresses through a number of topics. Each topic is presented with a supporting laboratory exercise before moving on to the next topic. This four and one-half day course provides substantial practice with the key steps in developing an embedded Linux product. The course shows attendees how to configure a small Linux kernel, develop code within the kernel, such as for new system functionality or device drivers, and how to measure and obtain real-time performance with Linux. The course begins with a complete, simple, project that walks the attendees through the entire process of creating a special version of the Linux kernel, creating a root file system, including just the libraries that are needed, and constructing a custom boot sequence.
The course covers the key issues in embedding Linux. Such questions as: why Linux, how to embed Linux, and how to measure and obtain real-time performance in Linux are examined. The attendees will gain experience in developing applications and system programs. These examples include hard and soft real-time applications. The issues with real-time in Linux will be examined in detail. Attendees will spend approximately 50 percent of the class time actually gaining hands-on experience with these topics
Objectives:
Upon completion of this class, participants will:
- Possess an understanding of the essentials of embedded and real-time Linux.
- Gain practical experience in developing an embedded Linux system.
- Develop real-time Linux software.
Benefits:
Participants learn by doing in this hands-on workshop. Development boards are provided for lab exercises. Students receive resources and other goodies as part of their registration,
Target Audience:
Linux system developers, software engineers, programmers/developers tasked with learning how to create real-time embedded systems under Linux.
Prerequisites:
Current working experience and/or knowledge of C, C++, and Linux are required. Unix experience does not apply.
Course Length: 4.5 days
CourseTopics:
1. Embedded and Real-Time Linux Development
1.1. Objectives and format
1.2. Introduction Embedded and Real-Time Linux
o What is Linux?
o What is Embedded Linux?
o What is Real-Time Linux?
o Linux Real-Time Overview
1. Soft Time
2. Hard Time
2. Overview Of Project
2.1. Building a small system 2.2. Configuring a Linux kernel
2.3 Compiling the Linux kernel
3. Building A Root File System
3.1. What directories are required? 3.2. Configuring, making, and installing Busybox
3.3. Configuring the boot sequence 3.4. Configuring networking
3.5 Creating the Linux Initialization files
3.6 Creating the Root File System
3.7 Using tools and utilities to build a Root file system.
4. Building A System Image
4.1. Creating the Devicesin the /dev directory 4.2. Inserting drivers 4.3. Stacked drivers 4.4. Libraries 4.5. Configuring the Linux Modules and Device Drivers files
5. Applications
5.1. Selecting, compiling and configuring the Applications for your embedded device
6. Making A Boot Image
6.1. Selecting, configuring, and installing a bootloader (U-Boot, RedBoot, GRUB, Syslinux)
6.2. Putting the pieces together (Kernel, Root File System, 6.3. Creating a Filesystem image 6.4. Bootloaders (U-Boot, RedBoot, GRUB, Syslinux, etc)
6.5. Creating the final system boot image
7. File Systems
7.1. Flash Devices
7.2. Read-Only File Systems 7.3. CRAMFS 7.4. Journaling File Systems 7.5. Ext2 File System 7.5. Benchmarking File Systems
8. Development Gnu tools 8.1. Gcc
8.2. Optimization 8.3. Linker 8.4. Building tools for the source (make, Makefile, automake, etc)
8.5. Source Code Control
8.6. Debugging with gdb, ddd, strace, etc
8.7. Additional tools: ccache, rsync, etc
8.8. Profiling and Tracing 8.9. Finding Memory Erros
9. Cross development
9.1. Cross compilation
9.2. Libraries and tool chains
9.3. How to configure the kernel for cross compiling
9.4. Building the kernel and modules
9.5. Emulators
9.6. Integrated Development Environments
10. Linux Real-Time Overview
10.1. Linux Real-Time fundamentals
10.2. Real-Time Example
10.3. Real-Time Software Model 10.4. Response Time 10.5. Designing a Real-Time Applications 10.6. Linux Scheduler
11. Kernel And System Programming
11.1. Writing a system call 11.2. System call basics 11.3. Shared memory 11.4. Threads
11.5. Synchronization, and Scheduling 11.6. Memory locking 11.7. Process and Thread Model 11.8. Linux Scheduler Priority Limits 11.9. Process States
11.10. Inter-Process/Threads Communication
11.11. Memory management, including file buffering, process swapping, and Direct memory Access
(DMA)
11.12. Compiling Modules for the kernel
11.13. Creating a Device Driver
12. Linux and Real Time
12.1. What is real time? 12.2. A real-time time line
12.3. User space vs. kernel space 12.4. Linux Real-Time Scheduler
12.5. Issues and, latencies
12.6. Low latency patch 12.7. Linear scheduling
12.8. Non-preemptive kernels 12.9. Latency test tool 12.10. What is new in Kernel 2.6 for real-time
13. Real-Time Subkernels
13.1. RTLinux overview 13.2. Building RTLinux 13.3. Installing RTLinux
13.4. Programming with RTLinux 13.5. RTAI Overview and characteristics 13.6. Building RTAI 13.7. Installing RTAI 13.8. Programming with RTAI 13.9. RTAI functionality and functions
13.9. Kurt overview 13.10. Kurt Building Kurt 13.11. Installing Kurt
14. Preemption
14.1. Preemptibility in Kernel 2.6 14.2. Low Latency
14.3. Preemptible Kernels
14.4. Comparing Preemptible Solutions 14.5. Other Preemptibility Features
15. Data: User To/From Kernel
15.1. Functions to access the user space 15.2. System calls
15.3. Moving data between User Space and Kernel Space
15.4. Share Memory
16. IOCTLs
16.1. What is ioctl?
16.2. Using ioctl commands to interact with a device
16.3. Implementing IOCTL in device drivers
17. Memory Management
17.1. Memory allocation/deallocation with kmalloc and kfree
17.2. Page-oriented memory allocation
17.3. Memory allocation in the virtual address space
17.4. The mmap() method