Hinweise zu ES2
2024-12-03
Bei den bisherigen Beispielen haben wir “estool” verwendet um
z.B. zu flashen oder den GDB aufzurufen.
Das “estool” ist so gemacht, dass es immer ein Verzeichnis “.estool” im
aktuellen Projekt braucht, in dem Konfigurationsdateien sind, sonst
funktioniert es nicht.
Die einzelnen Schritte im bare-metal-programming-guide [1], also
unserem V3, enthalten dieses .estool
Verzeichnis nicht und
ich möchte es auch nicht hinzufügen. Deswegen geht auch “estool” hier
nicht. Es gibt nun andere Werkzeuge dafuer:
Zum Flashen wird das Programm st-flash
verwendet. Es
ist im Linux Paket stlink-tools
[2] enthalten, das man mit
sudo apt install stlink-tools
installieren muss. Bei allen
Schritten gibt es das Makefile Target flash
, also gibt man
auf der Kommandozeile einfach make flash
, schon ist das
Flashen erledigt.
Zum Aufrufen von GDB gibt es nun das ogdb
Tool [3],
das ich in Rust geschrieben habe. Man kann eine ausführbare Binärdatei
von dem Releases-Link [4] herunterladen. Letzte Woche lief dieses
Programm leider nicht auf einem Virtualbox-Linux, da die dort vorhandene
C-Bibliothek nicht zu dem Programm gepasst hat. Das Programm war
zunächst dynamisch gegen die glibc
gelinkt. Nun habe ich es
neu kompiliert, so dass es komplett statisch gelinkt ist (mit
musl
libc). Es heisst nun
ogdb-0.1.3-static-musl-libc
.
Damit man das Programm verwenden kann muss man es herunterladen und umbenennen
$ mv ogdb-0.1.3-static-musl-libc ogdb
Danach noch auf “ausführbar” setzen:
$ chmod +x ogdb
Zum Schluss sollte man es noch an einen Ort verschieben, an dem
ausführbare Dateien üblicherweise liegen. Ich empfehle im
Home-Verzeichnis (das ist das Verzeichnis in das sie mit
cd ⏎
kommen) einen Ordner bin/
mit
mkdir bin
anzulegen und dort ogdb
ablegen.
Damit es dort gefunden wird muss man noch die PATH
Umgebungsvariable erweitern, so dass der neue Pfad aufgenommen wird. Die
folgenden Kommandos zeigen wie das geht:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ export PATH=$PATH:~/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/hhoegl/bin
Das spezielle Zeichen Tilde (~
) steht für das
Home-Verzeichnis. Es wird expandiert auf das konkrete Verzeichnis (bei
mir) /home/hhoegl
.
Wer es genauer wissen will schaut unter [5] nach. Das freie
Lernmaterial “Linux Essentials” [6] kann ich auch empfehlen. Ein
Tutorial zu make
findet man unter [7].
Anwendung von ogdb
Wichtig ist, dass die Anwendung auf dem Mikrocontroller zunächst
geflasht wurde mit make flash
(siehe oben).
Das Programm ruft im Hintergrund den OpenOCD auf und startet dann
GDB. Es ist also nötig, dass vorher beide installiert werden mit
sudo apt install openocd gdb-multiarch
, sollte das noch
nicht gemacht worden sein. Mit ogdb -h
kann man eine
Hilfetext ausgeben, der die Details erklärt. Der voreingestellte Name
der .elf
Datei ist firmware.elf
, das ist genau
der Name der bei den Bare-Metal Steps verwendet wird. Es reicht also
hier einfach der Aufruf ogdb ⏎
. Sollte die ELF Datei anders
lauten, dann muss man den Namen mit der -e
Option angeben.
Nach dem Starten sieht man den GDB mit “Text User Interface”, wie wir
ihn schon früher verwendet haben. Die Ausführung stoppt am Anfang von
main()
.
Man sollte ein Auge auf die GCC Option -Os
werfen,
die in den Makefiles der einzelnen Schritte verwendet wird. Diese Option
versucht die Programmgrösse zu minimieren. In
step-0-minimal
ist z.B. eine leere main()
Funktion, die durch -Os
einfach entfernt wird, so dass auch
der GDB an der Stelle nicht mehr stoppen kann. Man sollte die
-Os
Option daher aus dem Makefile entfernen.
[1] https://github.com/cpq/bare-metal-programming-guide/tree/main/steps
[2] https://github.com/stlink-org/stlink
[3] https://gitlab.informatik.hs-augsburg.de/hhoegl/ogdb
[4] https://gitlab.informatik.hs-augsburg.de/hhoegl/ogdb/-/releases
[5] https://linuxhandbook.com/add-to-path
[6] https://learning.lpi.org/pdfstore/LPI-Learning-Material-010-160-en.pdf
[7] https://linuxhandbook.com/using-make