LFD420 Linux Kernel Internals und Development

Classroom Schulung | Deutsch | Anspruch

Schulungsdauer: 4 Tage

Ziele

Lernen Sie, für den Linux Kernel zu entwickeln. (Bekommen Sie ein solides Verständnis des Linux-Kernels.) In diesem Seminar werden Sie die Linux-Architektur kennenlernen, sowie die grundlegenden Methoden, um auf dem Kernel zu entwickeln, und wie man effizient mit der Linux Entwickler-Community arbeitet. Wenn Sie daran interessiert sind, den Linux-Kernel kennenzulernen, so ist dies ganz sicher der optimale Kurs zu diesem Thema.

Die Lernziele im Überblick:

  • KennenlernenLinux Architektur
  • Funktionsweise des Kernel Algorithmus
  • Hardware und Speicher Management
  • Techniken und Debugging der Modularisierung
  • Wie man von der Kernel Developer Community profitiert
  • Und vieles mehr.

Die vermittelten Schulungsinhalte gelten für alle großen Linux-Distributionen.

Zielgruppe

  • Entwickler

Voraussetzungen

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

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

Ziele

Lernen Sie, für den Linux Kernel zu entwickeln. (Bekommen Sie ein solides Verständnis des Linux-Kernels.) In diesem Seminar werden Sie die Linux-Architektur kennenlernen, sowie die grundlegenden Methoden, um auf dem Kernel zu entwickeln, und wie man effizient mit der Linux Entwickler-Community arbeitet. Wenn Sie daran interessiert sind, den Linux-Kernel kennenzulernen, so ist dies ganz sicher der optimale Kurs zu diesem Thema.

Die Lernziele im Überblick:

  • KennenlernenLinux Architektur
  • Funktionsweise des Kernel Algorithmus
  • Hardware und Speicher Management
  • Techniken und Debugging der Modularisierung
  • Wie man von der Kernel Developer Community profitiert
  • Und vieles mehr.

Die vermittelten Schulungsinhalte gelten für alle großen Linux-Distributionen.

Zielgruppe

  • Entwickler

Voraussetzungen

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

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

Tags

Diese Seite weiterempfehlen