Lass die LED leuchten (PI5)
Mit den zuvor erstellten Makefile und Linker-Script haben wir eine Basis geschaffen, um ein sinnvolles Programm zu entwickeln. Unser Ziel ist es, die fest eingebaute LED des Raspberry Pi zum Blinken zu bringen. Ich werde jeden Schritt erklären, warum er in diesem Projekt so implementiert wurde.
Vorbereitung des Verzeichnisses
Erstelle zunächst ein neues Verzeichnis, z.B. LED, und platziere darin das Makefile und die Datei linker.ld. Erzeuge auch das Verzeichnis include innerhalb von LED, um unsere Header-Dateien zu organisieren.
Programmierung des Startverhaltens des Raspberry Pi
Hierzu erstellen wir die Datei "boot.S":
//
// boot.S
//
#include “config.h”
.section .init // Ensure the linker places this at the beginning of the kernel image
.global _start // Execution starts here
_start:
ldr x0, =MEM_KERNEL_STACK
mov sp, x0 // init its stack
b sysinit
Erklärung:
#include "config.h": Inkludiert die Konfigurationsdatei, in der wir benötigte Parameter definieren.
.section .init: Definiert einen Abschnitt, der am Anfang des Kernel-Images platziert wird.
.global _start: Deklariert _start als global, damit es von allen Programmteilen verwendet werden kann.
_start:: Label, das den Startpunkt der Ausführung markiert.
ldr x0, =MEM_KERNEL_STACK: Lädt die Adresse von MEM_KERNEL_STACK in das Register x0, wie es in config.h definiert ist.
mov sp, x0: Initialisiert den Stack-Zeiger SP.
b sysinit: Springt zur Funktion sysinit, die später implementiert wird.
Dies ist der erste Programmteil, den wir als boot.S speichern. Die ersten drei Zeilen dienen als Kommentar, um den Abschnitt des Codes zu kennzeichnen.
In der nächsten Phase werden wir die Funktion sysinit implementieren, um das System weiter zu initialisieren.