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
- Initialisierung des Treibers | Registrierung von
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/Softwarebarriers
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
Verwandte Kurse
- "Embedded Linux - Von der Systemarchitektur bis zur Echtzeit (5 Tage)"
- "Auffrischung zu Embedded Linux & Einführung in das Yocto Projekt (5 Tage)"
- "Das Yocto-Projekt - Ein gründlicher Überblick (4 Tage)"
- "Einführung in Embedded Linux & Real-Time, Vogelperspektive des Yocto-Projekts (4 Tage)"
- "Einführung in Embedded Linux in Theorie und Praxis - ein Crashkurs (3 Tage)"
- "(Embedded) Linux-Fehlerbehebung (3 Tage)"
- "FreeRTOS in Theorie und Praxis (3 Tage)"