Embedded Linux: Konzepte und Programmierung (Fortgeschritten)#

Linux aus der Sicht des Programmierers: Low-Level APIs, Hardwareschnittstellen

Dauer#

2 Tage

Equipment#

Ein Raspberry Pi und ein WiFi Router werden vom Trainer gestellt. Die Teilnehmer bringen ihren Arbeitsrechner mit und verbinden sich mit dem Wifi. Über SSH wird sodann am Raspberry eingeloggt und der Spaß kann beginnen.

Das Raspberry Pi ist mit 4 bzw. 8GB Speicher zwar nicht in die Kategorie “Traditionell Embedded” einzuordnen, mit etwas Fantasie und Disziplin kann man darauf aber durchaus ressourcensparend programmieren. Vor allem eignet es sich perfekt als gemeinsame Übungsplattform, da es einen breiten Querschnitt an Hardwareschnittstellen mitbringt, die im Embedded Umfeld Einsatz finden.

Einleitender Text/Beschreibung#

Aufbauend auf dem Kurs Embedded Linux: Konzepte und Programmierung (Einführung) werden die Themen verfeinert und miteinander verbunden. Anhand von aufeinander aufbauenden Übungen bauen wir gemeinsam eine Applikation (besser: eine Skizze davon), die einen breiten Querschnitt des Kennengelernten zur Anwendung bringt. Und: die Teilnehmenden herausfordert, Kreativität und Spaß an der Sache an den Tag zu legen.

Ein solides Wissen in C und/oder C++ wird vorausgesetzt, um den Spaß nicht zu sehr einzuengen.

Ziel der Weiterbildung und Nutzen#

Keine Überraschungen in der Entwicklung mehr erleben Entscheidungen treffen, die mit einer ungleich größeren Wahrscheinlichkeit richtig sind, als wenn man einfach loslegt.

Teilnehmerkreis#

  • Embedded Softwareentwickler, die sich schon lange fragen, warum Features eines “normalen” Betriebssystems, wie z.B. Multiprocessing, TCP/IP, Dateisysteme, ihnen versagt bleiben oder teuer erkauft werden müssen.

  • Elektronikingenieure, die mit Softwareentwicklern zusammenarbeiten und deren Welt verstehen wollen.

  • Systemarchitekten, die die Eckpunkte für beide vorangegangenen Gruppen definieren.

Inhalte#

System Calls, und Error Handling

  • Kategorisierung der ca. 350 System Calls in Linux

  • “Anatomie” von System Calls

  • Error Handling

File IO

  • Everything Is A File (auch Hardware)

  • Öffnen, Erstellen, und Schliessen von Files

  • File Descriptor Refcounting, und Duplikation

  • Scatter-Gather IO

Prozesse

  • Lebenszyklus

  • Erstellen eine neuen Prozesses, vs. Ausführen eines Programms (fork() und exec())

  • Terminierung, und Warten auf selbige (exit() und wait())

  • argv und Environment Variablen

Realtime Definition und API

  • Scheduling Policies: faires Scheduling, vs. Realtime (FIFO, RR, Deadline)

  • Scheduling Priorities: Ober sticht Unter, und Multiprozessorsystems

Multithreading: Das POSIX Threads API

  • Threads, was ist das?

  • Gefahren von Multithreading, bzw. “Was ist eine Race Condition?”

  • Mutual Exclusion: die verschiedenen Mutex-Varianten in der POSIX-Welt

  • Kommunikation mit Condition Variablen: Wie kann ich einen Thread warten machen auf ein Ereignis, das ein anderer Thread produziert?

  • Threads und Realtime: Mechanismen und Gefahren (was ist Priority Inversion?)

POSIX IPC (Inter Process Communication)

  • Semaphoren

  • Shared Memory

  • Message Queues

Hardware Interfaces

  • General Purpose IO (GPIO) mit libgpiod: Bulk-Operationen, Interrupts, und Timestamping

  • CAN Bus (“SocketCAN”): Netzwerkprogrammierung mit dem Socket-Interface, mit speziellem Augenmerk auf die Testbarkeit (Virtualler CAN-Bus, vcan)

  • Standard Embedded Hardware: I2C, SPI, PWM

  • Das HWMON (HardWare MONitoring) Subsystem: Sensoren unter einen Hut gebracht

Linux Spezialitäten (ein Einblick nur)

  • Event Loop Interfaces unter Linux (Spoiler: epoll()): Vorteile und Nachteile gegenüber Multithreading

  • Unix Signals sind böse (warum?), und die Alternativen wie signalfd(), timerfd(), und eventfd()

  • Was sind “Dienste”, und was ist systemd?

Kernel Driver Programming (ein Einblick nur)

  • Character Devices von unterhalb der Wasseroberfläche

  • Memory Management und DMA

  • Interrupt Handling

  • Mutexes und Spinlocks

  • Wartebedingungen

Trainingsmethoden#

  • Weblinks (aka Folien) als strukturelles Material

  • Didaktische Live-Demos des Trainers am Gerät

  • Praktische Übungen

Veranstaltungsleiter/Referenten#

Dipl.Ing. Jörg Faschingbauer

Angaben zum Veranstaltungsleiter/Referenten für die Vermarktung der Veranstaltung#

  • Programmierer seit ca. 40 Jahren, davon 35 in Linux

  • Seit ca. 20 Jahren selbstständig, davor Dienstnehmer (Programmierer, Architekt, Teamleiter) in verschiedenen Firmen

  • Softwarearchitekt

  • C++ Experte (sofern dies möglich ist)

  • Python Experte für alles, was systemnah ist

Kommunikationsdaten Veranstaltungsleiter/Referenten#

DI Jörg Faschingbauer
Faschingbauer Training und Consulting
Kiesgasse 5
A-8041 Graz
+43 664 5783814
jf@faschingbauer.co.at

Keywords#

  • Linux

  • Embedded

  • Systemprogrammierung