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 Linux System Design and Application Development
Course Number: LIN23
Course Description: This course is designed to provide Linux based developers with a solid background and hands on experience with the development tools, libraries and capabilities so that they can become proficient in building embedded Linux based applications. This course delivers practical solutions for writing, debugging, and profiling applications for embedded Linux systems. It also provides hands on experience that includes development and debugging tools as well as system and library functions for embedded Linux systems for platforms such as ARM, MIPS, PPC, etc. Attendees gain substantial practice with key tools and capabilities available to developers of Linux based applications and system software.
Participants will learn how to use development and debugging tools (toolchain, cross-compilers, embedded utilities, performance utilities, dmalloc, etc) and how to make use of many Linux system calls and library routines, as well a how to develop program using POSIX threads, IPC, Pipes, FIFOS, Signals, Reliable Signal Handling, Timers, Timing Events, and Share Memory among others.
Objectives: Upon completion of this course, participants will be able to:
• Use Linux commands
• Use basic shell commands
• Configure the Linux development environment for the Linux cross-compiler (MIPS, ARM)
• Create programs that use POSIX Threads
• Use Linux Toolchain to create applications and programs for MIPS or ARM processors
• Create programs that use Asynchronous I/O
• Create and use shared libraries for your embedded Linux system
• Use the GNU tools to create programs for MIPS or ARM
• Write programs that use I/O systems call
• Use IPC in your applications
• Use Linux system calls and library subroutines in your programs
Benefits:
Target Audience: The perfect course for programmers or software developers who need to design applications in the user space.
Prerequisites: Proficient in C and have 3-months experience using Linux commands or have taken our Linux Fundamentals course.
Course Length: 4.5 days
CourseTopics:
Day 1
1. Introduction
1.1. Course Objectives and format
1.2. Course overview
2. Linux
2.1. Objectives
2.2. About Linux
2.3. Basic Shell and Linux Commands
2.4. Basic Super User Commands
2.5. Linux Filesystem
2.6. Lab 1
Using Linux and shell Commands
Navigating the Linux Filesystem
Super User Commands
3. Overview of Linux Programming
2.1. Linux kernel overview
2.2. System calls and library routines overview
2.3. POSIX Overview
2.4. Linux Programming for Embedded
2.5. Setting up your embedded Linux programming environment
2.6. Emulator for different architectures (ARM, PPC, MIPS, etc) in Linux
2.5. Lab 2
Kernel interface in User Space
Libraries, library usage, and routines for POSIX
Checking your development environment.
Using emulators
3. System Libraries and Headers
3.1. System Include files
3.2. Using and creating libraries
3.3. Share Libraries
3.4. uClibc and uClibc++ for embedded Linux
3.5. Linking
3.4. BusyBox and BusyBox libraries
3.5. NewLib for embedded Linux
3.6. Lab 3
Using Share Libraries
Creating Share Libraries
Configuring and compiling some of the embedded Linux libraries (uClibc and NewLib)
4. Programming with GNU tools
4.1. Setting up and using a Cross-platform toolchain (ARM, or MIPS, or PPC)
4.1.1. addr2line
4.1.2. ar
4.1.3. as
4.1.4. c++filt
4.1.5. gcc-arm-linux or gcc-mips-linux
4.1.6. gasp
4.1.7. ld
4.1.8. nm
4.1.9. objdump
4.1.10. ranlib
4.1.11. size
4.1.12. readelf
4.1.13. strings
4.1.14. strip
4.2. Optimization tips
4.3. Using the linker
4.4. Using make
4.5. writing a kernel module
4.6. mtrace
4.7. dmalloc
4.8. Debugging with gdb
4.9. Debugging with ddd
4.10. Kernel debugger (kdb)
Day 2
4.11. Lab 4
Using the toolchain to compile programs for the mips
Using make
Writing, and compiling a kernel module for mips or arm
Using gdb to debug a program
Using ddd to debug a program
Optimizing a program using gcc-mips-linux or gcc-arm-linux
Using the binutils
5. Overview of vi (15-20 min)
5.1. Introduction to vi
5.2. vi basic commands
6. Additional development tools
5.1. IDEs: KDevelop & Eclipse
5.2. Electric Fence & Valgrind
5.3. Kate, and Edit
5.5. gprof
5.6. gcov
6.6. Logs
7. Linux File System
7.1. Access Permissions
7.2. I/O System Calls
7.3. Manipulating files
7.4. Higher performance I/O
7.5. Making File descriptors
7.6. Directory services and files access
7.7. Lab 5
Using I/O System Calls in a C program
Manipulating files in C
Using higher I/O performance
Make file descriptors
8. Inter-process Communication
8.1. Introduction to IPCs
8.2. Pipes
8.3. Semaphores
8.4. Message Queues
8.5. Sockets
8.6. Shared Memory
8.7. Lab 6
Create program that use IPC (semaphores, pipes, message Queues, Sockets, share
Memory)
Create programs that use sockets
9. Scheduling Overview (30 min)
9.1. Process scheduling
9.2. ISR Duration
9.3. Schedule Latency
9.2. Manipulating priorities
9.3. Preemption
Day 3
10. Signals
10.1. Sending signals
10.2. Reliable signal handling
10.3. Signal sets
10.4. Queueing signals
10.5. Lab 7
Programming using signals
Using queuing in a program
11. Time
11.1. Timing events
11.2. Timers
11.3. Lab 8
Creating a timer
Creating timing events
12. POSIX Threads
12.1. Creating POSIX threads
12.2. Synchronizing POSIX threads
12.3. POSIX Thread scheduling
12.3.1 sched_getscheduler
12.3.2 sched_setscheduler
12.3.3. sched_getparam
12.3.4. sched_get_priority_max
12.3.5. sched_get_priority_min
12.3.6. sched_rr_get_interval
12.3.7. sched_yield
12.4. POSIX Memory locking
12.4.1 mlock
12.4.2. mlockall
12.4.3. munlock
12.4.4. munlockall
12.5. POSIX Shared Memory
12.5.1 shm_open
12.5.2. shm_unlink
12.6. POSIX Message Queue
12.6.1. mq_open
12.6.2. mq_close
12.6.3. mq_getattr
12.6.4. mq_setattr
12.6.5. mq_send
12.6.6. mq_receive
12.6.7. mq_timesend
12.6.8. mq_timereceive
12.6.9. mq_notifiy
12.6.10. mq_unlink
12.7. POSIX Semaphores
12.7.1. sem_open
12.7.2. sem_close
12.7.3. sem_unlink
12.7.4. sem_init
12.7.5. sem_destroy
12.7.6. sem_getvalue
12.7.7. sem_wait
12.7.8. sem_trywait
12.7.9. sem_post
Day 4
12.8. POSIX signals
12.8.1. sigaction
12.8.2. sigqueue
12.8.3. sigwaitinfo
12.8.4. sigsuspend
12.8.5. sigprocmask
12.8.6. sigaddset
12.8.7. sigdelset
12.8.8. sigemptyset
12.8.9. sigfillset
12.8.10. sigismember
12.9. POSIX Clock and Timers
12.9.1 clock_settime
12.9.2. clock_gettime
12.9.3. clock_getres
12.9.4. clock_nanosleep
12.9.5. timer_create
12.9.6. timer_delete
12.9.7. timer_settime
12.9.8. timer_gettime
12.9.9. timer_getoverrun
12.10. Lab 9
Create programs that use the POSIX functions
13. Daemon Programming (20 min overview)
13.1. Process groups
13.2. Starting Daemons
13.3. Error reporting
14. Network utilities for embedded Linux systems
14.1. Tools available for data collection on an embedded Linux device
14.2. Installation, setup and usage
14.3. Lab 10
Using network tools
Day 5
15. Asynchronous I/O
15.1. What is it and how to use it?
15.2. AIO Control Block
15.3. AIO Functions
15.3.1. aio_read
15.3.2. aio_write
15.3.3. aio_error
15.3.4. aio_return
15.3.5. aio_cancel
15.3.6. aio_suspend
15.3.7. aio_listio
15.4. Kernel AIO interfaces
15.4.1. io_setup
15.4.2. io_submit
15.4.3. io_getevents
15.4.4. io_wait
15.4.5. io_cancel
15.4.6. io_destroy
15.5. Lab 11
Using AIO
16. Embedded Graphics
16.1. Graphics System
16.2. Embedded Linux Graphics
16.3. Embedded Linux Graphic Driver
16.3.1. Linux Frame Buffer Interface
16.3.2. Frame Buffer Internals
16.4. Windowing Environments, Toolkits and Applications