Vielen Dank für die Zusendung Ihrer Anfrage! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Vielen Dank, dass Sie Ihre Buchung abgeschickt haben! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Schulungsübersicht
Einführung
- kurze Geschichte von GNU/Linux
- Lizenzierung
- Kernel-Versionierung
- Veröffentlichungszyklus
- Kernel-Verzweigungen (Trees)
- Mainline-Kernel
- Kernel versus Benutzerraum
- Mechanismus versus Richtlinie
- Alternativen für Kernel-Treiber
- RTOS versus Linux
Speicherverwaltung
- Virtueller Speicher versus physischer Speicher
- Speicherzuweisung im Kernel
- Seiten (Pages)
- Zonen
- API
- Slab-Allokator
Kernel-Patches
- Lebenszyklus
- git
- Kernel-Quellcode
- Erstellen eines Patches
- patch-Prüfung
- Beheben von Fehlern im Patch
- Ausliefern eines Patches
- überprüfter Code
Kernel-Module
- Herunterladen der Kernel-Quelldateien
- Konfigurieren/Erstellen/Installieren
- Gerätetreiber (statisch verlinkt, zur Laufzeit geladen)
- init/exit
- Lizenzierung
- EXPORT_SYMBOL GPL
- Makefile für Module außerhalb des Baums
- module-init-tools
- Module im Kernel-Baum
- Kconfig
- Übergabe von Parametern
- sparse (statische Analyse-Tool)
Zeichenorientierte Treiber (Char Drivers)
- Architektur
- Schnittstelle zwischen Benutzer- und Kernelraum
- E/I-Subsystem (I/O-Subsystem)
- VFS (Virtuelles Dateisystem)
- sysfs (Geräte, Busse, Treiber, Klassen)
- kobject/ktype/kset
- Linux-Kernel-Treibermodell
- Gerätedateien
-
Zeichenorientierter Treiber
- Initialisierung
- Registrierung
- open, release
- cdev, cdev_add, cdev_del,...
- Major- und Minor-Nummern
- udev, udevmonitor, udevadm
Erweiterte Operationen für Zeichenorientierte Treiber
- ioctl
- unlocked ioctl
- compat ioctl
- API im Benutzerraum
- API im Kernelraum
- Lebenszyklus von Prozessen
- Schlafen/Blockieren
- Schlafen/Aufwachen
- Warteschlangen (Wait Queues)
- Thundering Herd Problem
- poll/select
Fehlersuche im Kernel
- Fehlersuche (Debugging)
-
Fehlersuche im Kernel
- Binäre Suche mit git
- Debug-Unterstützung im Kernel
- printk, syslogd, klogd, Loglevel, Ratenbegrenzung, Debug-Level, selektive Subsysteme
- Debugging durch Abfragen von debugfs
- Oops-Debugging, Auslösen eines Oops
- Magic SysRq-Taste
- kgdb/kdb
- JTAG
Tracing (Ereignisverfolgung)
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- trace-cmd/kernelshark
- perf
- LTTng
Unterbrechungen (Interrupts)
- Interrupts versus Polling
- Interrupt
- Programmabschnitte
- ReEntrancy (Wiedereintrittsfähigkeit)
- Ereignisse (Events)
- Interrupt-Handler
- Shared Interrupt Handler (geteilter Interrupt-Handler)
- Interrupt-Fluss
- Interrupt-Steuerung
Verschieben von Arbeiten (Deferring Work)
- Top/Bottom Halves
- Softirqs
- Tasklets
- Work Queues
- Threaded Interrupts
Nebenläufigkeit (Concurrency)
- Kritischer Bereich/Abschnitt
- atomare Operationen
- Wettlaufsituation (Race Condition)
- Synchronisation
- Sperren (Locking)
- Lösungsmöglichkeiten für Sperren
- Deadlock
- Contention (Wettbewerb um Ressourcen)
- Was soll gesperrt werden?
-
Was kann verwendet werden?
- atomare Operationen
- Spinlocks
- Reader-Writer-Spinlocks
- Semaphore
- Binary Semaphore
- Mutex
- Reader-Writer-Semaphore
- Completion-Variablen
- Sequential Locks
- Deaktivieren der Unterbrechung (Disable Preemption)
- Ordnung und Barriers
Zeit
- HZ
- Jiffies
- Große/kleine Verzögerungen
- Kernel-Timer
Hardware-E/I
- I/O-Ports
- I/O-Speicher
- Wie geht man mit Seiteneffekten beim Zugriff auf Register um?
Kommunikation zwischen Benutzer- und Kernelraum
- put(get)_user()
- copy to(from)_user()
- Kernel I/O
- Memory Mapping
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilität
- Wortgröße (word size)
- Opaque Typen
- signed/unsigned char
- Datenausrichtung (Data Alignment)
- integrale Promotion
- Code-Wiederverwendung
- Endianess (Byte-Reihenfolge)
- System-Takt
- Seitengröße
- Anweisungsreihenfolge
- SMP/Preemption/High Memory
Soweit nicht anders angegeben, unterliegen Inhalt und dieser Kursplan der Lizenz Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-NC-SA 4.0).
Voraussetzungen
- Grundlegende Kenntnisse im Umgang mit einem GNU/Linux-System als Endbenutzer
- Grundlegende Vertrautheit mit einer Kommandozeilen-Shell
- Grundlegende Kenntnisse in der Entwicklung von Benutzerraum-Anwendungen
- Mittelgute C-Programmierkenntnisse
- Sollten vorab an der Schulung Embedded GNU/Linux Systems Architecture teilgenommen haben (dringend empfohlen!) und/oder die dort behandelten Themen gut verstehen
35 Stunden
Erfahrungsberichte (3)
Alles ist in Ordnung.
Adrian Rybka - SEOyon
Kurs - Flutter Development Bootcamp with Dart
Maschinelle Übersetzung
Sehr nützliche zusätzliche Informationen
Grzegorz - Comp S.A.
Kurs - BLoC Pattern
Maschinelle Übersetzung
Sein Wissen und seine Geduld.
Chrisna - Agricatural Research Council
Kurs - Ionic 4 and Angular for Developers
Maschinelle Übersetzung