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 href="/kurs/echtzeit-linux">Echtzeit-Linux kombiniert und innerhalb von 5 Tagen durchgeführt werden: href="/kurs/linux-treiber-und-rt">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
  • perf als Sampling-Tool
  • Extented Berkely Packet Filter (eBPF), ply als Frontend

Hochauflösende Timer in Linux (hrtimer)

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

Kurszeiten

Wer möchte, reist bis 22 Uhr am Vortag an und nutzt den Abend bereits zum Fachsimpeln am Kamin oder im Park.

An Kurstagen gibt es bei uns ab 8 Uhr Frühstück.

Unsere Kurse beginnen um 9 Uhr und enden um 18 Uhr. Dieser Kurs endet am letzten Tag um 16:00 Uhr.

Neben den kleinen Pausen gibt es eine Stunde Mittagspause mit leckerem, frisch in unserer Küche zubereitetem Essen.

Nach der Schulung anschließend Abendessen und Angebote für Fachsimpeln, Ausflüge uvm. Wir schaffen eine Atmosphäre, in der Fachleute sich ungezwungen austauschen. Wer das nicht will, wird zu nichts gezwungen und findet auch jederzeit Ruhe.