Kontakt aufnehmen

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

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (3)

Kommende Kurse

Verwandte Kategorien