Operating Systems  I   (Bachelor)

Lab 1:  Bootloader

 

Lernziele. 

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 des Bootloaders:

 

Erweitern Sie dazu die Vorlage lab-1.tar, welche einen lauffähigen Bootloader enthält. Die Vorlage enthält folgende Dateien:

Das Makefile enthält folgende Ziele:

Die Datei os.c enthält einen einfachen Bootloader, welcher in einer Endlosschleife läuft. Sie müssen diesen um weitere Funktionen erweitern:

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.

Ressourcen.

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.