ldd-logo-1

Embedded Linux Kernel Interna und Gerätetreiber

5-Tage-Kurs

Der Kursinhalt kann auf Ihre Bedürfnisse und Ziele zugeschnitten werden. Wenn es die Zeit erlaubt, kann auch eine Beratung während des Kurses stattfinden. Bitte klicken Sie auf die Registerkarte "Öffentlich", um die öffentlichen Sitzungen zu sehen.

Privat online
ab 3 Teilnehmern
Vor Ort in Ihren Räumlichkeiten
ab 3 Teilnehmern
Wir werden Ihre E-Mail niemals an Dritte weitergeben.
Viertel wählen Quartal Status Zugang Lieferung Standort Sprache Zeitzone Buchen bis
3. Quartal 2023 privat remote virtuell Englisch UTC+2 01. Oktober 2023
4. Quartal 2023 privat remote virtuell Englisch UTC+2 Jan 01, 2024
Wir werden Ihre E-Mail niemals an Dritte weitergeben.
Datum auswählen Datum Status Zugang Lieferung Standort Sprache Zeitzone Buchen bis

Inhalt wie unten beschrieben.

Öffentlich online
ab 1 Teilnehmer
Öffentlicher Workshop im Klassenzimmer
ab 1 Teilnehmer
Wir werden Ihre E-Mail niemals an Dritte weitergeben.
Datum auswählen Datum Status Zugang Lieferung Standort Sprache Zeitzone Buchen bis

Dieser Kurs zeigt Kernel-Interna und Linux-Gerätetreiber und wo man weiterführende Themen findet.

Ziele des Kurses

Wir behandeln die Grundlagen, die zum Schreiben von Upstream-Linux-Gerätetreibern erforderlich sind, was auch einige Kernel-Interna einschließt. Anleitungen, Theorie und praktische Übungen ermöglichen es Ihnen, von Anfang an mit der Community zu interagieren. Nach erfolgreichem Abschluss dieses Kurses sollten Sie wissen, wo Sie alles Notwendige finden, um Ihre eigenen Linux-Gerätetreiber zu schreiben und zu warten.

Beschreibung

In diesem fünftägigen Kurs werden die Konzepte der Interna des Linux-Kernels und der Entwicklung von Gerätetreibern durch praktische Übungen in Kombination mit Anleitungen veranschaulicht. Die praktischen Übungen werden mit freier und quelloffener Software wie dem Yocto Project® Software Development Kit (SDK) auf einem Target Board (z.B. i.mx6) durchgeführt. Die Hardware kann erworben werden und wird Ihnen auf Wunsch zugeschickt. So können Sie auch nach dem Workshop bei Ihnen vor Ort mit dem Kursmaterial arbeiten. Das Training ist so aufgebaut, dass Sie sich schnell in die Materie einarbeiten können. Wir beschreiben die Prozesse, Konzepte und Befehle, die zum Schreiben von Linux-Gerätetreibern notwendig sind, durch eine Kombination aus Theorie und praktischen Übungen. Lernen Sie von einem erfahrenen Trainer und nehmen Sie das Wissen und die Fähigkeit mit nach Hause, es in Ihrem eigenen Embedded-Entwicklungsprojekt effektiv einzusetzen.

Voraussetzungen

  • Grundlegende Vertrautheit mit der Verwendung eines Linux-Systems (z. B. Ubuntu) als Endbenutzer im Benutzerbereich
  • Grundlegende Vertrautheit mit einer Befehlszeilen-Shell
  • Grundkenntnisse des Linux-Benutzerraums und der Anwendungsentwicklung
  • Fortgeschrittene C-Programmierkenntnisse
  • Sie sollten "Embedded Linux - From System Architecture to Real-Time (5 Tage)" oder "Introduction to Embedded Linux in Theory and Practice - a Crash Course (3 Tage)" besucht haben (dringend empfohlen!)
  • ...es sei denn, Sie sind bereits mit dem in diesen Kursen behandelten Stoff vertraut.
  • Um an diesem Kurs teilnehmen zu können, sollten Sie Erfahrung mit Embedded Linux haben (wie man den Kernel, den Userspace und das Root-Dateisystem erstellt und die Tools verwendet).
  • Die oben genannten Veranstaltungen können sowohl vor Ort als auch online durchgeführt werden. Fragen Sie hier nach Terminen und Preisen.

Kurs-Fahrplan

Wer sollte teilnehmen?

Personen, die sich für die Entwicklung oder Evaluierung von (Embedded) Linux-Gerätetreibern interessieren oder damit beauftragt sind. Der Workshop richtet sich an Manager, Software-, Entwicklungs-, Systemingenieure, Tester, Administratoren, Ingenieure und andere an (Embedded) Linux-Gerätetreibern interessierte Personen.

Gliederung des Kurses

Tag 1

Einführung

  • Eine kurze Geschichte von Linux | Lizenzierung | Kernel-Versionierung | Release-Zyklus | Kernel-Bäume | Mainline | Kernel-Space im Vergleich zu User-Space | Unterschied zwischen Mechanismus und Politik | Kernel-Treiber-Alternativen | Real-Time-Operating-Systems (RTOS) im Gegensatz zu Linux

Speicherverwaltung

  • virtueller Speicher versus physischer Speicher | Speicherzuweisung im Kernel | pages | zones | API | slab

Kernel-Patch

  • Patch-Lebenszyklus | git | Kernel-Quellcode | Patch erstellen | Patch prüfen | Fix-Patch | den Patch versenden | geprüften Quellcode (git)
Tag 2

Kernel-Module

  • Kernel-Quellen holen | Kernel konfigurieren | Kernel erstellen | Kernel installieren | Kernel-Modul (statisch verknüpft | zur Laufzeit geladen) | __init/__exit | Lizenzvergabe | tainted Modul/Kernel | EXPORT_SYMBOL | out of tree.ko makefile | module-init-tools | setzen Sie das Modul in den kernel tree | Kconfig | Parameterübergabe | sparse

Charakter-Treiber

  • Architektur | Benutzer/Kernel-Schnittstelle | E/A-Teilsystem | virtuelles Dateisystem (VFS) | sysfs (Geräte | Bus | Fahrer | Klassen) | kobject | ktype | kset | Linux-Kernel-Treibermodell | Gerätedateien
  • Character Treiber
    • Initialisierung des Treibers | Registrierung von Character Driver | Fahreröffnung | Treiber-Freigabe | cdev | cdev_add | cdev_del | ... | major/minor Zahlen | udev | udevmonitor | udevadm
Tag 3

Character Driver Funktionen (fortgeschritten)

  • ioctl | unlocked_ioctl | compat_ioctl | user-space API | kernel-space API | process life-cycle | sleeping / blocking | sleeping / waking up | wait queue | thundering herd | poll/select
  • Fehler | Fehlersuche | Fehlersuche im Kernel | binäre Suche mit git | Debug-Unterstützung durch den Kernel | printk | syslogd | klogd | Loglevels | Rate limit | debug levels | Selektive Teilsysteme debuggen | Fehlersuche durch Abfragen | debugfs | oops Fehlersuche | programmgesteuertes Durchsetzen einer oops | MagicSysRqKey | kgdb/kdb | JTAG (optional)
Tag 4

Kernel Profiling/Tracing

  • gcov|lcov|oprofile (veraltet und ersetzt durch Perf.) |ftrace
    • nop tracer | function tracer | sched_switch tracer (viewer) | function_graph tracer | dynamic tracer
  • Perf.| LTTng | Kernel Probes
    • Kprobes | JProbes | KretProbes (teilweise veraltet)

Interrupts

  • Unterbrechungen im Gegensatz zur Abfrage | Unterbrechung | Programmabschnitte | Wiederholung | Ereignisse | Unterbrechungshandler | gemeinsame Unterbrechungshandler | Unterbrechungsfluss | Unterbrechungssteuerung

Arbeit aufschieben

  • top/bottom halves | Softirqs | Tasklets | Workqueues | Threaded interrupts
Tag 5

Gleichzeitigkeit

  • kritischer Bereich/Abschnitt | atomar | Race Condition | Synchronisierung | Locking | Locking-Lösungen | Deadlock | Contention | Was muss gesperrt werden?
  • atomare Operationen | Spinlocks | Leser-Schreiber-Spinlocks | Semaphor | binärer Semaphor | Mutex | Leser-Schreiber-Semaphor | completion variables | sequential locks | disable Preemption | sequentielle Reihenfolge und Hardware/Software barriers

Zeit

  • HZ | Jiffies | große/kleine Verzögerungen | Kernel-Timer | hochauflösende Timer

Hardware-E/A

  • E/A-Anschlüsse | E/A-Speicher | Wie kann man mit Seiteneffekten beim Zugriff auf Register umgehen?

Benutzer-Kernel-Kommunikation

  • put(get)_user() | copy_to(from)_user() | Kernel I/O | memory mapping | procfs | sysfs | debugfs | relayfs | netlink | ioctl

Tragbarkeit

  • Wortgröße | opaque data types | signed/unsigned char | Datenausrichtung (Auffüllen) | Integral Promotion | Code-Wiederverwendung | Endianess | Systemtick | page size | In welcher Reihenfolge werden Software-Befehle ausgeführt? | Symmetrische Mehrfachverarbeitung (SMP) | Preemption | high memory

Was die Kunden sagen