Programmierumgebung unter Linux erstellen und testen: Unterschied zwischen den Versionen

Aus C und Assembler mit Raspberry
KKeine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:


=== Arbeiten im Terminal ===
=== Arbeiten im Terminal ===
Wir werden viel im Terminal arbeiten, um Assemblerprogramme zu schreiben, zu kompilieren und auszuführen. Hier sind einige grundlegende Terminalbefehle, die Sie beherrschen sollten:
Wir werden viel im Terminal arbeiten, um Assemblerprogramme zu schreiben, zu kompilieren und auszuführen.  
Wenn du noch mehr wichtige Befehle kennen lernen möchtest dann schau bei [[Die wichtigsten Linux-Terminal-Befehle]] nach.
Hier sind einige grundlegende Terminalbefehle, die Sie beherrschen sollten:


* ls
==== ls ====
Zeigt eine Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis.
Zeigt eine Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis.
: Beispiel: <syntaxhighlight lang="shell" inline>ls</syntaxhighlight>
: Beispiel: <syntaxhighlight lang="shell" inline>ls</syntaxhighlight>
* cd
==== cd ====
Wechselt das Arbeitsverzeichnis.
Wechselt das Arbeitsverzeichnis.
: Beispiele:
: Beispiele:
Zeile 32: Zeile 34:
| <syntaxhighlight lang="shell" inline>cd /</syntaxhighlight> || Wechselt in das Hauptverzeichnis.
| <syntaxhighlight lang="shell" inline>cd /</syntaxhighlight> || Wechselt in das Hauptverzeichnis.
|}
|}
* mkdir
==== mkdir ====
„Make Directory“ erstellt ein neues Verzeichnis im aktuellen Arbeitsverzeichnis.
„Make Directory“ erstellt ein neues Verzeichnis im aktuellen Arbeitsverzeichnis.
: Beispiel: <syntaxhighlight lang="shell" inline>mkdir MeinVerzeichnis</syntaxhighlight>
: Beispiel: <syntaxhighlight lang="shell" inline>mkdir MeinVerzeichnis</syntaxhighlight>
:: Erstellt ein neues Verzeichnis namens „MeinVerzeichnis“.
:: Erstellt ein neues Verzeichnis namens „MeinVerzeichnis“.
* pwd
==== pwd ====
Zeigt das aktuelle Arbeitsverzeichnis an.
Zeigt das aktuelle Arbeitsverzeichnis als gesamter Pfad an.
: Beispiel: <syntaxhighlight lang="shell" inline>pwd</syntaxhighlight>
: Beispiel: <syntaxhighlight lang="shell" inline>pwd</syntaxhighlight>


Zeile 43: Zeile 45:
Um Assemblerprogramme zu schreiben, zu kompilieren und zu debuggen, benötigen wir bestimmte Werkzeuge. Diese können aus dem Terminal heraus installiert werden:
Um Assemblerprogramme zu schreiben, zu kompilieren und zu debuggen, benötigen wir bestimmte Werkzeuge. Diese können aus dem Terminal heraus installiert werden:


Installation des GCC-Compilers und der notwendigen Tools:
=== Installation des GCC-Compilers und der notwendigen Tools ===


Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl aus:
Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl aus:
Zeile 52: Zeile 54:
</syntaxhighlight>
</syntaxhighlight>


Installation des GNU Assembler (as) und Linker (ld):
=== Installation des GNU Assembler (as) und Linker (ld) ===


Diese Tools sind normalerweise Teil des binutils-Pakets:
Diese Tools sind normalerweise Teil des binutils-Pakets:
Zeile 58: Zeile 60:
sudo apt install binutils
sudo apt install binutils
</syntaxhighlight>
</syntaxhighlight>
Überprüfung der Installation:
=== Überprüfung der Installation ===


Überprüfen Sie, ob die Tools korrekt installiert wurden, indem Sie ihre Versionen anzeigen:
Überprüfen Sie, ob die Tools korrekt installiert wurden, indem Sie ihre Versionen anzeigen:
Zeile 67: Zeile 69:
gdb --version
gdb --version
</syntaxhighlight>
</syntaxhighlight>
== Erste Schritte mit einem einfachen "Hello, World!"-Programm in Assembler ==
== Erste Schritte mit einem einfachen "Hello, World!"-Programm in Assembler ==
Beispiel: Ein einfaches Hello World-Programm schreiben und ausführen
Als erstes Assemblerprogramm schreiben wir eine einfache „Hello World“-Anwendung:
Als erstes Assemblerprogramm schreiben wir eine einfache „Hello World“-Anwendung:
 
Dazu verwenden wir einen Texteditor, wie zum Beispiel "Kate". Erstelle dort folgendes Programm:
Erstellen und Bearbeiten der Assembler-Datei:
 
<syntaxhighlight lang="asm">
<syntaxhighlight lang="asm">
.section .data
.section .data
Zeile 87: Zeile 87:
     svc 0                // Make the system call to exit
     svc 0                // Make the system call to exit
</syntaxhighlight>
</syntaxhighlight>
Kompilieren und Linken des Programms:
Speichere die Datei in dein Home-Verzeichnis und/oder erstelle dort ein Verzeichnis und gebe der Datei den Namen "hello.S". Beachte hier das "S", welches groß geschrieben ist.


aarch64-linux-gnu-gcc -o hello hello.s -nostartfiles -lc
== Testen der Umgebung durch Kompilieren und Ausführen von Assemblerprogrammen ==
Ausführen des Programms:
Im Terminal kann der Code wie folgt kompiliert werden, wenn du im richtigen Verzeichnis bist, in dem du die Datei abgelegt hattest. Wie das Verzeichnis zu wechseln ist, habe ich bereits zuvor beschrieben.
<syntaxhighlight lang="shell">
gcc -o hello hello.S -nostartfiles -lc
</syntaxhighlight>


Um nun das Programm auszuführen wird folgendes geschrieben:
<syntaxhighlight lang="shell">
./hello
./hello
</syntaxhighlight>
Falls alles ordnungsgemäß funktioniert, sollten Sie die Ausgabe „Hello, World!“ im Terminal sehen.
Falls alles ordnungsgemäß funktioniert, sollten Sie die Ausgabe „Hello, World!“ im Terminal sehen.
Diese Einführung soll Ihnen den Einstieg erleichtern und Ihnen die grundlegenden Schritte und Werkzeuge zur Verfügung stellen, die Sie benötigen, um Assemblerprogramme auf dem Raspberry Pi zu schreiben und auszuführen. Viel Spaß beim Programmieren!
Damit wir auf einfacher Weise auf dem Raspberry Pi programmieren können, verwenden wir das Standard-Linux System (Raspberry Pi OS (64-bit)), welches wir von Foundation zur Verfügung gestellt bekommen. Diese kann über den "Raspberry Pi Imager" auf eine SD-Karte gespielt werden, oder direkt heruntergeladen werden.
Bei einem ersten Start des Images werden noch einige Dinge nachinstalliert und/oder müssen konfiguriert werden. Er führt auch noch Updates durch, welche ich dringend empfehle. Damit alles funktioniert, sollte der Raspberry Pi zumindest solange Online sein, bis wir alle Tools zur Verfügung haben, die wir benötigen.
Wir werden viel im Terminal/Console arbeiten. Dazu solltest du dich bereite jetzt etwas darin üben, wie hier eingaben erfolgen. Zunächst mal ein paar wichtige Befehle, die wir immer wieder benötigen:
ls -> Dies zeigt dir das Verzeichnis an, in welchen du gerade bist.
cd -> Hiermit kannst du das verzeichnis wechseln.
Beispiele:
cd ~: wechselt in dein Verzeichnis
cd Kapitel1: wechselt in das "Kapitel1"-Verzeichnis, wenn es auf dem aktuellen Verzeichnis exsitiert (ls)
cd ..: Wechselt auf das Vorherige Verzeichnis
cd \: Wechstelt auf das Hauptverzeichnis
mk -> "MakeDir" erzeugt im aktuellen Verzeichnis ein Verzeichnis:
mk MeinVerzeichnis: Erzeugt das Verzeichnis "MeinVerzeichnis"
== Erste Schritte mit einem einfachen "Hello, World!"-Programm in Assembler ==
== Testen der Umgebung durch Kompilieren und Ausführen von Assemblerprogrammen ==

Aktuelle Version vom 3. April 2025, 07:57 Uhr

Einrichtung der Entwicklungsumgebung

Vorbereitung des Raspberry Pi

Um den Raspberry Pi als Entwicklungsplattform für ARM64-Bit Assembler zu nutzen, verwenden wir das Standard-Linux-System „Raspberry Pi OS (64-bit)“, das uns von der Raspberry Pi Foundation zur Verfügung gestellt wird. Dies kann über den „Raspberry Pi Imager“ auf eine SD-Karte gespielt oder direkt von der offiziellen Website heruntergeladen werden.

Erste Schritte:

1. Installation des Raspberry Pi OS:

• Laden Sie den „Raspberry Pi Imager“ auf Ihren Computer herunter und installieren Sie ihn.
• Starten Sie den „Raspberry Pi Imager“ und wählen Sie das 64-bit-Raspberry Pi OS.
• Schreiben Sie das Image auf eine SD-Karte.

2. Erster Start und Konfiguration:

• Legen Sie die fertig beschriebene SD-Karte in Ihren Raspberry Pi ein und starten Sie diesen.
• Beim ersten Start wird das Betriebssystem möglicherweise einige zusätzliche Pakete installieren und konfigurieren. Gegebenenfalls werden Updates heruntergeladen und installiert, was dringend empfohlen wird.
• Stellen Sie sicher, dass der Raspberry Pi mit dem Internet verbunden ist, bis alle notwendigen Werkzeuge installiert sind.

Arbeiten im Terminal

Wir werden viel im Terminal arbeiten, um Assemblerprogramme zu schreiben, zu kompilieren und auszuführen. Wenn du noch mehr wichtige Befehle kennen lernen möchtest dann schau bei Die wichtigsten Linux-Terminal-Befehle nach. Hier sind einige grundlegende Terminalbefehle, die Sie beherrschen sollten:

ls

Zeigt eine Liste der Dateien und Verzeichnisse im aktuellen Verzeichnis.

Beispiel: ls

cd

Wechselt das Arbeitsverzeichnis.

Beispiele:
cd ~ Wechselt in das Home-Verzeichnis.
cd Kapitel1 Wechselt in das „Kapitel1“-Verzeichnis, wenn es im aktuellen Verzeichnis existiert.
cd .. Wechselt in das übergeordnete Verzeichnis.
cd / Wechselt in das Hauptverzeichnis.

mkdir

„Make Directory“ erstellt ein neues Verzeichnis im aktuellen Arbeitsverzeichnis.

Beispiel: mkdir MeinVerzeichnis
Erstellt ein neues Verzeichnis namens „MeinVerzeichnis“.

pwd

Zeigt das aktuelle Arbeitsverzeichnis als gesamter Pfad an.

Beispiel: pwd

Installation der notwendigen Tools wie Assembler, Compiler und Debugger

Um Assemblerprogramme zu schreiben, zu kompilieren und zu debuggen, benötigen wir bestimmte Werkzeuge. Diese können aus dem Terminal heraus installiert werden:

Installation des GCC-Compilers und der notwendigen Tools

Öffnen Sie ein Terminalfenster und führen Sie den folgenden Befehl aus:

sudo apt update
sudo apt upgrade
sudo apt install gcc gdb make

Installation des GNU Assembler (as) und Linker (ld)

Diese Tools sind normalerweise Teil des binutils-Pakets:

sudo apt install binutils

Überprüfung der Installation

Überprüfen Sie, ob die Tools korrekt installiert wurden, indem Sie ihre Versionen anzeigen:

gcc --version
as --version
ld --version
gdb --version

Erste Schritte mit einem einfachen "Hello, World!"-Programm in Assembler

Als erstes Assemblerprogramm schreiben wir eine einfache „Hello World“-Anwendung: Dazu verwenden wir einen Texteditor, wie zum Beispiel "Kate". Erstelle dort folgendes Programm:

.section .data
hello: .asciz "Hello, World!\n"

.section .text
.global _start

_start:
    ldr x0, =hello        // Load the address of the string into x0
    bl  printf             // Call printf function
    mov x0, 0             // Return 0 from main
    mov x8, 93            // syscall number for exit
    svc 0                 // Make the system call to exit

Speichere die Datei in dein Home-Verzeichnis und/oder erstelle dort ein Verzeichnis und gebe der Datei den Namen "hello.S". Beachte hier das "S", welches groß geschrieben ist.

Testen der Umgebung durch Kompilieren und Ausführen von Assemblerprogrammen

Im Terminal kann der Code wie folgt kompiliert werden, wenn du im richtigen Verzeichnis bist, in dem du die Datei abgelegt hattest. Wie das Verzeichnis zu wechseln ist, habe ich bereits zuvor beschrieben.

gcc -o hello hello.S -nostartfiles -lc

Um nun das Programm auszuführen wird folgendes geschrieben:

./hello

Falls alles ordnungsgemäß funktioniert, sollten Sie die Ausgabe „Hello, World!“ im Terminal sehen.