Kontakt aufnehmen

Schulungsübersicht

Einführung

  • kurze Geschichte von GNU/Linux
  • Lizenzierung
  • Kernel-Versionierung
  • Release-Zyklus
  • Kernel-Zweige (Trees)
  • Mainline
  • Kernel vs. Benutzerraum (User Space)
  • Mechanismus vs. Politik
  • Alternativen zu Kernel-Treibern
  • RTOS vs. Linux

Speicherverwaltung

  • Virtueller Speicher vs. physischer Speicher
  • Speicherzuweisung im Kernel
  • Seiten (Pages)
  • Zonen
  • API
  • Slab-Allocator

Kernel-Patches

  • Lebenszyklus
  • git
  • Kernel-Quellcode
  • Patch erstellen
  • Patch prüfen (check patch)
  • Patch korrigieren
  • Patch weiterleiten (ship patch)
  • Geprüfter Code

Kernel-Module

  • Kernel-Quellcode herunterladen
  • Konfigurieren/Bauen/Installieren
  • Gerätetreiber (statisch verlinkt, zur Laufzeit geladen)
  • init/exit
  • Lizenzierung
  • EXPORT_SYMBOL GPL
  • Makefile außerhalb des Kernel-Baums
  • module-init-tools
  • Modul im Kernel-Baum
  • Kconfig
  • Weitergabe von Parametern
  • sparse

Charakter-Treiber (Char Drivers)

  • Architektur
  • Benutzer-Kernel-Schnittstelle
  • I/O-Subsystem
  • VFS (Virtual File System)
  • sysfs (Geräte, Busse, Treiber, Klassen)
  • kobject/ktype/kset
  • Linux-Kernel-Treibermodell
  • Gerätedateien
  • Charakter-Treiber

    • Initialisierung
    • Registrierung
    • open, release
    • cdev, cdev_add, cdev_del, ...
    • Major-/Minor-Nummern
    • udev, udevmonitor, udevadm

Erweiterte Operationen für Charakter-Treiber

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API im Benutzerraum
  • API im Kernelraum
  • Lebenszyklus von Prozessen
  • Schlafmodus/Blockierung
  • Schlafmodus/Aufwachen
  • Wait-Queue (Warteschlange)
  • Thundering Herd Problem
  • poll/select

Kernel-Debugging

  • Debugging
  • Debugging des Kernels

    • Binäre Suche mit git
    • Debug-Unterstützung aus dem Kernel
    • printk syslogd, klogd, Loglevel, Rate Limiting, Debug-Level, selektive Subsysteme debuggen
    • Debugging durch Abfragen von debugfs
    • Oops-Debugging, Oops provozieren
    • Magic SysRq-Taste
    • kgdb/kdb
    • JTAG

Tracing

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupts

  • Interrupts vs. Polling
  • Interrupt
  • Programmausführungsabschnitte
  • Reentrancy (Wiederaufrufbarkeit)
  • Ereignisse
  • Interrupt-Handler
  • Shared Interrupt-Handler
  • Interrupt-Flow
  • Interrupt-Steuerung

Aufgabeverschiebung (Deferring Work)

  • Top-Half/Bottom-Half
  • Softirqs
  • Tasklets
  • Work Queues
  • Threaded Interrupts

Nebenläufigkeit

  • Kritischer Bereich
  • atomar
  • Race Condition
  • Synchronisation
  • Locking
  • Locking-Lösungen
  • Deadlock
  • Contention
  • Was soll gelockt werden?
  • Was kann verwendet werden?

    • atomare Operationen
    • Spinlocks
    • Reader-Writer-Spinlocks
    • Semaphore
    • Binäres Semaphore
    • Mutex
    • Reader-Writer-Semaphore
    • Completion-Variablen
    • Sequenzielle Sperren
    • Vorpriorität deaktivieren
    • Reihenfolge und Barriers

Zeit

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

Hardware-Eingabe und -Ausgabe

  • I/O-Ports
  • I/O-Speicher
  • Wie mit Nebeneffekten beim Zugriff auf Register umgehen?

Kommunikation Benutzer-Kernel

  • put(get)_user()
  • copy to(from)_user()
  • Kernel-I/O
  • Speicherzuordnung (Memory Mapping)
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilität

  • Wortgröße
  • Opaque Typen
  • signed/unsigned char
  • Daten-Ausrichtung (Alignment)
  • Integral Promotion
  • Code-Wiederverwendung
  • Endianness
  • System-Takt
  • Seitengröße
  • Befehlsreihenfolge
  • SMP/Preemption/High Memory

Sofern nicht anders angegeben, sind Inhalte und dieser Kursplan lizenziert unter Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-NC-SA 4.0).

Voraussetzungen

  • Basiskenntnisse in der Nutzung eines GNU/Linux-Systems als Endbenutzer
  • Basiskenntnisse in einem Kommandozeilen-Shell
  • Basiswissen in der Entwicklung von Benutzeroberflächen-Anwendungen
  • Mittelstufe Kenntnisse in der C-Programmierung
  • Es wird dringend empfohlen, vorher die Schulung Embedded GNU/Linux Systems Architecture besucht zu haben und/oder die dort behandelten Themen gut zu verstehen.
 35 Stunden

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (3)

Kommende Kurse

Verwandte Kategorien