Embedded Linux: Konzepte und Programmierung (Einführung)#
Eine Einführung in Low(est) Level Linux, anhand von Beispielen und kleinen Übungen.
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.
Einleitender Text/Beschreibung#
Linux ist ein Betriebssystem aus der Unix-Familie - eine Reihe von starken Konzepten, die seit den 70ern des letzten Jahrhunderts existieren, den Kern eines “General Purpose OS” bilden, und bis heute gehalten haben. Für die Entwicklung von Applikationen ist es zentral, diese Konzepte zu verstehen und anwenden zu können.
Die Flexibilität von Linux ermöglicht eine Anpassung des Betriebssystems an verschiedene Einsatzszenarien (Desktop, Supercomputer, Telefon …). Ziel dieses Kurses ist, zu lernen, wie Linux als Embedded Realtime OS verwendet werden kann. Die Teilnehmer bekommen sowohl einen Überblick über die vielfältigen Hardwareschnittstellen, die im Embedded-Bereich Einsatz finden, als auch ein Gefühl dafür, was es bedeutet, realtimefähig zu sein.
Viele Strecken des Kurses werden nicht klassisch programmierend in C zugebracht. Das Kernziel des Kurses ist, ein Verständnis für das Betriebssystem zu vermitteln – dafür langt die Commandline allemal, zumal viele Dienstprogramme wie zum Beispiel Debuggingtools als getrennte Befehle verfügbar sind.
Ziel der Weiterbildung und Nutzen#
Linux verstehen: wer mehr weiss, kann mehr machen
Eine Idee davon bekommen, wie eine Embedded Applikation „auf der grünen Wiese“ entsteht
Eine Idee davon bekommen, wie man eine bestehende Applikation von einem anderen Embedded OS (vxWorks, FreeRTOS, Zephyr – you name it) nach Linux portiert
Entwickeln sicherer Software: Speicherschutzverletzungen, oder „Was ist der Unterschied zwischen Prozess und Thread?“
Entwickeln sicherer Software: Berechtigungen (Permissions), und wie setzt man diese ein, um sich nicht selbst in den Fuß zu schießen? Speziell: warum sollte man darauf achten, dass Prozesse nicht als Root (Administrator) laufen?
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#
Einführung in SSH und die Shell
Commandline Basics
Standard Commands wie
ls,cp,mv,find,cat,less,grep, …Pipe und IO Redirection
Filesystem
Files, Directories, Device Files (Hardwareschnittstellen), und Pfade
Permissions
Prozesse und Scheduling
Virtuelles Memory, und Shared Memory
Credentials eines Prozesses, und der Zusammenhang mit Filesystem Permissions
System Calls und Signale
Scheduling und Realtime
Wartebedingungen: was heisst „ein Prozess ist blockiert?“
Und Multithreading?
Tools:
ps,top,strace,valgrind, …
Der Linux Kernel
Kernel selber bauen; z.B. “Was muss ich machen, um harte Realtimefähigkeiten zu erhalten?”, oder “Was kann ich weglassen, um mein Kernelimage möglichst klein zu kriegen?”
Driver, und ladbare Module
Kernel Commandline
Devicetree
Hardware-Schnittstellen Überblick
GPIO
I2C
SPI
CAN-Bus
UART
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