## page was renamed from ElinuxBBB #format rst #language de Pflichtversuche mit dem Beagle Bone Black (BBB) =============================================== H\. Högl, 2016, 2017, 2018 Link zur Veranstaltung: http://hhoegl.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux .. contents:: Inhalt .. sectnum:: Vorkenntnisse -------------- 1. Üben Sie das Arbeiten auf der Kommandozeile. Der typische Zugang zu einem Embedded Linux Rechner ist fast immer 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. #. 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. 1. Lernen Sie den schematischen Aufbau des Boards kennen mit den wesentlichen Bausteinen, die darauf sind (Blockschaltbild). #. Üben Sie häufig wiederkehrende Aufgaben 1. Terminalprogramm mit serieller Schnittstelle verbinden #. Einloggen #. Bootmeldungen betrachten (dmesg) #. Welches Linux haben Sie? (Typ, Version) #. Useraccount mit ``adduser`` einrichten (nicht als Root arbeiten) #. Systemzeit setzen mit ``date`` und ``ntpdate`` #. Netzwerkverbindung herstellen - mit USB Kabel - mit Kabel über eth Schnittstelle - 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 #. 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 Pakete sind installiert? - Wie viel Platz belegt das Root Filesystem? Flash Speicher -------------- #. Wie kann man den eMMC Speicher komplett neu mit einem Linux beschreiben? #. 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? Konsole ------- #. UART-zu-USB Adapter anschliessen, 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? Hostrechner ----------- 1. Mounten Sie das Homeverzeichnis des BBB mit ``sshfs`` auf dem Hostrechner. #. Installieren Sie auf dem Hostrechner eine Cross-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-``. Falls Sie einen C Compiler auf dem BBB haben, kompilieren Sie das Programm auch nativ und testen Sie es. U-Boot ------ 1. 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. Schnittstellen -------------- 1. 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: - http://tldp.org/HOWTO/Serial-Programming-HOWTO - https://pythonhosted.org/pyserial #. 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. Zeitliches Verhalten programmieren ("Echtzeit") ----------------------------------------------- 1. 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. Build-Umgebungen ---------------- 1. 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