Edocti
Fortgeschrittene technische Ausbildung für den modernen Softwareingenieur
Edocti Training

Linux-Gerätetreiber – Grundlagen

Fortgeschritten
21 h
4.8 (231 Bewertungen)
Linux-Gerätetreiber – Grundlagen

Linux-Gerätetreiber – Grundlagen: Schritt für Schritt Linux‑Kernel‑Treiber schreiben und debuggen.

Hands‑on mit Modulen, Character Devices, Kernel‑Logs und APIs.

Speicherverwaltung, Interrupts und Synchronisation an realen Beispielen erkunden.

Praktische Erfahrung sammeln durch Labs (~70%), in denen Treiber gebaut und getestet werden.

Nutzen: Kernel‑User‑Grenzen und Best Practices der Treiberentwicklung verstehen.

Für wen: konzipiert für Personen mit C‑/Linux‑Grundlagen, die Kernel‑Skills wollen.

Am Ende baust und debuggst du funktionierende Treiber mit Sicherheit.

Curriculum

Einführung
  • Kernel versions
  • Kernel sources und die Nutzung von git
  • Rolling your own kernel
  • Plattformen
  • Arten von Device Drivers
  • Elemente eines Embedded-Linux-Projekts (Überblick)
Device drivers
  • Gerätetypen; mechanism vs. policy; Vermeidung von binary blobs
  • Wie Applikationen Device Drivers verwenden
  • Der System-Call-Mechanismus
  • Error numbers
  • printk()
  • devres: managed device resources
  • Module und Device Drivers: module_driver()-Macros, Modules und Hot Plug
Speicherverwaltung und -allokation
  • Virtueller und physischer Speicher
  • Memory zones
  • Page tables
  • kmalloc(), __get_free_pages(), vmalloc()
  • Slabs und Cache-Allokationen
Character devices
  • Device nodes
  • Major und Minor Numbers; Reservierung
  • Zugriff auf den Device Node
  • Registrierung des Geräts (registering the device)
  • udev
  • dev_printk() und verwandte Funktionen
  • Struktur file_operations
  • Driver Entry Points
  • Die Strukturen file und inode
Transfer zwischen User- und Kernel-Space
  • User-Space vs. Kernel-Space; System Calls; Process Context
  • Linked List und weitere Datenstrukturen
  • put(get)_user() und copy_to(from)_user()
  • Direkter Transfer: Kernel I/O und Memory Mapping
  • User-Space-Funktionen für mmap()
  • Driver Entry Point für mmap()
Interrupts und Exceptions
  • Interrupts und Exceptions
  • Asynchronous interrupts
  • MSI
  • Interrupts aktivieren/deaktivieren
  • Was man während eines Interrupts nicht tun sollte
  • IRQ-Datenstrukturen
  • Einen Interrupt Handler installieren
Zeitmessungen
  • Arten von Messungen
  • Jiffies
  • Aktuelle Zeit ermitteln
  • Clock Sources
  • Programmable Interval Timer
  • Time Stamp Counter
  • HPET
  • Tickless Kernels
Kernel-Timer
  • Delays einfügen
  • Low Resolution Timer
  • High Resolution Timer
ioctls
  • Driver Entry Points für ioctls
  • Locked und Lockless ioctls
  • ioctls definieren
Unified Device Model und sysfs
  • Grundlegende Datenstrukturen
  • Reale Geräte
  • sysfs
  • kset- und kobject-Beispiele
Sleeping und Wait Queues
  • In den Schlafmodus gehen und Aufwachen
  • Exclusive Sleeping
  • Polling
Interrupt Handling
  • Top und Bottom Halves
  • Deferrable Functions und Softirqs
  • Tasklets
  • Work Queues
  • Threaded Interrupt Handlers
  • Interrupt Handling im User-Space
Hardware I/O
  • Buses und Ports
  • Memory Barriers
  • I/O-Ports registrieren
  • Zugriff auf I/O-Register und I/O-Speicher
  • Zugriff aus dem User-Space: ioperm(), iopl(), /dev/port
Applikation (falls Zeit bleibt)
  • Implementierung eines LED-Treibers
  • Implementierung eines Temperatursensor-Treibers

Kursablauf

  • Part 1: 09:00–10:30
  • Break: 10:30–10:45
  • Part 2: 10:45–12:15
  • Lunch break: 12:15–13:15
  • Part 3: 13:15–15:15
  • Break: 15:15–15:30
  • Part 4: 15:30–17:30