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)
1. Treffen (26.3.2024)
Verschiedene Boards von 2000 bis jetzt elinux/memo-02.pdf
Musterbeispiel „Beregnungssteuerung“ elinux/memo-01.pdf
Übungen elinux/uebungen
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 elinux/uebungen. 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)
elinux/2024/elinux-remote/README.md
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
elinux/2024/Lichee_RV_Nano.pdf (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
Notizen.md
in elinux/2024/MicroSD-Karten/24-1/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:
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)
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: elinux/kt/kt-134.pdf. (Quelltext)
„Best Practices“ (von Harald Seiler, https://denx.de, 2022) Folien/seiler-bp.pdf
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:
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
elinux/memo-07.pdf (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“ undlibgpiod
verwenden.https://gitlab.informatik.hs-augsburg.de/domokun/elinux_demos
Im
material
Repo sind im Ordnertiming
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 Ordnerperiodic
:
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 (elinux/kt/kt-64.pdf)
Device Trees (aktueller Stand, dynamisch, Overlay, …) (elinux/kt/kt-93.pdf)
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, Yocto Tutorial, iX 2/3/4-2015
Teil 1 (QEmu) elinux/yocto/ix-2-2015-yocto-1.pdf
Teil 2 (RPi) elinux/yocto/ix-3-2015-yocto-2.pdf
Teil 3 (Arduino Galileo) elinux/yocto/ix-4-2015-yocto-3.pdf
Bootlin.com Yocto Training (BeagleBone Black, STM32MP1)
Phytec Yocto Anleitung (Beispielhafte Anleitung eines Board-Herstellers)
Die Yocto Distribution „OpenSTLinux“ für den STM32MP1 (Yocto-basierte Distro des Chip-Herstellers ST Micro https://www.st.com)
„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, elinux/yocto/yocto-lj-300-2019.pdf
Literatur zu Software Update
Update-Verfahren, MELPv3, Kap. 10
Artikel aus iX 12.2022 „IoT-Geräte-Updates automatisieren“ elinux/ix.2022.12.IoT-Update.pdf
Linux Magazin, Kern-Technik #121 (Update Verfahren, RAUC), elinux/kt/kt-121.pdf
Kern-Technik #122, konkretes RAUC Beispiel elinux/kt/kt-122.pdf
Siehe auch das Software-Archiv elinux/kt/LM_2022-07_064_47348.zip dazu.
SWupdate https://swupdate.org, https://github.com/sbabic/swupdate
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/
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
Carsten Emde, HOWTO: Cyclic execution of a user program function
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 https://github.com/Johannes4Linux, Videos — für Raspberry Pi 3; CD4543B Siebensegment-Dekoder.
Valerie Henson, /dev/hello_world: A Simple Introduction to Device Drivers under Linux, 2007
elinux/kerneltreiber/valerie-henson-device-drivers-hello.pdf
Derek Molloy, Exploring Beaglebone, Chapter 16: Embedded Kernel Programming https://www.exploringbeaglebone.com/chapter16/index.html, Github https://github.com/derekmolloy/exploringBB.git
Derek Molloy, Writing a Linux Kernel Module
Jürgen Quade, Eva-Katharina Kunst, Linux-Treiber entwickeln, 4. Auflage, dpunkt Verlag 2015. https://learning.oreilly.com/library/view/linux-treiber-entwickeln-4th/9781457196669 Verwendet Ubuntu 14.04, Kernel 4.0.3, Rasperry Pi 2.
Sonstiges
Vergangene Projekte im Wahlfach Embedded Linux ElinuxProjekte
Zwei Artikel aus dem Linux Magazin 7.21 und 8.21 zu „Linux From Scratch“ (LFS, https://www.linuxfromscratch.org) elinux/Linux-Magazin-LFS-2021.pdf, Links dazu.
Auch interessant ist das Pi-LFS Projekt von Brandl und Saufler aus dem Jahr 2015: elinux/pi-lfs/html/index.html. Der Quelltext ist im Archiv elinux/pi-lfs/pi-lfs.tar.gz.
Übersichten, Quickrefs, etc.
Tmux Quickref
https://hhoegl.informatik.hs-augsburg.de/pub/tmux/tmux-quickref/
Freies Buch „LPIC Essentials“
Put yourself in command
https://flossmanuals.net, https://archive.flossmanuals.net/command-line/
Siehe Infos zum LPIC Vorbereitungskurs https://hhoegl.informatik.hs-augsburg.de/hhwiki/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“)
Schnellreferenzen
http://www.pixelbeat.org/cmdline.html
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 elinux/git-cheatsheet.pdf
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?“
Praktische Embedded Linux Anwendungen
TSGRain Beregnungssteuerung
Kurze Beschreibung elinux/memo-01.pdf
Kurzer Übersichtsartikel
https://www.hs-augsburg.de/Informatik/Eine-moderne-Beregnungssteuerung-fuer-Tennisanlagen
Code, Bilder, Schaltplan, Teileliste https://hhoegl.de/tsgrain.html
„Eulenfunk“ Internet Radio https://github.com/studentkittens/eulenfunk. Das war ein Projekt im Sommer 2016 von ein paar Master-Studierenden.