Seminarinformationen

Seminar - Ziel

In diesem 4-tägigen Seminar „LFD420 Linux Kernel Internals und Development“ erwerben Sie ein tiefgehendes Verständnis für die Entwicklung im Linux-Kernel. Sie lernen die Architektur von Linux kennen, machen sich mit grundlegenden Entwicklungsmethoden im Kernel vertraut und erfahren, wie Sie effizient mit der Linux-Entwickler-Community zusammenarbeiten können.

Das Seminar bietet umfassende Einblicke in Kernel-Algorithmen, Speicher- und Hardwaremanagement sowie in die internen Abläufe des Systems. Sie erlernen Techniken für das Debugging, die Erstellung von Kernel-Modulen und die Integration eigener Entwicklungen. Die vermittelten Inhalte sind praxisnah und auf alle gängigen Linux-Distributionen übertragbar. Dieses Seminar richtet sich an alle, die sich intensiv mit dem Linux-Kernel auseinandersetzen und fundierte Kenntnisse in der Kernel-Entwicklung aufbauen möchten.

Teilnehmer - Zielgruppe

  • Entwickler

Kurs - Voraussetzungen

Für eine optimale Teilnahme am Kurs empfehlen wir folgende Vorkenntnisse:

  • Sicherer Umgang mit grundlegenden Linux-Dienstprogramme und Texteditoren
  • Solide Kenntnisse in der Programmiersprache C

Seminardauer

  • 4 Tage
  • 09:00 Uhr bis 17:00 Uhr

Schulungsunterlagen

  • nach Absprache

Seminar-Inhalt / Agenda

Kernel Architektur I

  • UNIX und Linux
  • Monolithische und Mikro-Kernel
  • Objekt-orientierte Methoden
  • Kernel-Hauptaufgaben
  • Benutzerbereich und Kernelbereich
  • Kernel-Modus Linux

Vorschau auf die Kernelprogrammierung

  • Error Numbers and Getting Kernel Output
  • Task Structure
  • Memory Allocation
  • Transferring Data between User and Kernel Spaces
  • Linked Lists
  • String to Number Conversions
  • Jiffies

Module

  • Module kompilieren
  • Module vs. Built-in
  • Modul-Dienstprogramme
  • Automatisches Loading/Unloading von Modulen
  • Anzahl der Modulverwendung
  • Modulstruktur
  • Modul-Lizenzierung
  • Exportieren von Symbols
  • Auflösen von Symbols

Kernel Architektur II

  • Prozesse, Threads und Tasks
  • Prozess-Kontext
  • Kernel-Präemption
  • Real Time Preemption Patch
  • Dynamisches Kernel-Patching
  • Laufzeit-Alternativen
  • Portierung auf eine neue Plattform

Kernel-Initialisierung

  • Überblick über die Systeminitialisierung
  • System-Boot
  • Das U-Boot für Embedded Systeme

Kernel-Konfiguration und Zusammenstellung

  • Installieren und Layouten des Kernel-Source
  • Kernel Browsers
  • Kernel-Konfigurationsdateien
  • Kernel-Erstellung und Make-Dateien
  • initrd und initramfs

System Calls

  • Was sind Systemaufrufe?
  • Verfügbare Systemaufrufe
  • Implementierung von Systemaufrufen
  • Einfügen eines neuen Systemaufrufs

Kernel-Stil und generelle Überlegungen

  • Kodierungsstil
  • kernel-doc ** optional
  • Verwendung generischer Kernel-Routinen und -Methoden
  • Erstellung eines Kernel-Patches
  • sparse
  • Verwendung von likely() und unlikely()
  • Portierbare Codes schreiben, CPU, 32/64-Bit, EndiannessSchreiben für SMP
  • Schreiben für Systeme mit hohem Speicherbedarf
  • Enegie-Management
  • Die Sicherheit im Auge behalten
  • Mischen von User- und Kernel-Space-Headern

Race Conditions und Synchronisationsmethoden

  • Parallelität und Synchronisationsmethoden
  • Atomare Vorgänge
  • Bit-Vorgänge
  • Spinsperren
  • Seqlocks
  • Deaktivierung von Preemption
  • Mutexes
  • Semaphoren
  • Vervollständigungsfunktionen
  • Lese-Kopie-Aktualisierung (RCU)
  • Referenz-Zählungen

SMP und Threads

  • SMP-Kernel und Module
  • Prozessor-Affinität
  • CPUSETS
  • SMP-Algorithmen - Scheduling, Locking, etc.
  • Pro-CPU-Variablen

Prozesse

  • Was sind Prozesse?
  • Das Task_Struktur
  • Benutzerprozesse und Threads erzeugen
  • Erzeugen von Kernel-Threads
  • Prozesse und Threads zerstören
  • Ausführung von User-Space-Prozessen aus dem Kernel heraus

Prozesslimits und Potential

  • Prozess-Grenzwerte
  • Kapazitäten

Monitoring und Fehlersuche

  • Debuginfo-Packages
  • Tracing und Profiling
  • sysctl
  • SysRq-Schlüssel
  • oops-Meldungen
  • Kernel-Debugger
  • debugfs

Planung

  • Hauptaufgaben der Terminierung
  • SMP
  • Scheduling-Prioritäten
  • Zeitsteuerung von Systemaufrufen
  • Die Funktion 2.4 schedule()O(1)-Scheduler
  • Zeiterfassung und Prioritäten
  • Lastenausgleich
  • Prioritäts-Inversion und Prioritäts-Vererbung **
  • CFS-Zeitplaner
  • Berechnung von Prioritäten und fairen Zeiten
  • Scheduler-Klassen
  • CFS-Scheduler-Details

Speicheradressierung

  • Virtuelle Speicherverwaltung
  • Systeme mit und ohne MMU und die TLB
  • Speicher-Adressen
  • Hoch und Tiefspeicher
  • Speicherebenen
  • spezielle Geräteknoten
  • NUMA
  • Auslagerung
  • Seiten-Tabellen
  • Seitenstruktur
  • Kernel Samepage Merging (KSM)

Huge Pages

  • Unterstützung umfangreicher Seiten
  • libhugetlbfs
  • Transparente Seiten (Huge Pages)

Speicherverteilung

  • Anforderung und Freigabe von Seiten
  • Buddy System
  • Slabs und Cache-Allokationen
  • Speicher-Pools
  • kmalloc()
  • vmalloc()
  • Frühzeitige Zuweisungen und bootmem()
  • Speicher-Defragmentierung

Prozessadressraum

  • Zuordnung von Anwenderspeicher und Adressraum
  • Seiten sperren
  • Speicherbeschreibungen und -regionen
  • Zugangsrechte
  • Zuweisung und Freigabe von Speicherregionen
  • Seitenfehler

Disk Caches und Swapping

  • Caches
  • Basiswissen zum Seiten-Cache
  • Was ist Swapping?
  • Auslagerung von Bereichen
  • Ein- und Auslagerung von Seiten
  • Steuerung der Swappiness
  • Der Swap-Cache
  • Umprogrammieren
  • OOM-Killer

Gerätetreiber

  • Gerätetypen
  • Geräteknoten
  • Treiber für Zeichen

Signals

  • Verfügbare Signals
  • Systemaufruf für Signals
  • Sigaction
  • Signals und Threads
  • Die Installation von Signal Handlers durch den Kernel
  • Wie der Kernel Signals sendet
  • Wie der Kernel Signal Handlers aufruft

Weitere Schulungen zu Thema Linux Foundation

LFD459 Kubernetes für App-Entwickler

- u.a. in Nürnberg, Berlin, Stuttgart, München, Köln

In diesem 3-tägigen Seminar „LFD459 Kubernetes für App-Entwickler“ lernen Sie, wie Sie Anwendungen in einem Multi-Node-Cluster containerisieren, hosten, bereitstellen und konfigurieren. Sie beginnen mit einem einfachen Python-Skript, definieren Anwendungsressourcen und ...

LFS458 Kubernetes Administration

- u.a. in Nürnberg, Berlin, Stuttgart, München, Köln

In diesem 4-tägigen Seminar „LFS458 Kubernetes Administration“ erhalten Sie fundiertes Wissen zu den grundlegenden Konzepten und herstellerunabhängigen Werkzeugen für den Aufbau und die Verwaltung von Kubernetes-Clustern in Produktionsumgebungen. Sie setzen sich mit ...

LFD301 Einführung in Linux, Open-Source-Entwicklung und GIT

- u.a. in Stuttgart, Leipzig, München, Düsseldorf, Marburg

In dieser 4-tägigen Schulung "LFD301 Einführung in Linux, Open-Source-Entwicklung und GIT" tauchen Sie tief in die Welt der Linux-Entwicklung ein und erhalten grundlegende Fähigkeiten, um effektiv mit Linux zu arbeiten. Vor dem Hintergrund des unaufhaltsamen ...

LFD473 PyTorch in Practice: An Applications-First Approach

- u.a. in Wien, Essen, Heidelberg, Mannheim, Jena

In dieser 4-tägigen Schulung "LFD473 PyTorch in Practice: An Applications-First Approach" liegt der Fokus darauf Ihnen praxisorientierte Kenntnisse zu PyTorch zu vermitteln. Die Agenda erstreckt sich über verschiedene Anwendungsbereiche und beginnt mit einer ...