## page was renamed from EmbeddedSystemsAnleitungen #language de #format rst ====================== Embedded Systems 2 FAQ ====================== .. contents:: Inhalt .. sectnum:: Test der virtuellen Maschine ---------------------------- (Ab WS23/24 verwenden wir nicht mehr die VirtualBox VM, sondern steigen auf das *Windows Subsystem for Linux* in der Version 2 (WSL2) um) 20\. Oktober 2020 Ich habe den Test auf einem Notebook Lenovo T420 gemacht (Core i5). Als Host-Betriebssystem ist ebenfalls Xubuntu Linux 20.04.1 installiert. * Anleitung zum Einrichten der VM https://ti-wiki.informatik.hs-augsburg.de/doku.php?id=rt-labor_rtvm * Virtualbox 6.1.14 * Gastbetriebsystem: Xubuntu Linux (Ubuntu 20.04.1 LTS "focal") * Immer als gewöhnlicher User "rtlabor" arbeiten. Für Administrationsaufgaben immer nur kurzzeitig Superuser (root) werden. * Praktisch: Clipboard zwischen Host- und Gastbetriebssystem einrichten (VM Settings -> General -> Advanced -> Shared Clipboard : auf "bidirectional" setzen) * Software-Updater starten ("Aktualisierungsverwaltung") * Pakete nachinstallieren (gdb benötigt diese): - libncurses5 - libpython2 (es kann auch sein, dass dieses Paket bei Ihnen ``libpython2.7`` heisst!) - python3-docutils (das Programm ``rst2html.py`` wird in manchen Makefiles benoetigt) * USB Anschluss für den OpenOCD in VirtualBox konfigurieren durch Einrichten eines USB Filters. Können Sie auch erst mal überspringen, falls Sie noch kein Board haben. Die Ausgabe des Kommandos ``lsusb`` auf der VM muss folgende Zeile enthalten: :: Bus 002 Device 005: ID 0483:374b STMicroelectronics ST-LINK/V2.1 * Die Datei ``~/.tmux-conf`` muss richtig **~/.tmux.conf** heissen! Also umbenennen, wenn Sie mit tmux arbeiten möchten. Der Inhalt kann gerne nach Geschmack angepasst werden. In meiner Vorgabe ist der Standard Kommando-Präfix Ctrl-b durch Ctrl-z ersetzt! * Auch ``~/.vimrc`` anpassen, wenn man möchte. * Einen ssh Schlüsselpaar anlegen. Ich habe das mit dem Aufruf von ``ssh-keygen -t ed25519`` erledigt, so wie das in https://gitlab.informatik.hs-augsburg.de/help/user/ssh.md beschrieben ist. Der öffentliche Schlüssel (~/.ssh/id_ed25519.pub) muss in gitlab eingetragen werden. Nur wenn man das gemacht hat, kann man ein git Repository per ssh://... klonen. * Das ``estool`` Programm updaten: Git Repo klonen:: git clone ssh://git@gitlab.informatik.hs-augsburg.de:2222/hhoegl/estool.git Installieren, bzw Updaten wegen der ``-U`` Option: :: cd estool pip3 install -U . Der Update erfolgt mit User Rechten, da die Installation im Home-Verzeichnis unter ``~/.local`` liegt. Es muss danach mindestens folgende Version ausgegeben werden:: rtlabor@rtvm:~$ estool --version ESTOOL version 0.25 (2020-10-22) * Beispiel "starter" testen (vorher das Nucleo Board anstecken!): :: cd ~/es2/starter git pull # Updaten estool --start-oocd # OpenOCD im Hintergrund starten. Siehe auch --ask-oocd make # kompilieren make flash # Programm auf STM32 uebertragen. USB Verbindung zum Board muss funktionieren. # Ab hier läuft das Programm auf dem STM32 make gdb # Debugger starten. Verlassen mit "q" oder "quit" estool --stop-oocd # OpenOCD beenden Im Gitlab ist das Beispiel unter https://gitlab.informatik.hs-augsburg.de/es2/es2-nucl476/starter zu finden. Wer im ``gdb`` schon mal eine kleine Übung machen möchte, der kann "n [RET]" eingeben, also ein n (= next) und die Eingabetaste ("Return"). Damit wird die nächste Quelltextzeile im Debugger ausgeführt. Danach gibt man nur noch wiederholt [RET] ein, um Zeilen auszuführen. So sah das ungefähr aus: `Desktop mit gdb `_ RTLAB-Remote ------------ Der Rechner `rtlab-remote` hat eine Intel i7-3770K CPU mit 8 Kernen und 16 GByte Speicher. Einloggen ````````` VPN Verbindung zur Hochschule aufbauen ``ssh @rtlab-remote.informatik.hs-augsburg.de`` In ``~/.bashrc`` aufnehmen:: export PATH=/opt/openocd-dev/bin:/opt/gcc-arm-none-eabi-9-2020-q2-update/bin:$PATH . /opt/py_venv3.8.3/bin/activate Datei einlesen mit ``. ~/.bashrc``. Nun sollte das Kommando ``estool`` zur Verfügung stehen. Beispiel "starter" von gitlab holen und kompilieren ``````````````````````````````````````````````````` ``git clone ssh://git@gitlab.informatik.hs-augsburg.de:2222/es2/es2-nucl476/starter.git`` Dazu muss vorher der öffentliche ssh Schlüssel in gitlab eingetragen worden sein. In das Verzeichnis ``starter`` wechseln mit ``cd starter`` Das Programm mit ``make`` kompilieren. Die Ausgabe sollte so ausschauen:: (py_venv3.8.3) hhoegl@gorilla:~/gorilla/starter$ make [MKDIR] obj mkdir -p obj [CC] startup.c arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -c -o obj/startup.o Src/startup.c [CC] osc.c arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -c -o obj/osc.o Src/osc.c [CC] usart.c arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -c -o obj/usart.o Src/usart.c [CC] itoa.c arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -c -o obj/itoa.o Src/itoa.c [CC] main.c arm-none-eabi-gcc -g3 -Wall -Wpedantic -Wextra -std=gnu99 -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -c -o obj/main.o Src/main.c arm-none-eabi-gcc -TSTM32L476RG_FLASH.ld -Wl,-Map,main.map -nostdlib -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -nostartfiles -o main.elf obj/startup.o obj/osc.o obj/usart.o obj/itoa.o obj/main.o [SIZE] main.elf arm-none-eabi-size main.elf text data bss dec hex filename 1280 8 1572 2860 b2c main.elf arm-none-eabi-objcopy -Obinary main.elf main.bin arm-none-eabi-objdump -S main.elf > main.lst Board mit estool verwalten `````````````````````````` Prüfen :: $ estool --bs-check Board server running No board reserved Reservieren Die Boards werden durch die Zahlen 0, 1, 2, 3 gekennzeichnet. Das erste Board hat also die Id ``0``. Man kann nur ein Board zu einer Zeit reservieren. :: $ estool --bs-reserve Reserved board 0 for user hhoegl Started Openocd (pid 2382) Prüfen :: $ estool --bs-check Board server running Board 0 reserved for user hhoegl Openocd is running (pid=2382, telnet_port=4445 gdb_port=3334) Usage time: 2/20 min Board Access (use VPN!): - Webcam (Video Stream): http://rtlab-remote.informatik.hs-augsburg.de:8091 (nur HTTP, kein HTTPS!) - Saleae Logic (VNC): rtlab-remote.informatik.hs-augsburg.de:5901 - Nucleo serial port: /dev/rtlab/nucleo1_tty Freigeben :: $ estool --bs-free Freeing board 0 for user hhoegl Board zurücksetzen :: $ estool --bs-erc reset Eingänge einlesen :: $ estool --bs-erc leds Ausgänge setzen :: $ estool --bs-erc buttons=8 # user button druecken (log. 0) ... $ estool --bs-erc buttons=0 # ... und wieder loslassen (log. 1) Ausgänge lesen :: $ estool --bs-erc buttons Programm flashen und ausführen `````````````````````````````` ``$ make flash`` Serielle Schnittstelle `````````````````````` Die serielle Schnittstelle zum Ziel-Mikroprozessor wird über die Gerätedatei geöffnet, die beim Kommando ``--bs-check`` als "Nucleo serial port: ..." angezeigt wird. Wenn diese Gerätedatei z.B. /dev/rtlab/nucleo1_tty ist, dann kann man auf dem Server das Kommando :: $ picocom -b 9600 /dev/rtlab/nucleo1_tty verwenden. Die Zahl 9600 ist die Baudrate. Sie muss identisch sein mit der Baudrate, die auf dem Mikrocontroller programmiert wurde. Picocom beendet man mit Ctrl-A-X (Ctrl drücken, dann nacheinander A und X). Es sind ausserdem die Programme ``minicom`` und ``putty`` installiert. Es gibt noch eine zweite Möglichkeit: Dazu gibt man einfach ``estool --termemu`` ein. Das wird im Makefile beim Target ``make serial`` verwendet. In diesem Fall ist das Kommando in ``.estool/estool.yaml`` vorkonfiguriert. Der übliche Eintrag in dieser Datei ist:: termemu-command: [picocom, -b, '9600', --quiet, '{termemu_device}'] Den Platzhalter ``{termemu_device}`` füllt ``estool`` selber aus mit der aktuellen Gerätedatei zur seriellen Schnittstelle. Man kann dieses Kommando jederzeit ändern. Wichtig ist, dass man die korrekte Schreibweise (eckige Klammern, Komma) einhält. Board über Webcam betrachten ```````````````````````````` VPN Verbindung zur Hochschule aufbauen. Den Webcam-Videostrom betrachtet man z.B. mit ``vlc``: ``vlc http://rtlab-remote.informatik.hs-augsburg.de:8091`` kein HTTPS!) Hinweis: Der genaue URL wird von ``estool --bs-check`` ausgegeben, falls Board reserviert wurde. GUI des Saleae Logikanalysators betrachen ````````````````````````````````````````` Das Programm ``Logic`` läuft auf dem rtlab-remote Rechner. Einen VNC Client installieren, z.B. Tiger-VNC oder Remmina. Tiger VNC: ``apt install tigervnc-viewer tigervnc-common`` VPN Verbindung zur Hochschule aufbauen ``$ vncviewer rtlab-remote.informatik.hs-augsburg.de:5901`` Als Passwort ``mypasswd`` eingeben. Hinweis: IP-Nummer und Port wird von ``estool --bs-check`` ausgegeben, falls Board reserviert wurde. Boardserver ``````````` Auf dem rtlab-remote Server läuft das Programm ``boardserver`` im Hintergrund, es erledigt alle Sachen die beim Reservieren und Freigeben der Boards nötig sind. Der Quelltext (Python) ist frei, siehe https://gitlab.informatik.hs-augsburg.de/hhoegl/boardserver Auch ``estool`` kann man sich ansehen, siehe https://gitlab.informatik.hs-augsburg.de/hhoegl/estool Für Verbesserungen und Fehlerberichte bin ich immer dankbar. Rekursive Suche in Verzeichnissen --------------------------------- * Zum Beispiel mit ``rg`` Kommando ("ripgrep", https://github.com/BurntSushi/ripgrep). Ist auf dem RTLab-Remote Server installiert. * Suche nach dem String "EXTI" in allen .c und .h Dateien in und unter dem aktuellen Verzeichnis: :: rg -g '*.[ch]' EXTI * Kommandoübersicht: https://www.philipdaniels.com/blog/2019/ripgrep-cheatsheet Microcom holen und übersetzen ----------------------------- (Hinweis: Microcom sollte auch in den Distributionen enthalten sein. In Debian/Ubuntu einfach installieren mit ``apt install microcom``). :: sudo apt install libreadline-dev git clone git://git.pengutronix.de/tools/microcom cd microcom autoreconf -i ./configure make # nun sollte man das "microcom" Executable im aktuellen Verzeichnis haben # Default speed ist 115200, default port /dev/ttyS0 microcom --speed=115200 --port=/dev/ttyS0 Beenden: Mit Ctrl-\ kommt man zu einem Menue, dann "quit" tippen. Ctrl ist auf deutschen Tastaturen die Strg Taste. OpenOCD 0.12.0 kompilieren -------------------------- (Hinweis: OpenOCD ist in allen gängigen Distributionen enthalten und ist somit einfach z.B. mit ``sudo apt install openocd`` zu installieren) 102.10.2023 1. OpenOCD Archiv holen :: wget https://hhoegl.informatik.hs-augsburg.de/es2/tools/openocd-0.12.0.tar.bz2 2. Ein paar Abhängigkeiten installieren (falls sie noch nicht installiert sind). :: apt install libtool pkg-config libusb-1.0-0-dev automake autoconf 3. Entpacken :: tar jxvf openocd-0.12.0.tar.bz2 cd openocd-0.12.0 4. Bootstrap ausführen :: ./bootstrap 5. Konfigurieren und kompilieren :: ./configure --enable-stlink --prefix=/opt/openocd-0.12.0 make 6. Installieren :: sudo make install