Dieser Kurs zeigt Kernel-Interna und Linux-Gerätetreiber und wo man weiterführende Themen findet.
Ziele des Kurses
Wir behandeln die Grundlagen, die für das Schreiben von Upstream-Linux-Gerätetreibern erforderlich sind, wozu auch einige Einblicke in die Kernel-Interna gehören. Anleitungen, Theorie und praktische Übungen ermöglichen es Ihnen, von Anfang an mit der Community zu interagieren. Nach erfolgreichem Abschluss dieses Kurses sollten Sie wissen, wo Sie die notwendigen Ressourcen finden, um Ihre eigenen Linux-Gerätetreiber zu schreiben und zu warten.
Beschreibung
In diesem fünftägigen Kurs werden die Grundlagen der Linux-Kernel-Interna und der Gerätetreiberentwicklung anhand von praktischen Übungen in Verbindung mit theoretischen Erläuterungen vermittelt. Die praktischen Übungen werden mit freier und quelloffener Software wie dem Yocto Project® Software Development Kit (SDK) auf einem Zielboard (z. B. i.mx8) durchgeführt. Die Hardware kann auf Wunsch erworben werden und wird Ihnen zugeschickt. So können Sie auch nach dem Workshop in Ihrem Unternehmen mit den Kursunterlagen arbeiten. Die Schulung ist so aufgebaut, dass Sie sich schnell in die Materie einarbeiten können. Wir vermitteln die Prozesse, Konzepte und Befehle, die zum Schreiben von Linux-Gerätetreibern erforderlich sind, durch eine Kombination aus Theorie und praktischen Übungen. Lernen Sie von einem erfahrenen Trainer und nehmen Sie das Wissen und die Fähigkeiten mit nach Hause, um es effektiv in Ihrem eigenen Embedded-Entwicklungsprojekt anzuwenden.
Voraussetzungen
- Grundlegende Vertrautheit mit der Verwendung eines Linux-Systems (z. B. Ubuntu) als Endbenutzer im Benutzerbereich
- Grundlegende Vertrautheit mit einer Befehlszeilen-Shell
- Grundkenntnisse des Linux-Benutzerraums und der Anwendungsentwicklung
- Fortgeschrittene C-Programmierkenntnisse
- Sie sollten "Embedded Linux - From System Architecture to Real-Time (5 Tage)" oder "Introduction to Embedded Linux in Theory and Practice - a Crash Course (3 Tage)" besucht haben (dringend empfohlen!)
- ...es sei denn, Sie sind bereits mit dem in diesen Kursen behandelten Stoff vertraut.
- Um an diesem Kurs teilnehmen zu können, sollten Sie über Erfahrung mit Embedded Linux verfügen (Erstellung des Kernels, des User-Space und des Root-Dateisystems sowie die Verwendung der entsprechenden Tools).
- Die oben genannten Veranstaltungen können vor Ort oder online durchgeführt werden. Gerne können Sie hier nach Terminen und Preisen fragen.
Kurs-Fahrplan

Wer sollte teilnehmen?
Personen, die sich für die Entwicklung oder Bewertung von (Embedded-)Linux-Gerätetreibern interessieren oder damit betraut sind. Der Workshop richtet sich an Führungskräfte, Softwareentwickler, Systemingenieure, Tester, Administratoren, Ingenieure und andere Interessierte im Bereich (Embedded-)Linux-Gerätetreiber.
Gliederung des Kurses
Tag 1
Einführung
- Eine kurze Geschichte von Linux | Lizenzierung | Kernel-Versionierung | Release-Zyklus | Kernel-Bäume | Mainline | Kernel-Space im Vergleich zu User-Space | Unterschied zwischen Mechanismus und Politik | Kernel-Treiber-Alternativen | Real-Time-Operating-Systems (RTOS) im Gegensatz zu Linux
Speicherverwaltung
- virtueller Speicher versus physischer Speicher | Speicherzuweisung im Kernel | pages | zones | API | slab
Kernel-Patch
- Patch-Lebenszyklus | git | Kernel-Quellcode | Patch erstellen | Patch prüfen | Fix-Patch | den Patch versenden | geprüften Quellcode (git)
Tag 2
Kernel-Module
- Kernel-Quellcode herunterladen | Kernel konfigurieren | Kernel erstellen | Kernel installieren | Kernel-Modul (statisch verknüpft | zur Laufzeit geladen) | __init/__exit | Lizenzierung | tainted Modul/Kernel | EXPORT_SYMBOL | out of tree.ko makefile | module-init-tools | setzen Sie das Modul in den kernel tree | Kconfig | Parameterübergabe | sparse
Charakter-Treiber
- Architektur | Benutzer/Kernel-Schnittstelle | E/A-Teilsystem | virtuelles Dateisystem (VFS) | sysfs (Geräte | Bus | Fahrer | Klassen) | kobject | ktype | kset | Linux-Kernel-Treibermodell | Gerätedateien
- Character Treiber
- Initialisierung des Treibers | Registrierung von
Character Driver| Fahreröffnung | Treiber-Freigabe | cdev | cdev_add | cdev_del | ... | major/minor Zahlen | udev | udevmonitor | udevadm
- Initialisierung des Treibers | Registrierung von
Tag 3
Character Driver Funktionen (fortgeschritten)
- ioctl | unlocked_ioctl| compat_ioctl| User-Space-API | Kernel-Space-API | Prozesslebenszyklus | Sleeping/Blocking | Sleeping/Waking up | Wait-Queue | Thundering Herd |poll/select
- Fehler | Fehlersuche | Fehlersuche im Kernel | binäre Suche mit git | Debug-Unterstützung durch den Kernel | printk | syslogd | klogd | Loglevels | Ratenbegrenzung |
debug levels| Selektive Teilsysteme debuggen | Fehlersuche durch Abfragen | debugfs | oops Fehlersuche | programmgesteuertes Durchsetzen einer oops | MagicSysRqKey | kgdb/kdb | JTAG (optional)
Tag 4
Kernel Profiling/Tracing
- gcov|lcov|oprofile (veraltet und ersetzt durch Perf.) |ftrace
- nop-Tracer | Funktion „Tracer“ |
sched_switchTracer (Anzeigeprogramm) |function_graphTracer | dynamischer Tracer
- nop-Tracer | Funktion „Tracer“ |
- Perf.| LTTng | Kernel Probes
- Kprobes | JProbes | KretProbes (teilweise veraltet)
Interrupts
- Interrupts statt Abfrage | Interrupt | Programmabschnitte | Reentrancy | Ereignisse | Interrupt-Handler | gemeinsamer Interrupt-Handler | Interrupt-Ablauf | Interrupt-Steuerung
Arbeit aufschieben
top/bottom halves| Softirqs | Tasklets |Workqueues|Threaded interrupts
Tag 5
Gleichzeitigkeit
- kritischer Bereich/Abschnitt | atomar | Race Condition | Synchronisierung | Locking | Locking-Lösungen | Deadlock | Contention | Was muss gesperrt werden?
- atomare Operationen | Spinlocks | Leser-Schreiber-Spinlocks | Semaphor | binärer Semaphor | Mutex | Leser-Schreiber-Semaphor |
completion variables|sequential locks|disablePreemption| sequentielle Reihenfolge und Hardware/Softwarebarriers
Zeit
- HZ | Jiffies | große/kleine Verzögerungen | Kernel-Timer | hochauflösende Timer
Hardware-E/A
- E/A-Ports | E/A-Speicher | Wie geht man mit den Nebenwirkungen des Zugriffs auf Register um?
Benutzer-Kernel-Kommunikation
- put(get)_user() | copy_to(from)_user() | Kernel I/O | memory mapping | procfs | sysfs | debugfs | relayfs | netlink | ioctl
Tragbarkeit
- Wortgröße |
opaque data types| signed/unsigned char | Datenausrichtung (Auffüllen) | integral promotion | Code-Wiederverwendung | Endianität | Systemtick | Seitengröße | In welcher Reihenfolge werden Softwarebefehle ausgeführt? | Symmetrische Mehrfachverarbeitung (SMP) | Preemption | High Memory
Kursbroschüre (PDF)
- "Embedded Linux Kernel Internals and Device Drivers (5 Tage)"
Verwandte Kurse
- "Embedded Linux - Von der Systemarchitektur bis zur Echtzeit (5 Tage)"
- "Auffrischung zu Embedded Linux & Einführung in das Yocto Projekt (5 Tage)"
- "Das Yocto-Projekt - Ein gründlicher Überblick (4 Tage)"
- "Einführung in Embedded Linux & Real-Time, Vogelperspektive des Yocto-Projekts (4 Tage)"
- "Einführung in Embedded Linux in Theorie und Praxis - ein Crashkurs (3 Tage)"
- "(Embedded) Linux-Fehlerbehebung (3 Tage)"
- "FreeRTOS in Theorie und Praxis (3 Tage)"