Schulungsübersicht
Einführung
- kurze Geschichte von GNU/Linux
- Lizenzierung
- Kernel-Versionierung
- Veröffentlichungszyklus
- Kernel-Bäume
- Mainline
- Kernel vs. Nutzerraum
- Mechanismus vs. Richtlinie
- Alternativen zu Kernel-Modulen
- RTOS vs. Linux
Speicherverwaltung
- Virtueller Speicher vs. physischer Speicher
- Speicallokation im Kernel
- Seiten
- Zonen
- API
- Slab-Allokation
Kernel-Patch
- Lebenszyklus
- Git
- Kernel-Quellcode
- Patch erstellen
- Patch überprüfen
- Patch beheben
- Patch senden
- überprüfter Code
Kernel-Module
- Kernel-Quellcode holen
- Konfigurieren/Bauen/Installieren
- Gerätebetriebssysteme (statisch verknüpft, zur Laufzeit geladen)
- Initialisierung/Deinitialisierung
- Lizenzierung
- EXPORT_SYMBOL_GPL
- Out-of-tree Makefile
- Module-Init-Tools
- Modul im Kernel-Baum
- Kconfig
- Parameterübergabe
- Sparse
Char-Drivers
- Architektur
- Nutzer-/Kernel-Schnittstelle
- I/O-Subsystem
- VFS
- sysfs (Geräte, Busse, Treiber, Klassen)
- kobject/ktype/kset
- Linux-Kernel-Treibermodell
- Geräte-Dateien
-
Char-Driver
- Initialisierung
- Registrierung
- Öffnen, Freigeben
- cdev, cdev add, cdev del,...
- Haupt-/Nebenzahlen
- udev, udevmonitor, udevadm
Erweiterte Char-Device-Vorgänge
- ioctl
- unlocked ioctl
- compat ioctl
- Nutzerraum-API
- Kernelraum-API
- Prozesslebenszyklus
- Warten/Blockieren
- Schlafen/Aufwachen
- Warteschlange
- Stampede-Effekt
- poll/select
Kernel-Debugging
- Debuggen
-
Kernel-Debugging
- binäre Suche mit Git
- Debug-Support vom Kernel
- printk syslogd, klogd, Loglevels, Rate-Limiting, Debug-Level, selektive Subsystem-Debugging
- Debuggen durch Abfrage von debugfs
- OOPs-Debugging, OOPs-Auslösen
- Magic SysRq Key
- kgdb/kdb
- JTAG
Tracing
- gcov
- lcov
- oprofile
-
ftrace
- nop-Tracer
- Funktionstracer
- Sched-Switch-Tracer
- Funktionsgraphentracer
- Dynamischer Tracer
- trace-cmd/kernelshark
- perf
- LTTng
Interrupts
- Interrupts vs. Polling
- Interrupt
- Programmschritte
- Wiederholbarkeit
- Ereignisse
- Interrupt-Handler
- geteilte Interrupt-Handler
- Interruptfluss
- Interrupt-Steuerung
Aufgabenverteilung
- Top/Bottom Halves
- Softirqs
- Tasklets
- Work Queues
- Threaded Interrupts
Konkurrenz
- Kritische Region/Sektion
- Atomare Vorgänge
- Rennenbedingung
- Synchronisierung
- Verriegelung
- Lösungen für Verriegelungen
- Deadlock
- Konkurrenz
- Was soll verriegelt werden?
-
Was kann verwendet werden?
- Atomare Vorgänge
- Spinlocks
- Reader-Writer-Spinlocks
- Semaphore
- Binäre Semaphore
- Mutexes
- Reader-Writer-Semaphore
- Vollendungsvariablen
- Sequenzielle Verriegelungen
- Präemption deaktivieren
- Anordnung und Barrieren
Zeit
- HZ
- Jiffies
- große/kleine Verzögerungen
- Kernel-Timer
Hardware I/O
- I/O-Ports
- I/O-Speicher
- Wie man Nebeneffekte beim Zugriff auf Register vermeidet?
Nutzer-Kernel-Kommunikation
- put(get)_user()
- copy to(from)_user()
- Kernel I/O
- Speicherabbildung
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilität
- Wortgröße
- opake Typen
- signierte/unsigned char
- Datenausrichtung
- Integralpromotion
- Code-Weiterverwendung
- Endianess
- Systemtick
- Seitengröße
- Anweisungsreihenfolge
- SMP/Präemption/High Memory
Außer anders angegeben, sind Inhalt und Kursübersicht unter der Lizenz Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-NC-SA 4.0). lizenziert.
Voraussetzungen
- Grundkenntnisse in der Benutzung eines GNU/Linux-Systems
- Grundkenntnisse in der Verwendung einer Kommandozeilenshell
- Grundkenntnisse im Entwickeln von Nutzerraum-/Anwendungen
- Fortgeschrittene Kenntnisse in C-Programmierung
- Sollten die Schulung Embedded GNU/Linux Systems Architecture besucht haben (stark empfohlen!) und/oder ein gutes Verständnis der dort behandelten Themen haben
Erfahrungsberichte (5)
Sehr nützliche zusätzliche Informationen
Grzegorz - Comp S.A.
Kurs - BLoC Pattern
Maschinelle Übersetzung
Edward is an awesome facilitator
Zibusiso Ncube - Agricatural Research Council
Kurs - Ionic 4 and Angular for Developers
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Kurs - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Kurs - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic