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, 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

Linux Datei-System Tree Layout

  • OPreliminaries

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