Embedded Linux 2024 =================== **Allgemeines** * Dienstag, 9:50 - 11:20 im J3.19, 11:40 - 13:10 + 14:00 - 15:30 im G2.16 * **⚠️ ALLES WICHTIGE ZUM ABLAUF DER VERANSTALTUNG ⚠️** ``_ * Fragenkatalog (wächst sicher noch) ``_ * MicroSD Karte, Notizen, ... https://hhoegl.informatik.hs-augsburg.de/elinux/kurs/2024 **1. Treffen (26.3.2024)** * Verschiedene Boards von 2000 bis jetzt ``_ * Musterbeispiel "Beregnungssteuerung" ``_ * Übungen ``_ **2. Treffen (9.4.2024)** * Wir haben über den Bootvorgang gesprochen (MELPv3, Kap. 3) ROM Bootcode, SPL/MLO, U-Boot, Kernel - ``_ - ``_ * Hausaufgaben - MELPv3, Kap. 3 (nochmal) lesen - Mal woanders reinschauen, z.B. in *How Linux Works* von Brian Ward, Kap. 5.1- 5.4: "How the Linux Kernel Boots" https://learning.oreilly.com/library/view/how-linux-works/9781098128913/c05.xhtml - U-Boot Kommandos ausprobieren (Beagle Bone Black) Leider hat der RPi von Haus aus kein U-Boot installiert. Ganz Verwegene sollten U-Boot auf den Pi bringen. Anleitungen gibt es genug im Netz, z.B. https://www.thegoodpenguin.co.uk/blog/build-boot-linux-on-raspberry-pi-3-model-b - Blog von Robert C. Nelson (Debian: Getting Started with the BeagleBone Black). Er ist Applikationsingenieur bei Digikey, einem Distributor und macht u.a. Anpassungen an den AM335x von Texas Instruments. Zeigt, wie man ein Linux aus Einzelteilen zusammenbaut. https://forum.digikey.com/t/debian-getting-started-with-the-beaglebone-black/12967 **3. Treffen (16.4.2024)** Ich kann leider an dem Tag nicht an der Hochschule sein. Es wird also keine Vorlesung im J3.19 geben. Machen Sie am besten weiter mit den Übungen in ``_. Zum Beispiel Anbindung an Internet mit nmcli, U-Boot kompilieren und Flashen, ... Die Sache von letzter Woche mit dem USB-zu-UART Adapter am WSL2 hat sich mittlerweile geklärt. Herr Schäferling weiß Bescheid. Lesen Sie schon mal das Kap. 4 in MELPv3. Es geht um den Kernel. Sie koennen gerne ab etwa 12 Uhr wieder in den G2.16 kommen, so wie letzte Woche. **4. Treffen (23.4.2024)** * Anregung "Skilltest" unter https://www.linux4embedded.de * Mal ``bootterm`` testen - https://github.com/wtarreau/bootterm.git. Kann man das auch Cross-Kompilieren für BBB/RPi? * Kommandozeilen zum Bauen von Cross-Toolchain (ch02) und eigenstaendigem U-Boot (ch03) ``_ U-Boot Meldungen ``_ * Versionierung ist bei OSS ganz wichtig, mal bei https://semver.org und https://calver.org nachsehen. Guter c't Artikel zum Thema: ``_ **5. Treffen (30.4.2024)** Nachträge von letzter Woche - ``_ (RISC-V!) - ``_ - Alle die einen RPi haben sollen recherchieren, wie der Bootvorgang genau abläuft. Es gibt einige Anleitungen die zeigen, wie der U-Boot Bootloader in den Bootvorgang eingeschleust werden kann. Neuigkeiten - Siehe ``MicroSD-Karten/24-1/Notizen.md`` unter ``_. Hier geht es nochmal verstärkt darum, wie man mit dem Embedded Linux Board vernünftig arbeiten kann: Zugang über den UART mit Terminal Emulator microcom und bootterm --- Anpassen der Terminalgroesse --- Einrichten von bash, vim, ssh Zugang, tmux --- praktische Tools fd und rg --- Netzwerkverbindung vom Hostrechner zum Target über USB oder Ethernet-Kabel einrichten mit ip und nmcli --- DNS Server --- Zugang mit ssh und scp; scp vom Host zum Target; scp vom Target zu anderen Rechnern --- Dateien schnell übertragen/synchronisieren mit rsync --- Datum/Timezone setzen --- gcc --- Python 3 --- Cross-Kompilierung --- Programmbeispiele in den Programmiersprachen C, C++, Go, Rust, Python. - In MELPv3 sollten Sie nun beim Kapitel 4 "Configuring and Building the Kernel" sein. - Die aktuellen Aufgaben sind - U-Boot selber kompilieren und auf eigene SD-Karte schreiben - Kernel selber kompilieren und auf SD-Karte schreiben - U-Boot bootet Kernel - U-Boot lädt Kernel über tftp/nfs über das Netz (RootFS kommt später) **6. Treffen (7.5.2024)** Elinux-Remote, ESP8266 ("Node-MCU") + Firmware --- Fernsteuerung von Reset und GPIO Pins --- kurzer Ausflug zu Echtzeit und Latenzmessungen --- Saleae Logikanalysator / Klon, Software von saleae.com --- automatischen Bootvorgang mit SPACE unterbrochen --- NFS/TFTP Einstellungen in U-Boot --- hat leider erst mal nicht geklappt --- BA von Maximilian Stephan - Inverses Pendel gesteuert über PRU im AM335x --- Strommessung über USB Adapter --- Buildroot, OpenWRT Hausaufgaben: - Seriellen Port per Programm ansteuern (z.B. pyserial) - Kernel bauen (MELP, Kap. 4) - RootFS bauen (MELP, Kap. 5) - Markdown Texte, nicht so lange Zeilen machen! Bei Spalte 79 umbrechen. **7. Treffen (14.5.2024)** Kernel auf Hostrechner bauen, oder den WSL2 Kernel bauen. Verwenden alle das gleiche Konfigurationssystem "Kconfig" - Busybox - Buildroot - Linux Kernel - U-Boot (21.5.2024 war ein Brückentag wegen Pfingsten) **8. Treffen (28.5.2024)** - Loesung fuer das Problem mit FAT Boot: https://bootlin.com/blog/workaround-for-creating-bootable-fat-partition-for-beagle-bone-am335x-on-recent-distros - NFS/TFTP booten auf elinux-remote geht nun. Firewall war das Problem. Vorfuehrung mit Python Programm, das Reset, U-Boot Init und microcom-Aufruf erledigt. - Ein paar neue Links auf dieser Seite. - Tsgrain Yocto kompiliert nicht mehr. Herr Bauer hat aber eine bessere Loesung. **9. Treffen (4.6.2024)** - Restliche Planung: - 11.6. - 18.6. Bin nicht an der Hochschule - 25.6. - 2.7. - 5.7. (Freitag) - Klausur M2.03 - Restliche Themen MELPv3 - Kap 6. BR/Yocto - Kap 7. Yocto - Kap 10. Update - Kap 21. Realtime - Studienarbeiten - Deadline 28. Juni 2024 - Erklaerung unterschreiben: Selbstaendig verfasst und Verwendung von generativen KI-Tools kenntlich gemacht - 20+ Seiten - Keine peer-review Literatur noetig - Tools zur freien Wahl: Latex, typst, quarto, pandoc, sphinx, ... - Phytec Yocto Anleitung (Beispielhafte Anleitung eines Board-Herstellers) https://phytec.github.io/doc-bsp-yocto/yocto/kirkstone.html - German Bionic, Exoskelette, Betrieb mit Embedded Linux, Yocto, Go **10. Treffen (11.6.2024)** - Leider krank gewesen - Interessanter Kern-Technik Artikel im aktuellen Linux-Magazin 7.2024 zu Geraetetreibern, gpiolib und device trees: ``_. (`Quelltext `_) - "Best Practices" (von Harald Seiler, https://denx.de, 2022) ``_ - Neues Terminalprogramm "tio" entdeckt. Das war urspruenglich fuer ``tmux`` vorgesehen. https://github.com/tio/tio **11. Treffen (18.6.2024)** War durch Online-Workshop verhindert, Hr. Schäferling macht eine Echtzeit-Linux Vorführung im G2.16. Lernen: * MELPv3 Kap. 1-7, 10, 21 * Vortrag anschauen: "Golden Image" bzw. "Binary OS" vs. Build from Source (Link weiter unten) * Zwei Artikel zu Echtzeit, die sie sich anschauen sollten: - https://hhoegl.informatik.hs-augsburg.de/elinux/rt/elektronik-2007-03.pdf - https://hhoegl.informatik.hs-augsburg.de/elinux/rt/kt63.pdf Anregungen fuer abschliessende praktische Versuche: * Sie sollte auf alle Faelle mal ein Yocto Linux bauen so wie in MELPv3 Kap. 6 beschrieben. Nehmen Sie aber statt "dunfell" die "kirkstone" Version (4.0). Sie haben die Wahl ob qemu-x86-64, qemu-arm, bbb oder rpi. * Mit Software Update Verfahren kann man auch mit QEMU experimentieren, so wie in MELPv3 Kap. 10 beschrieben. * GPIO ansteuern mit libgpiod ``_ (Theorie: `kt-101 `_ und `kt-134 `_) * Echtzeit Versuche - In diesem Repo sind ein paar Beispielprogramme die den Unterschied zwischen normalem Kernel und dem RT_PREEMPT Kernel verdeutlichen sollen (blik/blink_rt, servo/servo_rt). Die Beispiele stammen von 2021/2022 und verwenden noch die Yocto "dunfell" Release. Ausserdem machen sie die Ausgabe ueber das veraltete ``/sys/class/gpio/``. Wer Spaß daran hat könnte die Beispiele updaten auf Yocto "kirkstone" und ``libgpiod`` verwenden. https://gitlab.informatik.hs-augsburg.de/domokun/elinux_demos - Im ``material`` Repo sind im Ordner ``timing`` ein paar Programme die mit zeitlicher Programmierung experimentieren. Die Beispiele aus dem Artikel von Chris Simmonds, `Over and over again: periodic tasks in Linux `_ sind im Ordner ``periodic``: https://gitlab.informatik.hs-augsburg.de/elinux/material **12. Treffen (25.6.2024)** Über Prüfung reden. **Themenvorschläge für Master** - Zwei Themen sind schon vergeben: - Vergleich Barebox mit U-Boot (Milenkovic) - Minimal Yocto Image (Bauer) - Gute Anregungen unter https://elinux.org/ELC_Europe_2023_Presentations (und frühere Jahre) - "Kas" (Fetching, Configuring and Building Your Bitbake Project with Just One Command) https://elinux.org/images/b/b1/ELC23-kas.pdf - Echtzeit-Linux, RT-Preempt, Xenomai - Testumgebungen: Tbot (https://www.denx.de/project/tbot), Labgrid (https://github.com/labgrid-project/labgrid), Lava (https://www.lavasoftware.org) - Software Updateverfahren (RAUC, SWupdate, fwup), `Foliensatz `_ zu RAUC von ELCE22 - Boot Tracing, Boot Charts (``_) - Device Trees (aktueller Stand, dynamisch, Overlay, ...) (``_) **Literatur zu Yocto Project** * MELPv3, Kap. 6, zweite Haelfte (Basics) * MELPv3, Kap. 7 (eigene Layer) * BA Thomas Hampp, 2021, TSGRain, Yocto, SEBRAUC, ... `BA `_. Der Sourcecode ist auf dem Gitea Server von Hr. Hampp unter https://code.thetadev.de/TSGRain. .. * Tam Hanna, Übersicht: Was Linux-Distributionsbaukästen können, iX 2/2015 https://hhoegl.informatik.hs-augsburg.de/elinux/rootfs/ix.0215.036-042.pdf * Tam Hanna, Yocto Tutorial, iX 2/3/4-2015 - Teil 1 (QEmu) ``_ - Teil 2 (RPi) ``_ - Teil 3 (Arduino Galileo) ``_ * Bootlin.com Yocto Training (BeagleBone Black, STM32MP1) - https://bootlin.com/training/ - https://bootlin.com/docs/ * Phytec Yocto Anleitung (Beispielhafte Anleitung eines Board-Herstellers) https://phytec.github.io/doc-bsp-yocto/yocto/kirkstone.html * Die Yocto Distribution "OpenSTLinux" für den STM32MP1 (Yocto-basierte Distro des Chip-Herstellers ST Micro https://www.st.com) https://wiki.st.com/stm32mpu/wiki/OpenSTLinux_distribution * "Golden Image" bzw. "Binary OS" vs. Build from Source - Bastian Krause, Wie man (k)ein Betriebssystem für Produkte baut, Pengutronix 2021 (mit Video, 45 Min.) https://www.pengutronix.de/de/blog/2021-04-19-wie-man-kein-betriebssystem-fuer-produkte-baut.html - Mirza Krak, Linux IoT Development: Adjusting from a Binary OS to the Yocto Project Workflow, ``_ **Literatur zu Software Update** * Update-Verfahren, MELPv3, Kap. 10 * Artikel aus iX 12.2022 "IoT-Geräte-Updates automatisieren" ``_ * Linux Magazin, Kern-Technik #121 (Update Verfahren, RAUC), ``_ Kern-Technik #122, konkretes RAUC Beispiel ``_ Siehe auch das Software-Archiv ``_ dazu. * SWupdate https://swupdate.org, https://github.com/sbabic/swupdate * fwup https://github.com/fwup-home/fwup * Mender https://docs.mender.io/3.2 * Balena https://www.balena.io * hawkBit https://www.eclipse.org/hawkbit * Blog Eintrag "Fail-Safe (OTA) Field Updating" https://www.pengutronix.de/en/blog/2021-02-19-showcase-field-updating.html **Literatur zu Real-Time** * MELPv3, Kap. 21, Real-Time Programming * Artikelsammlung zu Echtzeit unter Linux https://hhoegl.informatik.hs-augsburg.de/elinux/rt/index.html * Servo am BBB1, `Foto `_ (man sieht die Spitze des roten Zeigers in der Kamera). Sourcecode dazu: https://gitlab.informatik.hs-augsburg.de/domokun/elinux_demos * Chris Simmonds, Over and over again: periodic tasks in Linux https://www.2net.co.uk/tutorial/periodic_threads * Carsten Emde, HOWTO: Cyclic execution of a user program function https://www.osadl.org/?id=86 * OSADL Howto: Create a latency plot from cyclictest histogram data https://www.osadl.org/Create-a-latency-plot-from-cyclictest-hi.bash-script-for-latency-plot.0.html * Einige Beispielprogramme (VPN!) https://gitlab.informatik.hs-augsburg.de/elinux/material/-/tree/master/timing **Literatur zu Kernel, Kernelmodule, Gerätetreiber** * MELPv3, Kap. 4 (Kernel konfigurieren und kompilieren) * MELPv3, Kap. 11 (Treiber) * Quade, Kunst, Kern-Technik im Linux Magazin 11.2020 (Gerätetreiber als Kernelmodul implementieren). ``_ * Linux Driver Workshop von Johannes Roith auf dem LIT 2024 (https://www.luga.de/static/LIT-2024/), `Folien `_, Github ``_, `Videos `_ --- für Raspberry Pi 3; CD4543B Siebensegment-Dekoder. * Valerie Henson, /dev/hello_world: A Simple Introduction to Device Drivers under Linux, 2007 ``_ * Derek Molloy, Exploring Beaglebone, Chapter 16: Embedded Kernel Programming ``_, Github ``_ * Derek Molloy, Writing a Linux Kernel Module - Part 1: https://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction/ - Part 2: https://derekmolloy.ie/writing-a-linux-kernel-module-part-2-a-character-device/ - Part 3: https://derekmolloy.ie/kernel-gpio-programming-buttons-and-leds/ * Jürgen Quade, Eva-Katharina Kunst, Linux-Treiber entwickeln, 4. Auflage, dpunkt Verlag 2015. ``_ Verwendet Ubuntu 14.04, Kernel 4.0.3, Rasperry Pi 2. **Sonstiges** * ``_ * ``_ * ``_ * Vergangene Projekte im Wahlfach Embedded Linux ``_ * Zwei Artikel aus dem Linux Magazin 7.21 und 8.21 zu "Linux From Scratch" (LFS, ``_) ``_, `Links dazu `_. Auch interessant ist das *Pi-LFS* Projekt von Brandl und Saufler aus dem Jahr 2015: ``_. Der Quelltext ist im Archiv ``_. **Übersichten, Quickrefs, etc.** * Tmux Quickref https://hhoegl.informatik.hs-augsburg.de/pub/tmux/tmux-quickref/index.html * Freies Buch "LPIC Essentials" https://www.tuxcademy.org/product/lxes/ * Put yourself in command https://flossmanuals.net, https://archive.flossmanuals.net/command-line/ * Siehe Infos zum LPIC Vorbereitungskurs https://tha.de/~hhoegl/home/LPIC * Buch "Efficient Linux at the Command Line" https://learning.oreilly.com/library/view/efficient-linux-at/9781098113391/ * Umfangreiches Schulungsmaterial von `Bootlin `_ (ehem. "Free Electrons") https://bootlin.com/docs * Schnellreferenzen http://www.pixelbeat.org/cmdline.html http://www.commandlinefu.com https://www.olimex.com/wiki/Linux-Commands (statt ifconfig, route, netstat, iwconfig nun ip und iw verwenden) * Git Cheat Sheet im Linux-Magazin 7.2024 ``_ * Bücher von Derek Molloy (Dublin City University) Exploring BeagleBone https://exploringbeaglebone.com, https://learning.oreilly.com/library/view/exploring-beaglebone-2nd/9781119533160/ Exploring Raspberry Pi https://www.exploringrpi.com * Bone101 https://beagleboard.github.io/bone101/Support/bone101/ * Brian Ward, How Linux Works, 3rd edition, No Starch Press, 2021. https://learning.oreilly.com/library/view/how-linux-works/9781098128913 * Sehr schönes Embedded Linux Tutorial in fünf Teilen von George Hilliard. Es ist 2019/2020 entstanden und verwendet den Raspberry Zero W. https://www.thirtythreeforty.net/series/mastering-embedded-linux/ * Dieser Text wird im Buch von Simmonds empfohlen: "SO YOU WANT TO BUILD AN EMBEDDED LINUX SYSTEM?" https://jaycarlson.net/embedded-linux/ **Praktische Embedded Linux Anwendungen** * TSGRain Beregnungssteuerung - Kurze Beschreibung ``_ - Kurzer Übersichtsartikel https://www.hs-augsburg.de/Informatik/Eine-moderne-Beregnungssteuerung-fuer-Tennisanlagen - Code, Bilder, Schaltplan, Teileliste ``_ * "Eulenfunk" Internet Radio https://github.com/studentkittens/eulenfunk. Das war ein Projekt im Sommer 2016 von ein paar Master-Studierenden.