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