Linux Kernel Treiber

Architektur des Linux Kernels und Treiber Entwicklung

Wenn die von Linux im Userspace bereitgestellten Mechanismen in Form der System-API nicht ausreichen und höhere Anforderungen hinsichtlich Timing und Reaktionsverhalten gestellt werden oder der Zugriff auf Hardware-Ressourcen notwendig ist, dann gibt es nur eines: In den Linux-Kernel eintauchen und selber Kernel-Treiber erstellen.

Das dazu notwendige Know-How, insbesondere die im Kernel vorhandenen Mechanismen sowie deren Zusammenspiel wird in diesem Kurs vermittelt. Nach Abschluss des Kurses sind Sie in der Lage Kernel-Treiber zu schreiben sowie die vom Kernel angebotenen Mechanismen effektiv einzusetzen.

Die Übungen werden auf einem ARM-basierten Embedded-Board durchgeführt. Entsprechende Boards sowie die Cross-Development-Toolchain werden zur Verfügung gestellt.

Die Übungen werden auf einem ARM-basierten Embedded-Board durchgeführt. Entsprechende Boards sowie die Cross-Development-Toolchain werden während der Schulung zur Verfügung gestellt.

Inhalt der Übung ist die Erstellung eines Linux-Kerneltreibers mit Zugriff auf Hardware, Device-Tree-Einbindung, sysfs-Unterstützung, Memory-Mapping und Synchronisierung. Damit werden alle wichtigen Themen des Kurses praktisch eingeübt und können im eigenen Projekt umgesetzt werden.

Dieser Kurs kann auch zusammen mit dem Kurs Echtzeit-Linux kombiniert und innerhalb von 5 Tagen durchgeführt werden: Linux Treiber und RT

Dieser 4-tägige Kurs ist Teil einer Reihe zu Linux Treiber und RT.

Trainer und Dozenten

Andreas Klinger ist selbständiger Trainer und Entwickler. Schwerpunkte seiner Arbeit sind Linux Kerneltreiber sowie Embedded- und Echtzeit-Linux.

Als Autor von Fachartikeln und als Referent auf Kongressen vermittelt er Know-How zu Open-Source.

Voraussetzungen

Dieser Kurs richtet sich an Entwickler und System-Designer

Es werden Kenntnisse in Linux-Systemprogrammierung, sowie fundiertes Wissen in der Programmiersprache C vorausgesetzt

Sie sollten mit Compiler und Makefiles umgehen können, die wichtigsten Systemfunktionen kennen (open(), read(), write(), ioctl(), mmap(), ...) und in einem eigenen Programm anwenden können.

Inhalt

Linux Kerneltreiber

  • Aufbau des Linux-Kernel - Virtuelles File System (VFS)
  • System-Call-Schnittstelle
  • Character-, Block- und Net-Devices, Dateisystem-Treiber
  • Aufbau und Funktionsweise von Kernel-Treibern, Datei-Schnittstelle und Device-Nodes
  • Kernel-Module, Modulparameter
  • sysfs im Treiber verwenden

Hardware-Zugriff

  • Flattened-Device-Tree (FDT)
  • Managed Device Resources
  • IO-Ports und IO-Memory
  • GPIO's, Deskriptor-Interface, Interrupt-Controller, GPIO-Expander
  • I2C- und SPI-Schnittstelle verwenden
  • Industrial-IO (IIO) für Sensoren und Aktoren

Interrupts

  • Interrupts, Sekundärreaktionen auf Interrupts
  • SoftIRQ's: Kernel-Timer, Tasklet
  • Kernel-Threads

Synchronisierung

  • Preemption-, Bottom-Halve- und Interrupt-Sperre
  • Diagnose von Lockingproblemen mit lockdep
  • Warteschlangen, blockierende Operationen, poll
  • Semaphore, Mutex und Completion
  • Spin-Lock, Read-Write-Lock, Sequence-Lock
  • Ringbuffer, Read-Copy-Update (RCU)

Speicher-Verwaltung

  • virtueller, logischer und physikalischer Adressraum
  • Memory-Management-Unit (MMU), Speicherschutzkonzept, Segmentations-Faults
  • Allozierung von Kernel-Speicher, atomare Operationen
  • Buddy-System, Page-Alignment
  • Slab-Allocator, kmalloc
  • Datenaustausch Userspace <----> Kernel, Memory-Mapping

Debugging und Tracing

  • Kernel-Debugging
  • Function-Trace-Framework (ftrace), Timing-Analyse, Latenzzeiten
  • trace-cmd und kernelshark

Hochauflösende Timer in Linux (hrtimer)

  • klassische Linux-Timer; Timer-Wheel und jiffies
  • hrtimer-Framework, Architektur und Funktionsweise
  • Verwendung in Kernel-Treibern