Operating Systems I (Bachelor) |
Lab 1: Bootloader
Lernziele.
Einführung in die Assembler-Programmierung
Einbetten von Assembler Befehlen in C-Programme
Kennenlernen des Boot-Prozesses für PC
Verwenden von BIOS-Funktionen (ähnlich zu Systems-Calls)
Aufgabe.
Einleitung:
In Zeiten ständig laufender bzw. sich im Standby befindlicher
Geräte wie Smartphones, Laptops oder Server ist es fast schon
selbstverständlich, dass diese permanent zur Verfügung stehen.
Aber alle Systeme haben gemeinsam, dass sie einmal hochgefahren werden müssen um
überhaupt verfügbar zu sein. Das bedeutet der sog. "Bootprozess" ist ein
essentieller Bestandteil eines Systems und Grundbaustein für dessen weitere
Funktionalität.
Beim Bootprozess wird als erstes das Basic Input Output System (BIOS) von der
Hauptplatine geladen und ausgeführt. Dieses testet mit einem Power-on Self-Test
(POST), welche Hardware überhaupt verfügbar bzw. ansprechbar ist und
initialisiert und konfiguriert diese. Danach soll das Betriebssystem geladen
werden. Um dies zu ermöglichen stellen alle bootbaren Speichermedien einen
speziellen Speicherbereich zur Verfügung, den sog. Master Boot Record (MBR).
Dieser befindet sich im 1. Sektor des zu bootenden Speichermediums, umfasst 512
Byte und enthält u.a. ein Programm, welches als nächstes die volle Kontrolle
über das System bekommt, den Bootloader.
Solch einen Bootloader sollen Sie in dieser Aufgabe implementieren.
Dies bietet Ihnen die Möglichkeit ein kleines Minibetriebssystem in 512 Byte zu
implementieren. Mögliche Probleme die Sie dabei eventuell überwinden müssen sind
der stark limitierte Speichervorrat und fehlende Programmbibliotheken, da diese
in dieser frühen Phase des Bootvorgangs noch nicht geladen wurden.
Damit eventuell auftretende Programmierfehler nicht zu einer Beschädigung Ihres
Systems führen, stellen wir Ihnen QEMU als virtuelle Maschine bereit. Mit dieser
können Sie schnell und unkompliziert Ihren erstellten Bootloader laden und nach
belieben testen.
Aufgabenstellung:
Schreiben Sie einen Bootloader für einen x86-PC mit folgender Funktionalität:
Ausgabe der Zeichenkette "Hello!"
Verdeckte Eingabe eines Strings (maximal 8 Zeichen), Ausgabe von Punkten statt Buchstaben
Ausgabe der verdeckten Eingabe nach drücken der Enter-Taste
Neustart des Systems (Reboot), wenn der Eingabe-String die Länge 0 hat
Nach Ein-/Ausgabe einer nicht leeren Zeichenkette soll anschließend die nächste Zeichenkette eingelesen werden
Ausgabe des Bootloaders:
Erweitern Sie dazu die Vorlage lab-1.tar, welche einen lauffähigen Bootloader enthält. Die Vorlage enthält folgende Dateien:
Makefile: Makefile zum bauen und starten
linker.ld: Linkerfile zum Erstellen des Bootloaders
os.c: Bootloader, welcher nach dem Starten in einer Endlosschleife läuft
Das Makefile enthält folgende Ziele:
all: baut den Bootloader
start: baut den Bootloader und startet ihn
clean: löscht die Binärdateien
pack: erstellt ein tar-file für die Abgabe über Goya
Die Datei os.c enthält einen einfachen Bootloader, welcher in einer Endlosschleife läuft. Sie müssen diesen um weitere Funktionen erweitern:
Lesen von Zeichen von der Tastatur
Lesen von Zeichenketten
Ausgabe von einzelnen Zeichen auf dem Terminal
Ausgabe von Zeichenketten
Neustarten des Systems
Verwenden Sie zur Ein- und Ausgabe von Zeichen die BIOS-Funktionen, welche Sie mit Assember (Inline-Assembler) rufen können. Versuchen Sie den in Assembler geschriebenen Teil zu minimieren (Systemunabhängigkeit).
Abgabe der Lösung.
Die Abgabe erfolgt als Tar-Datei über Goya. Laden Sie dort die Datei lab-1.tar hoch, welche Sie mit "make pack" erstellt haben. Den Abgabetermin können Sie ebenfalls der Goya-Seite entnehmen.
Hinweise.
Verwenden Sie den PC-Emulator Qemu zum Starten Ihres Bootloaders. Hinweise zur Installation und Nutzung von Qemu finden Sie hier. Das Kommando zum starten des Bootloader lauten:
qemu-system-x86_64 os.bin
Besser ist es jedoch, das Makefile zum Starten zu nutzen:
make start
Zusatzaufgaben.
Gesamten Bootloader in Assembler umsetzen
Nachladen von Code um Limit von 512 Bytes zu überwinden
Einfaches interaktives Grafikspiel (z.B. Snake, Tontaubenschießen)
Ressourcen.
Folien zur Einführung in die Assembler- und C-Programmierung
Übersicht über BIOS-Funktionen
Folien aus der Übung.
Beispiele aus der Übung.
Startscreen von Qemu (Abweichung aufgrund anderer BIOS-Version möglich):
Musterlösung.
Eine Musterlösung finden Sie hier. Die Folien der Nachbesprechung enthalten neben Anmerkungen zur Musterlösung auch noch weitere Hinweise zur Aufgabe und weiterführende Themen.