1 Embedded Systems 2 FAQ¶
1.1 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 inhttps://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
1.2 RTLAB-Remote¶
Der Rechner rtlab-remote hat eine Intel i7-3770K CPU mit 8 Kernen und 16 GByte Speicher.
1.2.1 Einloggen¶
VPN Verbindung zur Hochschule aufbauen
ssh <rzlogin>@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.
1.2.2 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
1.2.3 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
1.2.4 Programm flashen und ausführen¶
$ make flash
1.2.5 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.
1.2.6 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.
1.2.7 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.
1.2.8 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.
1.3 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
1.4 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.
1.5 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
OpenOCD Archiv holen
wget https://hhoegl.informatik.hs-augsburg.de/es2/tools/openocd-0.12.0.tar.bz2
Ein paar Abhängigkeiten installieren (falls sie noch nicht installiert sind).
apt install libtool pkg-config libusb-1.0-0-dev automake autoconf
Entpacken
tar jxvf openocd-0.12.0.tar.bz2 cd openocd-0.12.0
Bootstrap ausführen
./bootstrap
Konfigurieren und kompilieren
./configure --enable-stlink --prefix=/opt/openocd-0.12.0 make
Installieren
sudo make install