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