BSD Treiber

Architektur des BSD Kernels und Geräte-Treiber

Wenn die von BSD 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 BSD-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 BSD-Treiber zu schreiben sowie die vom Kernel angebotenen Mechanismen effektiv einzusetzen.

Der Kursinhalt bezieht sich auf OpenBSD, FreeBSD, und NetBSD, was eine große Spannweite darstellt. Auf Gemeinsamkeiten und Unterschiede dieser Systeme wird eingegangen, aber wir werden im Zeitraum des Kurses nicht alle Themen zu 100 % für alle BSD-Varianten abdecken können.

Das Ziel dieses Kurses ist, die Grundlagen der BSD Kernel Entwicklung zu vermitteln, die wirklich auf allen BSD Systemen relevant sind. Dies ermächtigt Teilnehmer, das Gelernte auf einer oder mehreren BSD Plattformen anzuwenden, und ihr Wissen nach dem Kurs selbstständig zu erweitern.

Der Fokus liegt auf Treibern für Geräte, die via PCI, USB, oder SDIO angebunden sind. Teilnehmer die ein besonderes Interesse an einer bestimmten Schnittstelle haben sollten uns dieses bei der Anmeldung bitte mitteilen damit der Trainer sich entsprechend vorbereiten kann.

Übungen werden auf Laptops bzw. ARM Embedded-Boards durchgeführt. Entsprechende Geräte werden während der Schulung zur Verfügung gestellt.

In der Praxis braucht die Entwicklung von gut funktionierenden Treibern viel Geduld und Zeit. Es ist daher einiges an Zeit zum Basteln vorgesehen. Wir möchten, dass jeder Teilnehmer nach Abschluss des Kurses von mindestens einem Erfolgserlebnis beim Entwickeln von BSD Treibern berichten kann.

Trainer und Dozenten

Stefan Sperling ist selbständiger Trainer und Entwickler. Einer der Schwerpunkte seiner Arbeit sind BSD Kerneltreiber im Bereich WLAN und Ethernet.

Als Referent auf Kongressen wie der EuroBSDcon vermittelt er Know-How zu Themen rund um Open-Source und BSD.

Voraussetzungen

Dieser Kurs richtet sich an Entwickler und System-Designer.

Es werden Kenntnisse in BSD- oder Linux-Systemprogrammierung im Userland, 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

BSD Kerneltreiber

  • Kernel Geschichte von 4.2-BSD bis heute
  • Aufbau des BSD-Kernel
  • System-Call-Schnittstelle
  • Character-, Block- und Net-Devices, Dateisystem-Treiber
  • Aufbau und Funktionsweise von Kernel-Treibern, Datei-Schnittstelle und Device-Nodes
  • Kernel-Module, Modulparameter

Hardware-Zugriff

  • IO-Ports und IO-Memory
  • PCI
  • USB
  • Flattened-Device-Tree (FDT)
  • Managed Device Resources
  • DMA

Interrupts

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

Synchronisierung

  • Preemption-, Bottom-Halve- und Interrupt-Sperre
  • Diagnose von Lockingproblemen mit WITNESS
  • 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
  • malloc und free im Kernel
  • Datenaustausch zwischen Userspace und Kernel, Memory-Mapping

Timer im Kernel

  • klassische Timer; Timer-Wheel und ticks
  • Verwendung in Kernel-Treibern

Debugging und Tracing

  • Kernel-Debugging
  • Kernel-Profiling
  • Dynamisches Tracing mit Dtrace / Btrace
  • Berkely Packet Filter (BPF)

Übungen

  • Probleme in echten BSD-Treibern beheben.
  • Einen eigenen kleinen Treiber entwickeln.

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.

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.