Tools, die zur Programmierung benötigt werden
Allgemeine Einführung in gängige Tools: Assembler (as), Linker (ld), Compiler (gcc) und Make
Assembler (as)
Der GNU Assembler as wird verwendet, um Assembler-Code in Maschinen-Code zu übersetzen.
Verwendung:
as -o output.o input.s
Für mehr Informationen zum Assembler findest du unter GNU Assembler
Linker (ld)
Der GNU Linker ld wird verwendet, um Object-Files zu einem ausführbaren Programm zu verknüpfen.
Verwendung:
ld -o output output.o
Mehr Informationen erhältst du unter Ld (Linker)
Compiler (gcc)
Der GNU Compiler Collection gcc kann auch verwendet werden, um C und Assembler-Code zu mischen und zu kompilieren.
Verwendung:
gcc -o output input.c input.s
Mehr informationen erhälts du unter GNU C Compiler
Debugging-Tool (gdb)
Der GNU Debugger gdb ist ein leistungsfähiges Tool zur Fehlersuche in Programmen.
Verwendung:
gdb ./output
Nützliche GDB-Befehle:
break (b): Setzt einen Haltepunkt.- Beispiel:
break main-> Setzt einen Haltepunkt bei "main".
- Beispiel:
run (r): Startet das Programm.step (s): Führt den nächsten Befehl aus.print <variable>: Zeigt den Wert einer Variable an.continue (c): Läuft bis zum nächsten Haltepunkt weiter.quit (q or control-d): Beendet gdb.control-c: Interrupt das laufende Programm.info registers (i r): Druckt die Register aus.
info break: Zeigt die Breakpoints an.
delete n: Löscht den Breakpoint "n".x /Nuf expression: Zeigt den Inhalt des Speichers an.
Weitere Informationen erhälts du unter GNU Debugger
MAKE
make ist ein Build-Automatisierungstool, das häufig in Softwareprojekten verwendet wird, um Programme aus Quellcode zu kompilieren. Dazu wird ein "makefile" erstellt, welches Make verwendet, um einen Sourcecode in eine Ausführbaren Datei zu wandeln.
Weitere Informationen findest du unter Make
IDEs und Texteditoren, die Assembler unterstützen
Unter Linux gibt es mehrere Möglichkeiten, einen Sourcecode zu schreiben. Mein bevorzugter Editor ist Kate, welcher auch auf Windows und MacOS verfügbar ist. Dieser unterstützt die Syntaxhervorhebung und kann mit Klammern umgehen.
- Installation:
sudo apt install kate
Mehrere IDEs und Texteditoren sind auch gut für die Arbeit mit Assembler-Code geeignet:
- IDEs:
- Visual Studio Code: Mit Erweiterungen wie „C/C++“ und „Arm Assembly“ für Syntax-Highlighting und Debugging-Unterstützung.
- Installation:
sudo apt install code
- Eclipse: Auch geeignet für Assembler-Entwicklung und Debugging.
- Installation:
sudo apt install eclipse
- Texteditoren:
- Vim: Leistungsfähiger Texteditor mit Syntax-Highlighting für Assembler.
- Installation:
sudo apt install vim
- Emacs: Ein Klassiker unter den Texteditoren, der ebenfalls gut für Assembler geeignet ist.
- Installation:
sudo apt install emacs
Gross-Compiling
In diesem Kapitel werde ich das Konzept des Cross-Compilings für die ARM64-Bit-Programmierung mit Assembler erläutern, speziell für das Zielsystem Raspberry Pi 5. Cross-Compiling bezeichnet den Prozess des Compilierens von Code auf einem System, der auf einem anderen ausgeführt werden soll. Dies ist besonders nützlich, wenn das Zielsystem (in diesem Fall der Raspberry Pi 5) im Vergleich zum Entwicklungssystem begrenzte Ressourcen hat. Cross-Compiling ermöglicht es uns, die Leistung und den Komfort leistungsfähigerer Entwicklungsmaschinen zu nutzen, um Programme für den Raspberry Pi zu erstellen.
Warum einen Cross-Compiler verwenden?
- Ressourcenbeschränkungen: Der Raspberry Pi, obwohl ein leistungsfähiges Gerät, erreicht nicht die Rechenleistung eines typischen Desktops oder Servers. Ressource-intensive Kompilierungen können viel Zeit in Anspruch nehmen und erhebliche Systemressourcen verbrauchen, was die direkte Entwicklung auf dem Pi unpraktisch machen kann.
- Geschwindigkeit: Das Kompilieren auf einer leistungsfähigeren Maschine ist erheblich schneller. Dies kann die Entwicklungszykluszeit drastisch verkürzen.
- Flexibilität: Die Verwendung eines Cross-Compilers ermöglicht es Entwicklern, auf vielen verschiedenen Plattformen zu erstellen und zu testen, ohne physisch zwischen Maschinen oder Geräten wechseln zu müssen.
Beste Werkzeuge für Cross-Compiling
- GCC (GNU Compiler Collection): Das am weitesten verbreitete und unterstützte Werkzeug für Cross-Compiling. Es unterstützt eine Vielzahl von Zielarchitekturen, einschließlich ARM.
- Binutils: Eine Sammlung von Binärwerkzeugen, die zusammen mit GCC arbeiten, um Binärdateien zu assemblieren, zu linken und zu manipulieren.
- Make: Ein Build-Automatisierungstool, das ausführbare Programme und Bibliotheken aus Quellcode automatisch erstellt, indem es Dateien namens Makefiles liest.
Installation der Werkzeuge
Unter Linux:
Installiere den Cross-Compiler:
sudo apt update sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
Umgebung einrichten: Stelle sicher, dass die Cross-Compiler-Binärdateien vom PATH aus zugänglich sind. Dies kann durch Hinzufügen der folgenden Zeilen zu .bashrc oder .zshrc erledigt werden:
export PATH=$PATH:/usr/bin/aarch64-linux-gnu
Beispiel-Makefile für Cross-Compiling: Erstelle ein Makefile, um den Build-Prozess zu automatisieren:
CC=aarch64-linux-gnu-gcc AS=aarch64-linux-gnu-as LD=aarch64-linux-gnu-ld
all: program
program: program.o
$(LD) -o program program.o
program.o: program.s
$(AS) -o program.o program.s
clean:
rm -f program program.o
Unter Windows:
Installiere MSYS2: Lade MSYS2 von MSYS2.org herunter und installiere es. Folge den Installationsanweisungen auf der Website.
Installiere den Cross-Compiler: Öffne die MSYS2-Shell und installiere die notwendigen Werkzeuge:
pacman -Syu pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-binutils
Umgebung einrichten: Füge die Pfadumgebungsvariable innerhalb der MSYS2-Shell hinzu, um sicherzustellen, dass die Cross-Compiler-Binärdateien zugänglich sind:
export PATH=$PATH:/mingw64/bin
Beispiel-Makefile für Cross-Compiling in MSYS2: Verwende ein Makefile ähnlich dem für Linux, um den Build-Prozess zu automatisieren.
Transfer und Ausführung des Programms auf dem Raspberry Pi 5:
Nachdem der Cross-Compiler die Binärdateien erstellt hat, übertrage sie auf den Raspberry Pi 5. Dies kann mit Tools wie scp (secure copy) oder einem USB-Laufwerk erfolgen. Beispielsweise:
scp program pi@raspberrypi:/home/pi/program
Nach dem Übertragen, melde dich beim Raspberry Pi an und führe das Programm aus:
ssh pi@raspberrypi chmod +x /home/pi/program /home/pi/program
Durch die Nutzung von Cross-Compiling kannst du deinen Entwicklungsprozess erheblich rationalisieren und die leistungsfähigere Hardware nutzen, während du immer noch auf die spezifische Architektur und Einschränkungen deines Raspberry Pi 5 zielst.