Nº
DATE: CALL
PRICE NIS: 4350 + VAT
DURATION: 5 Days
Course Overview: The GNU / Linux operating system is the Operating System of choice for many embedded and real time developers: the main reasons being that the source code is free, there are no runtime royalties and it is a robust reliable operating system with excellent networking support.
This course focuses on Embedded Linux and Advanced Kernel Programming, including device drivers, and RT topics.
Who should attend?Embedded and RT programmers developing devices using the Linux kernel and driver developers for internal or external peripherals.
Prerequisities:- Linux Basics, Linux Introduction or equivalent. Linux Systems Programming or equivalent.
- Knowledge of C or C++
Course Outline:
1. Kernel Introduction
-
System overview and role of the kernel
-
Supported hardware architectures
2. Kernel Architecture
-
Supervisor mode vs. User mode
-
System Calls
-
Task Scheduling
-
Scheduling priorities, Real-time
-
Kernel Preemption
-
NPTL Threads
-
I/O scheduler
3. Configuring and Building the Linux Kernel
-
Getting the source
-
Structure of source files
-
Configuring the kernel
-
Compiling the kernel
4. Cross-Compiling for Embedded
-
Embedded Tool-chains
-
Cross-compiling for the Target Platform
-
Linux boot process
-
Kernel parameters
-
Bootloaders
-
Root filesystem over NFS
5. Module Programming
-
Module Programming basics
-
Building Kernel modules
-
Lab: “Hello world” module
-
Module utilities
-
Kernel log, printk
-
Module parameters
-
Lab: “Hello world” module with parameters
-
Kernel symbols
-
Device System Calls
-
Working with User Space memory
-
Implementing a /proc reader/writer
-
Lab: Module with /proc interface
6. Kernel Space Considerations
-
Endianess
-
Floating point
-
Execution contexts
7. Synchronicity
-
Sleeping, wait queues
-
Locking (semaphores, mutex, spinlocks)
-
Atomic operations
8. Kernel Memory Management
-
Virtual memory overview
-
Physical vs. Virtual memory, on-demand paging
-
kmalloc /kfree / vmalloc / vfree
-
Allocating pages
-
SLAB/SLUB/SLOB Allocators
9. Interrupts
-
Interrupt Control
-
IRQ Flags
-
Interrupt Handling
-
Top and Bottom Halves
-
SoftIRQs, Work Queues and TaskLets
10. Device Drivers
-
Types of device drivers
-
Device files, major and minor numbers
-
Device numbers allocation
-
Creating device files
-
Character Device Drivers
-
Registering a character device
-
File operations
-
Lab: Implementing a character device
-
An introduction to block device drivers
-
Simple block driver example
11. I/O memory, ports & DMA
-
Using I/O ports
-
Using I/O memory
-
DMA memory constraints
-
Memory address translations
12. Timing
-
Jiffies
-
Timers
-
High-Resolution Timers
13. Networking
-
Linux Networking model
-
The network stack
-
Sk_buff structure & operations
-
Net_device structure
-
Network device registration / unregistration
-
Device initialization
-
Packet transmit path
-
Packet receive path
-
Simple Network device driver example
14. Debugging
-
Kernel Debugging techniques
-
Handling Oops and Panics
15. Summary