Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Grundlegende Kenntnisse im Umgang mit einem GNU/Linux-System als Endbenutzer
  • Grundlegende Vertrautheit mit einer Kommandozeilen-Shell
  • Grundlegende Kenntnisse in der Entwicklung von Benutzerraum-Anwendungen
  • Mittelgute C-Programmierkenntnisse
  • Sollten vorab an der Schulung Embedded GNU/Linux Systems Architecture teilgenommen haben (dringend empfohlen!) und/oder die dort behandelten Themen gut verstehen

Overview:

Beschreibung

Dieser 5-tägige Schulungskurs verbindet praktische Übungen mit theoretischer Unterweisung, um die Konzepte der internen Struktur des GNU/Linux-Kernels und der Entwicklung von Gerätetreibern zu veranschaulichen. Er ist so konzipiert, dass Sie sich schnell in die Materie einarbeiten können. Wir erläutern die Prozesse, Konzepte und Befehle, die für die Erstellung von GNU/Linux-Gerätetreibern erforderlich sind, und zwar durch eine Kombination aus Theorie und praktischer Anwendung.

Sie müssen das Rad nicht neu erfinden, sondern können von einem erfahrenen Trainer lernen und mit einem fundierten theoretischen und praktischen Wissen sowie der Fähigkeit, es effektiv in Ihren eigenen eingebetteten Entwicklungsprojekten einzusetzen, nach Hause gehen.

Zielgruppe

Personen mit Interesse an der Entwicklung oder Bewertung der Entwicklung von GNU/Linux-Gerätetreibern oder die damit beauftragt sind, wie Softwareentwickler, Field Engineers (Vor-Ort-Techniker), (Projekt)Manager und Hardware-Ingenieure.

Course Outline:

Einführung

  • kurze Geschichte von GNU/Linux
  • Lizenzierung
  • Kernel-Versionierung
  • Veröffentlichungszyklus
  • Kernel-Verzweigungen (Trees)
  • Mainline-Kernel
  • Kernel versus Benutzerraum
  • Mechanismus versus Richtlinie
  • Alternativen für Kernel-Treiber
  • RTOS versus Linux

Speicherverwaltung

  • Virtueller Speicher versus physischer Speicher
  • Speicherzuweisung im Kernel
  • Seiten (Pages)
  • Zonen
  • API
  • Slab-Allokator

Kernel-Patches

  • Lebenszyklus
  • git
  • Kernel-Quellcode
  • Erstellen eines Patches
  • patch-Prüfung
  • Beheben von Fehlern im Patch
  • Ausliefern eines Patches
  • überprüfter Code

Kernel-Module

  • Herunterladen der Kernel-Quelldateien
  • Konfigurieren/Erstellen/Installieren
  • Gerätetreiber (statisch verlinkt, zur Laufzeit geladen)
  • init/exit
  • Lizenzierung
  • EXPORT_SYMBOL GPL
  • Makefile für Module außerhalb des Baums
  • module-init-tools
  • Module im Kernel-Baum
  • Kconfig
  • Übergabe von Parametern
  • sparse (statische Analyse-Tool)

Zeichenorientierte Treiber (Char Drivers)

  • Architektur
  • Schnittstelle zwischen Benutzer- und Kernelraum
  • E/I-Subsystem (I/O-Subsystem)
  • VFS (Virtuelles Dateisystem)
  • sysfs (Geräte, Busse, Treiber, Klassen)
  • kobject/ktype/kset
  • Linux-Kernel-Treibermodell
  • Gerätedateien
  • Zeichenorientierter Treiber

    • Initialisierung
    • Registrierung
    • open, release
    • cdev, cdev_add, cdev_del,...
    • Major- und Minor-Nummern
    • udev, udevmonitor, udevadm

Erweiterte Operationen für Zeichenorientierte Treiber

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API im Benutzerraum
  • API im Kernelraum
  • Lebenszyklus von Prozessen
  • Schlafen/Blockieren
  • Schlafen/Aufwachen
  • Warteschlangen (Wait Queues)
  • Thundering Herd Problem
  • poll/select

Fehlersuche im Kernel

  • Fehlersuche (Debugging)
  • Fehlersuche im Kernel

    • Binäre Suche mit git
    • Debug-Unterstützung im Kernel
    • printk, syslogd, klogd, Loglevel, Ratenbegrenzung, Debug-Level, selektive Subsysteme
    • Debugging durch Abfragen von debugfs
    • Oops-Debugging, Auslösen eines Oops
    • Magic SysRq-Taste
    • kgdb/kdb
    • JTAG

Tracing (Ereignisverfolgung)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Unterbrechungen (Interrupts)

  • Interrupts versus Polling
  • Interrupt
  • Programmabschnitte
  • ReEntrancy (Wiedereintrittsfähigkeit)
  • Ereignisse (Events)
  • Interrupt-Handler
  • Shared Interrupt Handler (geteilter Interrupt-Handler)
  • Interrupt-Fluss
  • Interrupt-Steuerung

Verschieben von Arbeiten (Deferring Work)

  • Top/Bottom Halves
  • Softirqs
  • Tasklets
  • Work Queues
  • Threaded Interrupts

Nebenläufigkeit (Concurrency)

  • Kritischer Bereich/Abschnitt
  • atomare Operationen
  • Wettlaufsituation (Race Condition)
  • Synchronisation
  • Sperren (Locking)
  • Lösungsmöglichkeiten für Sperren
  • Deadlock
  • Contention (Wettbewerb um Ressourcen)
  • Was soll gesperrt werden?
  • Was kann verwendet werden?

    • atomare Operationen
    • Spinlocks
    • Reader-Writer-Spinlocks
    • Semaphore
    • Binary Semaphore
    • Mutex
    • Reader-Writer-Semaphore
    • Completion-Variablen
    • Sequential Locks
    • Deaktivieren der Unterbrechung (Disable Preemption)
    • Ordnung und Barriers

Zeit

  • HZ
  • Jiffies
  • Große/kleine Verzögerungen
  • Kernel-Timer

Hardware-E/I

  • I/O-Ports
  • I/O-Speicher
  • Wie geht man mit Seiteneffekten beim Zugriff auf Register um?

Kommunikation zwischen Benutzer- und Kernelraum

  • put(get)_user()
  • copy to(from)_user()
  • Kernel I/O
  • Memory Mapping
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilität

  • Wortgröße (word size)
  • Opaque Typen
  • signed/unsigned char
  • Datenausrichtung (Data Alignment)
  • integrale Promotion
  • Code-Wiederverwendung
  • Endianess (Byte-Reihenfolge)
  • System-Takt
  • Seitengröße
  • Anweisungsreihenfolge
  • SMP/Preemption/High Memory

Soweit nicht anders angegeben, unterliegen Inhalt und dieser Kursplan der Lizenz Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 4.0 International (CC BY-NC-SA 4.0).

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών

Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Italia - Interni del kernel GNU/Linux e driver di dispositivo

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's

Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere

Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

România - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner

Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства

Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers

Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers

US Government - Embedded GNU/Linux Kernel Internals and Device Drivers