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()undexec())Terminierung, und Warten auf selbige (
exit()undwait())argvund 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 TimestampingCAN 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 MultithreadingUnix Signals sind böse (warum?), und die Alternativen wie
signalfd(),timerfd(), undeventfd()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#
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