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 :doc:`linux-embedded-1` 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 ------------------------------- :doc:`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