Schulungsübersicht

Einführung

  • kurze Geschichte von GNU/Linux
  • Lizenzierung
  • Kernel-Versionierung
  • Release-Zyklus
  • Kernel-Bäume
  • Mainline
  • Kernel vs. Userspace
  • Mechanismus vs. Politik
  • Kernel-Treiber-Alternativen
  • RTOS vs. Linux

Speicher Management

  • Virtueller Speicher vs. physischer Speicher
  • Speicherzuweisung im Kernel
  • Seiten
  • Zonen
  • API
  • Slab

Kernel-Patch

  • Lebenszyklus
  • git
  • Kernel-Quelle
  • Patch erstellen
  • Patch prüfen
  • Patch reparieren
  • Patch ausliefern
  • geprüfter Code

Kernel-Module

  • Kernel-Quellen holen
  • konfigurieren/erstellen/installieren
  • Gerätetreiber (statisch gelinkt, zur Laufzeit geladen)
  • Einleiten/Beenden
  • Lizenzierung
  • SYMBOL GPL EXPORTIEREN
  • makefile außerhalb des Baumes
  • Modul-Init-Tools
  • Modul im Kernelbaum
  • Kconfig
  • Parameterübergabe
  • spärlich

Char-Treiber

  • Architektur
  • Benutzer/Kernel-Schnittstelle
  • E/A-Subsystem
  • VFS
  • sysfs (Geräte, Bus, Treiber, Klassen),
  • kObjekt/ktype/kset
  • Linux-Kernel-Treibermodell
  • Gerätedateien
  • char-Treiber
    • Initialisierung
    • Registrierung
    • öffnen, freigeben
    • cdev, cdev add, cdev del,...
    • Haupt-/Nebennummern
    • udev, udevmonitor, udevadm

Erweiterte Charachter-Treiber-Operationen

  • ioctl
  • entsperrt ioctl
  • compat ioctl
  • Benutzerraum-API
  • Kernelbereich-API
  • Prozess-Lebenszyklus
  • Schlafen/Blockieren
  • Schlafen/Aufwachen
  • Warteschlange
  • donnernde Herde
  • abfragen/auswählen

Kernel-Debugging

  • Fehlerbehebung
  • Fehlersuche
  • Fehlersuche im Kernel
    • Binärsuche mit git
    • Debugging-Unterstützung vom Kernel
    • printk syslogd, klogd, loglevels, Ratenbegrenzung, Debug-Levels, selektive Subsysteme debuggen
    • Debugging durch Abfrage von debugfs
    • Debuggen von Oops, Behauptung von Oops
    • Magischer SysRq-Schlüssel
    • kgdb/kdb
    • JTAG

Rückverfolgung

  • gcov
  • lcov
  • oprofil
  • ftrace
    • nop tracer
    • Funktionstracer
    • Schedule Switch Tracer
    • Funktionsgraphenverfolgung
    • dynamischer Tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Unterbrechungen

  • Interrupts vs. Polling
  • Unterbrechungen
  • Programmabschnitte
  • Wiederholbarkeit
  • Ereignisse
  • Interrupt-Handler
  • gemeinsame Unterbrechungsbehandlungsroutine
  • Unterbrechungsablauf
  • Unterbrechungssteuerung

Arbeit aufschieben

  • obere/untere Hälften
  • softirqs
  • tasklets
  • Arbeitsvorräte
  • Threaded Interrupts

Gleichzeitigkeit

  • kritischer Bereich/Abschnitt
  • atomar
  • Wettlaufbedingung
  • Synchronisierung
  • Sperren
  • Locking-Lösungen
  • Deadlock
  • Konkurrenzkampf
  • Was soll gesperrt werden?
  • Was kann verwendet werden?
    • atomare Operationen
    • Spinlocks
    • Leser-Schreiber-Spinlocks
    • Semaphor
    • Binärer Semaphor
    • Mutex
    • Leser-Schreiber-Semaphor
    • Abschlussvariablen
    • sequentielle Sperren
    • Vorkaufsrecht deaktivieren
    • Ordnung und Barrieren

Zeit

  • HZ
  • Jiffies
  • große/kleine Verzögerungen
  • Kernel-Timer

Hardware-E/A

  • E/A-Anschlüsse
  • E/A-Speicher
  • Wie geht man mit Seiteneffekten beim Zugriff auf Register um?

Benutzer-Kernel Communication

  • put(get)_user()
  • kopieren nach(von)_Benutzer()
  • Kernel-E/A
  • Speicher-Zuordnung
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilität

  • Wortgröße
  • undurchsichtige Typen
  • Zeichen mit/ohne Vorzeichen
  • Datenausrichtung
  • Integralförderung
  • Code-Wiederverwendung
  • Endianess
  • Systemtick
  • Seitengröße
  • Anweisungsreihenfolge
  • SMP/Preemption/hoher Speicher

Wenn nicht anders vermerkt, stehen der Inhalt und diese Kursübersicht unter der Lizenz Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Voraussetzungen

  • Grundlegende Vertrautheit mit der Verwendung eines GNU/Linux-Systems als Endbenutzer
  • Grundlegende Vertrautheit mit einer Kommandozeilen-Shell
  • Grundlegende Kenntnisse im Bereich Benutzeroberfläche/Anwendungsentwicklung
  • Fortgeschrittene C-Programmierkenntnisse
  • Sie sollten bereits an Embedded GNU/Linux Systems Architecture teilgenommen haben (dringend empfohlen!) und/oder ein gutes Verständnis der dort beschriebenen Themen haben.
 35 Stunden

Teilnehmerzahl


Price per participant (excl. VAT)

Erfahrungsberichte (5)

Kommende Kurse

Verwandte Kategorien