6912
Kommentar:
|
← Revision 108 vom 2024-04-02 10:25:23 ⇥
11339
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 5: | Zeile 5: |
Pflichtversuche mit dem Beagle Bone Black (BBB) =============================================== H\. Högl, 2016, 2017, 2018 |
Pflichtversuche mit dem Beagle Bone Black ========================================= H\. Högl, 2016, 2017, 2018, 2021 |
Zeile 11: | Zeile 11: |
Achtung: Eine neuere Version dieses Textes ist unter https://hhoegl.informatik.hs-augsburg.de/elinux/kurs/uebungen. .. contents:: Inhalt .. sectnum:: |
|
Zeile 16: | Zeile 21: |
Zugang zu einem Embedded Linux Rechner ist fast immer mit ``ssh`` auf der Kommandozeile -- ohne grafische |
Zugang zu einem Embedded Linux Rechner ist fast immer über die Konsole (serielle Schnittstelle) oder mit ``ssh`` auf der Kommandozeile -- ohne grafische |
Zeile 20: | Zeile 25: |
Oberfläche installieren. #. Bereiten Sie den Hostrechner zur Arbeit mit dem BBB vor (Terminalemulator z.B. picocom oder kermit, NFS, Crosscompiler, Netzwerkeinrichtung, ...) Das BBB kennenlernen -------------------- Ich setze voraus, dass bereits ein lauffähiges Linux auf dem BBB im eMMC Speicher gespeichert ist. Es ist keine MicroSD-Karte nötig. |
Oberfläche installieren, auch gerne virtuell über VirtualBox, z.B. Debian 11 Server Image, 64bit, https://www.osboxes.org/debian. #. Bereiten Sie den Hostrechner (d.h. Ihr PC/Notebook) zur Arbeit mit dem BBB vor (Terminalemulator, z.B. picocom, microcom oder kermit, NFS, Crosscompiler, Netzwerkeinrichtung, ...) #. Arbeiten Sie sich in einen *Terminal Multiplexer* ein. Ich empfehle ``tmux``. Diesen können Sie sowohl auf dem Entwicklungsrechner als auch auf dem Embedded Linux Target verwenden. https://github.com/tmux/tmux/wiki Material zu tmux: http://hhoegl.informatik.hs-augsburg.de/pub/tmux/ #. Machen Sie sich mit den wichtigsten Bauteilen und Schnittstellen auf dem BBB vertraut. Beim Draufklicken werden die folgenden Bilder grösser (das erste Bild habe ich mit "inkscape" selbst gezeichnet, das zweite Bild stammt von https://beagleboard.org/Support/bone101): | .. figure:: http://hhoegl.informatik.hs-augsburg.de/elinux/kurs/bbb.svg :width: 600px :target: http://hhoegl.informatik.hs-augsburg.de/elinux/kurs/bbb.svg | .. figure:: http://hhoegl.informatik.hs-augsburg.de/elinux/kurs/cape-headers.png :width: 600px :target: http://hhoegl.informatik.hs-augsburg.de/elinux/kurs/cape-headers.png .. Alternative: beaglebone_pinout.png Das BBB im Betrieb kennenlernen ------------------------------- Normalerweise sollte im eMMC Speicher ein lauffähiges Linux vorhanden sein. Früher war das ein `Ångström Linux <https://en.wikipedia.org/wiki/%C3%85ngstr%C3%B6m_distribution>`_, aktuell ist es ein Debian Linux. Falls das BBB nicht aus dem eMMC Speicher bootet, installieren Sie zunächst den eMMC Speicher neu (aktuell ist es ein Debian 10.X). |
Zeile 34: | Zeile 66: |
#. Üben Sie häufig wiederkehrende Aufgaben | #. Üben Sie häufig wiederkehrende Aufgaben. Sie arbeiten dazu immer auf der Kommandozeile! |
Zeile 36: | Zeile 68: |
1. Terminalprogramm mit serieller Schnittstelle verbinden | 1. Terminalprogramm mit serieller Schnittstelle verbinden (siehe den Abschnitt unten zur Konsole) |
Zeile 38: | Zeile 71: |
#. Bootmeldungen betrachten (dmesg) #. Useraccount mit ``adduser`` einrichten (nicht als Root arbeiten) #. Systemzeit setzen mit ``date`` und ``ntpdate`` #. Netzwerkverbindung herstellen |
#. Bootmeldungen betrachten (dmesg) #. Welches Linux haben Sie? (Typ, Version) #. Useraccount mit ``adduser`` einrichten (auf keinen Fall immer als Root arbeiten!) #. Systemzeit setzen mit ``date`` und ``ntpdate`` #. Machen Sie sich mit ``systemd`` vertraut. Übersicht: https://www.linuxtrainingacademy.com/systemd-cheat-sheet - Viewing Systemd Information - Working with Services - Viewing Log Messages - Zeiteinstellungen mit ``timedatectl`` #. Netzwerkverbindung herstellen. Verschiedene Varianten ausprobieren: |
Zeile 45: | Zeile 88: |
- mit WiFi, z.B. über einen USB WiFi Adapter #. Gehen Sie mit ``ssh`` und ``http`` auf das Board. #. Dateien mit ``scp`` zwischen Host und Target übertragen |
- mit WiFi, z.B. über einen USB WiFi Adapter. Ich kann den TPLINK TL-WN725N empfehlen. #. Gehen Sie mit ``ssh`` und ``http`` auf das Board. #. Dateien mit ``scp`` zwischen Host und Target übertragen |
Zeile 50: | Zeile 96: |
in das Internet herstellen (ip, iw, ifconfig, iwconfig, wpa_supplicant) | in das Internet herstellen (ip, iw, ifconfig, iwconfig, wpa_supplicant) |
Zeile 54: | Zeile 101: |
#. Wie kann man den eMMC Speicher komplett neu mit einem Linux beschreiben? |
#. "Erforschen" Sie das Linux auf dem BBB über die ssh oder Konsolenverbindung: - Welches Linux wird verwendet? - Welche Prozesse (Dienste) laufen? Welche Aufgabe haben diese Prozesse? - Welche Pakete sind installiert? - Wie viel Platz belegt das Root Filesystem? Flash Speicher -------------- |
Zeile 62: | Zeile 116: |
Zeile 65: | Zeile 118: |
#. UART-zu-USB Adapter anschliessen, so dass man die Konsole auf dem Hostrechner sehen kann. Das Terminalprogramm ``picocom`` starten mit |
#. Wie kann man den eMMC Speicher komplett neu mit einem Linux beschreiben? Vorher sollte man ein Backup des aktuellen eMMC Speicher machen! Tipp: Es geht mit einem "Flasher Image", das man unter https://beagleboard.org/latest-images bekommt. Konsole ------- #. Schliessen Sie einen UART-zu-USB Adapter an der 6-poligen Pfostenleiste auf dem BBB an, so dass man die Konsole auf dem Hostrechner sehen kann. Das Terminalprogramm ``picocom`` starten mit |
Zeile 76: | Zeile 138: |
- Welchen Vorteil hat diese Konsole im Vergleich mit der ssh Verbindung über USB bzw. Netzwerkkabel? #. Wie konfiguriert man die Netzwerkschnittstelle des BBB? #. Wie konfiguriert man auf dem Hostrechner und dem BBB eine Durchleitung der Netzwerk-Datenpakete vom BBB über den Hostrechner in das Internet? #. Mounten Sie das Homeverzeichnis des BBB mit ``sshfs`` auf dem Hostrechner. #. Stoppen Sie den Bootvorgang in der Konsole, so dass Sie auf dem U-Boot Prompt landen. - Wie sieht man alle Umgebungsvariablen an? - Booten über den eMMC Speicher. - Booten über die SD Karte. - Booten über das Netzwerk mit tftp oder nfs. #. "Erforschen" Sie das Linux auf dem BBB über die ssh oder Konsolenverbindung: - Welches Linux wird verwendet? - Welche Prozesse (Dienste) laufen? - Welche Pakete sind installiert? - Wie viel Platz belegt das Root Filesystem? #. Installieren Sie auf dem Hostrechner eine Cross-Toolchain und kompilieren |
Welchen Vorteil hat diese Konsole im Vergleich mit der ssh Verbindung über USB bzw. Netzwerkkabel? Alternative Terminal-Emulatoren auf der Kommandozeile sind: - microcom, https://github.com/pengutronix/microcom - ckermit, http://www.columbia.edu/kermit/ck90.html - pyserial/miniterm (Python), https://github.com/pyserial Hostrechner ----------- 1. Mounten Sie das Homeverzeichnis des BBB mit ``sshfs`` auf dem Hostrechner. #. Installieren Sie auf dem Hostrechner eine Cross-GCC Toolchain und kompilieren |
Zeile 110: | Zeile 156: |
Praefix ``arm-linux-gnueabihf-``. |
Präfix ``arm-linux-gnueabihf-``. Auf Ubuntu und verwandten Linuxen gibt es das Paket ``gcc-arm-linux-gnueabi``. Das ist der einfachste Weg um zu einer Toolchain zu kommen. Eine Alternative ist das "Crosstool-NG": http://crosstool-ng.github.io (so macht es Simmonds in MELP). Ein dritter Weg ist die "Linaro Toolchain", https://www.linaro.org/downloads. |
Zeile 115: | Zeile 168: |
U-Boot ------ 1. Stoppen Sie den Bootvorgang durch sofortiges Drücken der Leertaste in der Konsole bei einem Reboot, so dass Sie auf dem U-Boot Prompt landen. - Wie sieht man die U-Boot Umgebungsvariablen an? - Booten Sie auf dem U-Boot Prompt vom eMMC Speicher. - Booten Sie auf dem U-Boot Prompt von der MicroSD Karte. - Booten Sie auf dem U-Boot Prompt über das Netzwerk mit tftp oder nfs. #. Kompilieren Sie den U-Boot Bootloader aus den aktuellen git Quellen und Updaten Sie ihn auf dem Board. Schnittstellen -------------- 1. Einfache I/O Demo mit Taster und LED: 1. GPIO ueber sysfs einlesen (polling/interrupt) und ausgeben #. Tastendruck wird als Event ueber sysfs erkannt und schaltet LED ein und aus #. Ein Demo-Geraetetreiber faengt den Tastendruck als Interrupt ab und schaltet die LED ein- und aus. Lit.: http://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction GPIOs werden in Molloy, Kap. 6 behandelt. |
|
Zeile 126: | Zeile 208: |
#. Einfache I/O Demo mit Taster und LED: - GPIO ueber sysfs einlesen (polling/interrupt) und ausgeben - Tastendruck wird als Event ueber sysfs erkannt und schaltet LED ein und aus - Ein Demo-Geraetetreiber faengt den Tastendruck als Interrupt ab und schaltet die LED ein- und aus. Lit.: http://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction #. Machen Sie sich mit den Bussen I2C und SPI vertraut. #. Im gitlab Repository https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/elinux.git finden Sie ein paar Beispiele die demonstrieren, wie man zeitliches Verhalten in Linux programmiert. Vollziehen Sie die Beispiele in den Verzeichnissen ``timing`` und ``bbb-rt-test/rt-demos`` nach. |
Der UART wird in Molloy, Kap. 8 behandelt. #. Machen Sie sich mit den Bussen `I2C <https://de.wikipedia.org/wiki/I%C2%B2C>`_ und `SPI <https://de.wikipedia.org/wiki/Serial_Peripheral_Interface>`_ vertraut. Beide werden in Molloy, Kap. 8 behandelt. Auch `1-Wire Bus <https://de.wikipedia.org/wiki/1-Wire>`_ wäre eine gute Wahl an Hand des Temperatursensors DS18B20. Ein Tutorial von vielen im Netz zu 1-Wire: http://www.bonebrews.com/temperature-monitoring-with-the-ds18b20-on-a-beaglebone-black/ |
Zeile 151: | Zeile 225: |
Das ist ungefähr der Inhalt von Simmonds MELP, ch. 6 "Selecting a Build System". |
|
Zeile 175: | Zeile 251: |
Programmieraufgaben ------------------- .. In manchen vergangenen E-Linux Veranstaltungen waren diese Aufgaben eine "Vorübung" zu dem später durchgeführten Projekt. Siehe eine kurze Anforderungsliste an Projekte (`<ElinuxProjekt>`_) und eine Liste der vergangenen Projekte (`<ElinuxProjekte>`_). Im Sommer 2021 wir es keine Projekte geben, sondern nur Pflichtaufgaben. Kleiner Server `````````````` Das soll ein Gerüst für einen Server werden, der automatisch nach dem Booten startet (über SystemV init oder systemd). Mögliche Programmiersprachen sind C, C++, Python, Go und JavaScript (Node.JS). Der Server sollte auch einen Logging-Mechanismus haben. .. Zeitliches Verhalten programmieren ("Echtzeit") ``````````````````````````````````````````````` Im gitlab Repository https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/elinux.git finden Sie ein paar Beispiele die demonstrieren, wie man zeitliches Verhalten in Linux programmiert. Vollziehen Sie die Beispiele in den Verzeichnissen ``timing`` und ``bbb-rt-test/rt-demos`` nach. |
Pflichtversuche mit dem Beagle Bone Black
H. Högl, 2016, 2017, 2018, 2021
Link zur Veranstaltung: http://hhoegl.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux
Achtung: Eine neuere Version dieses Textes ist unter https://hhoegl.informatik.hs-augsburg.de/elinux/kurs/uebungen.
Inhalt
1 Vorkenntnisse
- Üben Sie das Arbeiten auf der Kommandozeile. Der typische Zugang zu einem Embedded Linux Rechner ist fast immer über die Konsole (serielle Schnittstelle) oder mit ssh auf der Kommandozeile -- ohne grafische Oberfläche. Sie können das sehr gut auf dem PC/Notebook simulieren, wenn Sie eine Linux Distribution ohne grafische Oberfläche installieren, auch gerne virtuell über VirtualBox, z.B. Debian 11 Server Image, 64bit, https://www.osboxes.org/debian.
- Bereiten Sie den Hostrechner (d.h. Ihr PC/Notebook) zur Arbeit mit dem BBB vor (Terminalemulator, z.B. picocom, microcom oder kermit, NFS, Crosscompiler, Netzwerkeinrichtung, ...)
Arbeiten Sie sich in einen Terminal Multiplexer ein. Ich empfehle tmux. Diesen können Sie sowohl auf dem Entwicklungsrechner als auch auf dem Embedded Linux Target verwenden.
https://github.com/tmux/tmux/wiki
Material zu tmux: http://hhoegl.informatik.hs-augsburg.de/pub/tmux/
- Machen Sie sich mit den wichtigsten Bauteilen und Schnittstellen auf dem BBB vertraut. Beim Draufklicken werden die folgenden Bilder grösser (das erste Bild habe ich mit "inkscape" selbst gezeichnet, das zweite Bild stammt von https://beagleboard.org/Support/bone101):
2 Das BBB im Betrieb kennenlernen
Normalerweise sollte im eMMC Speicher ein lauffähiges Linux vorhanden sein. Früher war das ein Ångström Linux, aktuell ist es ein Debian Linux. Falls das BBB nicht aus dem eMMC Speicher bootet, installieren Sie zunächst den eMMC Speicher neu (aktuell ist es ein Debian 10.X).
- Lernen Sie den schematischen Aufbau des Boards kennen mit den wesentlichen Bausteinen, die darauf sind (Blockschaltbild).
Üben Sie häufig wiederkehrende Aufgaben. Sie arbeiten dazu immer auf der Kommandozeile!
- Terminalprogramm mit serieller Schnittstelle verbinden (siehe den Abschnitt unten zur Konsole)
- Einloggen
- Bootmeldungen betrachten (dmesg)
- Welches Linux haben Sie? (Typ, Version)
- Useraccount mit adduser einrichten (auf keinen Fall immer als Root arbeiten!)
- Systemzeit setzen mit date und ntpdate
Machen Sie sich mit systemd vertraut.
Übersicht: https://www.linuxtrainingacademy.com/systemd-cheat-sheet
- Viewing Systemd Information
- Working with Services
- Viewing Log Messages
- Zeiteinstellungen mit timedatectl
Netzwerkverbindung herstellen. Verschiedene Varianten ausprobieren:
- mit USB Kabel
- mit Kabel über eth Schnittstelle
- mit WiFi, z.B. über einen USB WiFi Adapter. Ich kann den TPLINK TL-WN725N empfehlen.
- Gehen Sie mit ssh und http auf das Board.
- Dateien mit scp zwischen Host und Target übertragen
- Vom Target aus über den Hostrechner eine Netzwerkverbindung in das Internet herstellen (ip, iw, ifconfig, iwconfig, wpa_supplicant)
- System auf der Kommandozeile u.a. mit procfs erforschen (ls, ps, tree, cat, less, vi, uname, mount, df, du, fdisk, ...)
"Erforschen" Sie das Linux auf dem BBB über die ssh oder Konsolenverbindung:
- Welches Linux wird verwendet?
- Welche Prozesse (Dienste) laufen? Welche Aufgabe haben diese Prozesse?
- Welche Pakete sind installiert?
- Wie viel Platz belegt das Root Filesystem?
3 Flash Speicher
- Wie behandelt man eine rohe SD Karte mit fdisk und mkfs.vfat bzw. mkfs.ext4, so dass man darauf ein bootfähiges Linux installieren kann?
- Wie bootet man von der SD Karte?
Wie kann man den eMMC Speicher komplett neu mit einem Linux beschreiben? Vorher sollte man ein Backup des aktuellen eMMC Speicher machen!
Tipp: Es geht mit einem "Flasher Image", das man unter https://beagleboard.org/latest-images bekommt.
4 Konsole
Schliessen Sie einen UART-zu-USB Adapter an der 6-poligen Pfostenleiste auf dem BBB an, so dass man die Konsole auf dem Hostrechner sehen kann. Das Terminalprogramm picocom starten mit
picocom -b 115200 /dev/ttyUSB0
(aufpassen: Manche Linux Distributionen verwenden nur 9600 Baud)
Welchen Vorteil hat diese Konsole im Vergleich mit der ssh Verbindung über USB bzw. Netzwerkkabel?
Alternative Terminal-Emulatoren auf der Kommandozeile sind:
- microcom, https://github.com/pengutronix/microcom
- ckermit, http://www.columbia.edu/kermit/ck90.html
- pyserial/miniterm (Python), https://github.com/pyserial
5 Hostrechner
- Mounten Sie das Homeverzeichnis des BBB mit sshfs auf dem Hostrechner.
Installieren Sie auf dem Hostrechner eine Cross-GCC Toolchain und kompilieren Sie ein kleines Demoprogramm. Übertragen Sie es mit scp auf das BBB und führen Sie es aus. Die einzelnen Programme des Cross-GCC haben den Präfix arm-linux-gnueabihf-.
Auf Ubuntu und verwandten Linuxen gibt es das Paket gcc-arm-linux-gnueabi. Das ist der einfachste Weg um zu einer Toolchain zu kommen. Eine Alternative ist das "Crosstool-NG": http://crosstool-ng.github.io (so macht es Simmonds in MELP). Ein dritter Weg ist die "Linaro Toolchain", https://www.linaro.org/downloads.
Falls Sie einen C Compiler auf dem BBB haben, kompilieren Sie das Programm auch nativ und testen Sie es.
6 U-Boot
Stoppen Sie den Bootvorgang durch sofortiges Drücken der Leertaste in der Konsole bei einem Reboot, so dass Sie auf dem U-Boot Prompt landen.
- Wie sieht man die U-Boot Umgebungsvariablen an?
- Booten Sie auf dem U-Boot Prompt vom eMMC Speicher.
- Booten Sie auf dem U-Boot Prompt von der MicroSD Karte.
- Booten Sie auf dem U-Boot Prompt über das Netzwerk mit tftp oder nfs.
- Kompilieren Sie den U-Boot Bootloader aus den aktuellen git Quellen und Updaten Sie ihn auf dem Board.
7 Schnittstellen
Einfache I/O Demo mit Taster und LED:
- GPIO ueber sysfs einlesen (polling/interrupt) und ausgeben
- Tastendruck wird als Event ueber sysfs erkannt und schaltet LED ein und aus
Ein Demo-Geraetetreiber faengt den Tastendruck als Interrupt ab und schaltet die LED ein- und aus.
Lit.: http://derekmolloy.ie/writing-a-linux-kernel-module-part-1-introduction
GPIOs werden in Molloy, Kap. 6 behandelt.
Machen Sie ein einfaches Programm zum Ansteuern der seriellen Schnittstelle in C/C++ und Python. Sie sollten die Schnittstelle öffnen, ein paar Zeichen schreiben und danach lesen, am Ende wieder schliessen. Man sollte den Code mit einer simplen Verbindung zwischen dem TX- (senden) und RX-Signal testen können.
Hilfreich sind folgende Texte:
Der UART wird in Molloy, Kap. 8 behandelt.
Machen Sie sich mit den Bussen I2C und SPI vertraut. Beide werden in Molloy, Kap. 8 behandelt.
Auch 1-Wire Bus wäre eine gute Wahl an Hand des Temperatursensors DS18B20.
Ein Tutorial von vielen im Netz zu 1-Wire: http://www.bonebrews.com/temperature-monitoring-with-the-ds18b20-on-a-beaglebone-black/
8 Build-Umgebungen
Das ist ungefähr der Inhalt von Simmonds MELP, ch. 6 "Selecting a Build System".
Bauen Sie ein Root-Filesystem mit Kernel und U-Boot aus den folgenden Distributionen:
- Buildroot
- Yoctoproject
Installieren Sie es auf einer MicroSD-Karte und testen Sie es auf dem BBB. Es soll auch der Bootloader U-Boot und die Cross-Toolchain dabei entstehen.
Aufgaben mit dem Kernel in der Bau-Umgebung
- Konfigurieren
- Vorhandene Treiber aktivieren/deaktivieren
- Eigenen (Dummy) Treiber einbauen
- Updaten auf eine andere Kernel Version
Aufgaben mit dem Root Filesystem in der Bau-Umgebung
- Pakete aktivieren/deaktivieren
- Eigene Pakete einbauen
9 Programmieraufgaben
9.1 Kleiner Server
Das soll ein Gerüst für einen Server werden, der automatisch nach dem Booten startet (über SystemV init oder systemd). Mögliche Programmiersprachen sind C, C++, Python, Go und JavaScript (Node.JS). Der Server sollte auch einen Logging-Mechanismus haben.