Friedrich-Alexander-Universität Univis FAU-Logo
Techn. Fakultät Willkommen am Department Informatik FAU-Logo
Logo IMMD
Lehrstuhl für Informatik 4
Betriebssysteme
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2004/05  >  Betriebssysteme

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
  • 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

  Impressum   Datenschutz Stand: 2004-10-05 18:57   AG