Linux-Kernel-Treiber

In diesem Seminar geht es um die Interna des Linux-Kernels und die Entwicklung von Treibern.
Vorausgesetzt werden gute Kenntnisse in der Programmiersprache C sowie sicherer Umgang in der Linux-Shell. Die wichtigsten Funktionen der Linux-API (open, read, write, poll, mmap) sollten ebenso bekannt sein.
Die Kursdauer beträgt 4 Tage.

Im Verlauf des Kurses wird als Übung ein Kernel-Treiber erstellt. Dieser enthält die im Seminar gelernten Mechanismen. Dadurch ist gewährleistet, daß das Gelernte auch im Projekt umgesetzt werden kann.

Agenda

Aufbau des Linux-Kernels

Linux-Syscall-Interface
Virtuelles File System (VFS)
Klassifizierung von Gerätetreibern
Kernel-Module

Character Device Treiber

Treiberschnittstelle
Anmeldung beim VFS
Treiberfunktionen (open, read, write, ioctl, close)
sysfs-Unterstützung

Hardware-Zugriff

Flattened-Device-Tree
IO-Memory und IO-Ports
GPIO's (legacy und deskriptorbasiert)
I2C-Bus
SPI-Bus
Sensoren mit Industrial-IO anbinden

Scheduling und Interrupts

Linux-Scheduling
Interrupts und SoftIRQ's
hrtimer-Framework
Preemption- und Interrupt-Sperren

Synchronisation

Waitqueue und poll
Semaphore, Mutex
Completion
Spin-Lock, RW-Lock
Sequence-Lock
Atomare Variablen, kfifo
Ringspeicher
Read-Copy-Update (RCU)
Analyse von Locking-Problemen (lockdep)

Speicherverwaltung

Buddy-System, Migrationstypen
Slab-Allokator, kmalloc
vmalloc
Memory-Mapping mit mmap

Debugging und Tracing

Kernel-Debugger kgdb
Tracing-Framework ftrace
Tracing-Events, trace_printk
kprobes