IT-Trainer Jobs und Stellenangebote: LFD430 Entwicklung von Gerätetreibern für Linux-Systeme
Seminardauer: 4 Tage
Trainer gesucht
IT-Trainer Jobs und Stellenangebote: LFD430 Entwicklung von Gerätetreibern für Linux-Systeme, Betriebssystem, Linux Foundation, Netzwerk- und System-Administrator.
Anmelden / Registrieren als Trainer
Agenda
Einführungen
- Linux Distributionen
- Plattformen
- Vorbereitung Ihres Systems
- Verwendung und Herunterladen einer virtuellen Maschine
Preliminaries
- Verfahren
- Kernel-Versionen
- Kernel-Quellen und Verwendung von git
- Eigenen Kernel erstellen
- Hardware
- Staging tree
Wie man in OSS-Projekten arbeitet
- Überblick über die korrekte Durchführung von Übertragungen.
- Sicherheit und Qualität durch die Nähe zur Mainline
- Projekt-DNA erforschen und verstehen
- Das Anliegen erkennen und verfolgen
- Bestimmung der Entwickler und deren Arbeitsabläufe und Methoden
- Frühzeitige Informationen einholen und freier arbeiten
- Tragen Sie inkrementelle Bits bei und meiden Sie große Code-Dumps.
- Kein Platz für Ego: Denke nicht engstirnig.
- Seien Sie geduldig, entwickeln Sie langfristige Partnerschaften und seien Sie hilfreich
Gerätetreiber
- Gerätetypen
- Mechanismen vs. Richtlinien
- Vermeidung von Binary Blobs
- Energie-Management
- Wie Applikationen Gerätetreiber verwenden
- Durchlaufen eines Systemaufrufs Zugriff auf ein Gerät
- Fehlermeldungen
- printk()
- Geräte: Verwaltungs-Ressourcen für Geräte
Modul- und Gerätetreiber
- Die module_driver()-Makros
- Module und Hot-Plug
Speichermanagement und Zuweisung
- Virtual- und physikalischer Speicher
- Speicherbereiche
- Seiten-Tabellen
- kmalloc()
- __get_free_pages()
- vmalloc()
Character Devices
- Geräte-Knotenpunkte
- Major- und Minor-Nummern
- Reservierung von Major-/Minor-Nummern
- Zugriff auf den Geräte-Knotenpunkt
- Registrierung des Geräts
- udev
- dev_printk() und zugehörige
- file_operations-Struktur
- Treiber-Einstiegspunkte
- Die Datei- und Inode-Strukturen
- Diverse Charakter-Treiber
Kernel Funktionen
- Bestandteile des Kernels
- Anwenderbereich vs. Kernel-Bereich
- Was sind Systemaufrufe?
- Verfügbare Systemaufrufe
- Zeitplanungsalgorithmen und Task-Strukturen
- Prozess-Kontext
Übertragung von Benutzer- und Kernelbereich
- Übertragung zwischen den Bereichen
- put(get)_user() und copy_to(from)_user()
- Direkte Übertragung: Kernel-E/A und Speicher-Mapping
- Kernel-E/A
- Zuordnung von Benutzerseiten
- Speicher-Zuordnung (Memory Mapping)
- Anwender-Funktionen für mmap()
- Treibereinstiegspunkt für mmap()
- Dateizugriff aus dem Kernel
Störungen und Ausnahmen
- Was sind Interrupts und Exceptions?
- Ausnahmen
- Asynchrone Interrupts
- MSI
- Aktivieren/Deaktivieren von Interrupts
- Was Sie zur Interrupt-Zeit nicht tun können
- IRQ-Daten-Strukturen
- Installieren eines Interrupt-Handlers
Zeitmessung
- Verschiedene Arten von Zeitmessungen
- Jiffies
- Bestimmung der aktuellen Zeit
- Zeitquellen
- Real Time Clock
- Programmierbarer Intervall-Timer
- Zeitstempelzähler
- HPET
Kernel-Timer
- Verzögerungen einfügen
- Was sind Kernel-Timer?
- Timer-Funktionen mit niedriger Auflösung
- Timer-Implementierung mit niedriger Auflösung
- Timer mit hoher Auflösung
- Einsatz von hochauflösenden Timern
ioctls
- Was sind ioctls?
- Einstiegspunkt des Treibers für ioctls
- Definition von ioctls
Unified Device Model und sysfs
- Einheitliches Geräte-Modell
- Grundlegende Strukturen
- Reale Geräte
- sysfs
- kset- und kobject-Beispiele
Firmware
- Was ist Firmware?
- Laden der Firmware
Sleeping und Wait Queues
- Was sind Queues?
- Sleep und Waking Up
- Sleep Details
- Exclusive Sleeping
- Waking Up Details
- Polling
Störungs-Handling: Verzögerte Funktionen und Benutzer Treiber
- Top and Bottom Halves
- Softirqs
- Tasklets
- Work Queues
- New Work Queue API
- Kernel Threads erstellen
- Threaded Interrupt Handlers
- Interrupt Handling im User-Space
Hardware I/O
- Anschlüsse und Ports
- Speicherbarrieren
- Registrierung von E/A-Ports
- Daten aus E/A-Registern lesen und schreiben
- Zuweisung und Mapping von I/O-Speicher
- Zugriff auf I/O-Speicher
- Benutzerzugriff - ioperm(), iopl(), /dev/port
PCI
- Was ist PCI?
- PCI-Gerätetreiber
- Lokalisierung von PCI-Geräten
- Zugriff auf den Konfigurationsbereich
- Zugriff auf I/O- und Speicherbereiche
- PCI-Express
Plattformtreiber
- Was sind Plattformtreiber?
- Hauptdatenstrukturen
- Registrierung von Plattformgeräten
- Festcodierte Plattformdaten
- Der neue Weg: Gerätestrukturen
Direkter Speicherzugriff (DMA)
- Was ist DMA?
- Direktzugriff (DMA) zum Anwender
- Unterbrechungen und DMA
- DMA-Speicherbeschränkungen
- DMA-Masken
- DMA-API
- DMA-Pools
- Scatter/Gather-Zuordnungen
Netzwerktreiber I: Grundlagen
- Netzwerkschichten und Datenkapselung
- Datenverbindungsebene
- Netzwerk-Gerätetreiber
- Laden/Entladen
- Öffnen und Schließen
Netzwerk-Treiber II: Datenstrukturen
- net_device Struktur
- net_device_ops Struktur
- sk_buff Struktur
- Socket-Buffer-Funktionen
- netdev_printk() und Konsorten
Netzwerktreiber III: Senden und Empfangen
- Senden von Daten und Timeouts
- Empfangen von Daten
- Statistik
Netzwerktreiber IV: Ausgewählte Themen
- Multicasting
- Änderungen im Link-Status
- ioctls
- NAPI und Unterbrechungsunterdrückung
- NAPI-Details
- TSO und TOE
- MII und ethtool
USB-Treiber
- Was ist USB?
- USB-Topologie
- Terminologie
- Endpunkte
- Deskriptoren
- USB-Geräte-Klassen
- USB-Unterstützung in Linux
- Registrierung von USB-Gerätetreibern
- Daten verschieben
Energie-Management
- ACPI und APM
- Zustände der Systemleistung
- Rückruffunktionen
Blocktreiber
- Was sind Blocktreiber?
- Puffern
- Registrieren eines Blocktreibers
- Gendisk-Struktur
- Behandlung von Anfragen