 |
Entwicklungsumgebung
Für die Bearbeitung der
Rechnerübungsaufgaben haben wir die benötigte
Software auf den Linux-Maschinen (faui0*)
installiert. Die Entwicklung unter Solaris wird von uns nicht mehr
direkt unterstützt. Ihr könnt die Aufgaben natürlich
auch zuhause bearbeiten.
Wir empfehlen hierzu den Einsatz von Linux. Weiter unten finden sich
einige
Hinweise, wie ihr eueren Linux-Rechner entsprechend konfigurieren
könnt.
Achtung! Wer die Software
bei sich zu Hause installieren möchte,
trägt natürlich die volle Verantwortung für eventuelle
Pannen.
Fehlgeschlagene Installationen werden von uns auch nicht als
Entschuldigung
für verspätete Programmabgaben akzeptiert.
Da sich bei der
Betriebssystementwicklung ab und zu auch Fehler einschleichen
können, müsst ihr euere Lösungen testen, bevor ihr sie
abgebt.
Wir benutzen hierzu einen Emulator (bochs) und einen echten PC in Raum
00.156.
Bei der Abgabe benutzen wir immer den echten PC um euere Lösung zu
kontrollieren. Ihr solltet deshalb immer zur Sicherheit auch mit dem
echten PC testen.
compilieren von OOSTUBS
unter x86 Linux im CIP Pool (faui00*)
- es werden die
vorinstallierten Tools des Gastsystems (Linux) verwendet
- der Emulator (bochs) kann mit /proj/i4bs/bochs/bochs
<diskettenimage>
aufgerufen werden
compilieren von OOSTUBS
zuhause mit x86 Linux (eventuell geht auch FreeBSD
usw)
- wir haben OOSTUBS
erfolgreich mit RedHat 7.3, 8.0 und Debian (CIP-Installation)
übersetzt, SuSE funktioniert wahrscheinlich auch
- ihr solltet mindestens gcc 2.95.2 verwenden, für alle
modernen
Linux-Distributionen trifft dies zu
- für die Assembler-Dateien wird der Netwider Assembler (NASM)
benötigt
(siehe auch NASM Homepage)
- der Emulator (bochs) ist ebenfalls frei verfügbar (siehe
auch Bochs Homepage)
OOSTUBS übersetzen
- oostubs.tar.gz in
ein Verzeichniss entpacken (z.B. ~/oostubs)
gal@faui42:/tmp> cd ~ gal@faui42:~> mkdir oostubs gal@faui42:~> cd oostubs gal@faui42:~/oostubs> tar xvfz /proj/i4bs/vorgaben/oostubs.tar.gz
- die Vorgaben (vorgabe1.tar.gz usw) müssen innerhalb dieses
Verzeichnisses
entpackt werden
gal@faui42:~/oostubs> tar xvfz /proj/i4bs/vorgaben/vorgabe1.tar.gz
- alle Vorgaben, die ihr von uns erhaltet, lassen sich korrekt
übersetzen,
enthalten aber nur unvollständigen Code. Ihr müsst also Code
vervollständigen.
Hierzu solltet ihr am besten die Vorgabe 1 in ein eigenes Verzeichnis
kopieren,
und die Aufgaben dort bearbeiten. Mit jeder Vorgabe kommen neue Dateien
hinzu.
Ihr könnt diese dann später in euer Lösungsverzeichniss
übernehmen.
gal@faui42:~/oostubs> cp -r vorgabe1 loesung gal@faui42:~/oostubs> cd loesung gal@faui42:~/oostubs/loesung>
- das eigentliche Übersetzen von OOSTUBS erfolgt durch den
aufruf
von "make" im Lösungsverzeichnis. Alle .cc und .asm Dateien im
Lösungsverzeichnis
werden daraufhin mit den entsprechenden Tools (Compiler bzw. Assembler)
übersetzt.
Mit Hilfe des build tools, das in oostubs.tar.gz enthalten ist, wird
dann
in oostubs/loesung/build ein Diskettenimage generiert (bootdisk.img).
gal@faui42:~/oostubs/loesung> make mkdir ./build nasm -f elf -o build/_startup.o startup.asm nasm -f elf -o build/_io_port.o ./machine/io_port.asm g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/cgastr.o ./device/cgastr.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/guardian.o ./guard/guardian.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/cgascr.o ./machine/cgascr.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/main.o main.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/o_stream.o ./object/o_stream.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/strbuf.o ./object/strbuf.cc g++ -c -Wall -I. -fno-rtti -fno-exceptions -o build/appl.o ./user/appl.cc ld -e startup -T sections -o ./build/system ./build/_startup.o /proj/i4bs/i386/lib/crti.o /proj/i4bs/i386/lib/gcc-lib/i386-linux/2.95.3/crtbegin.o ./build/_io_port.o ./build/cgastr.o ./build/guardian.o ./build/cgascr.o ./build/main.o ./build/o_stream.o ./build/strbuf.o ./build/appl.o /proj/i4bs/i386/lib/gcc-lib/i386-linux/2.95.3/crtend.o /proj/i4bs/i386/lib/crtn.o objcopy -O binary build/system build/system.img ../tools/build ../boot/bootsect ../boot/setup build/system.img 0:80:2:18:0:0:1 build/bootdisk.img BIOS-devicecode: 0x0 Total T/H/S: (80/2/18) Start T/H/S: (0/0/1) Setup size is 1 sectors. System size is 4752 bytes. dd if=build/bootdisk.img of=build/bootdisk.vmi bs=1474560 conv=sync 0+1 records in 1+0 records out gal@faui42:~/oostubs/loesung>
OOSTUBS testen
-
wenn ihr euer Betriebssystem mit dem Emulator (bochs) testen
wollt,
dann ruft ihr den Emulator einfach mit dem Diskettenimage als Parameter
auf.
Leider ist der SunRay Server (faui04b), an dem sich die Terminals in
00.156 befinden,
sehr langsam. Wenn ihr den Bochs verwenden wollt, solltet ihr euch
lieber zuerst
an einem der Linux-PCs (faui00*) verbinden (mit ssh). Von dort
könnt ihr
dann den Emulator starten.
gal@faui42:~/oostubs/loesung> /proj/i4bs/bochs/bochs ./build/bootdisk.img
- alternativ kann man auch einen bochs mit eingebautem gdb stub verwenden.
gal@faui42:~/oostubs/loesung> /proj/i4bs/bochs/bochs-gdb ./build/bootdisk.img
In dieser Konfiguration gibt bochs eine Portnummer aus (eure User ID), über die sich ein
gdb mit bochs verbinden kann, um das System zu debuggen. Dazu solltet ihr ein
weiteres Fenster öffnen oder bochs im Hintergrund starten. Beim gdb Aufruf darf nicht das
Bootdisk Image als Parameter angegeben werden, sondern die Datei build/system , da nur
sie die nötigen Debug-Informationen enthält.
gal@faui42:~/oostubs/loesung> gdb ./build/system
Mit break main und target remote localhost:Portnummer geht's los.
- zum Testen mit richtiger PC Hardware müsst ihr eine
Bootdiskette
(1,44MB 3 1/2") erstellen. In unserem Rechnerübungsraum (00.156)
stehen
steht dazu ein Linux-PC bereit (faui07k) auf dem ihr euch mit ssh
einloggen
könnt. Dort könnt ihr dann die Bootdiskette schreiben. Ein
zweiter
Rechner steht als Testrechner zur Verfügung. Bitte verwendet nur
diesen
Rechner zum Testen und nicht den Linux-Rechner. Zuhause könnt ihr
natürlich
auch eueren eigenen PC oder Laptop verwenden. Zum Erstellen der
Bootdiskette gibt es eine eigenes make target:
gal@faui07k:~/oostubs/loesung> make bootdisk
|
 |