Entwicklungsumgebung
Für die Bearbeitung der Programmieraufgaben haben wir die benötigte Software in unserem Labor auf Linux-Maschinen (eos-lab*) installiert. Eine Entwicklung unter Solaris wird von uns nicht direkt unterstützt. Ihr könnt die Aufgaben natürlich auch zu Hause bearbeiten. Wir empfehlen hierzu den Einsatz von Linux (od. FreeBSD). Weiter unten finden sich einige Hinweise, wie ihr euren 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 auftretende Pannen. Fehlgeschlagene Installationen werden von uns auch nicht als Entschuldigung für verspätete Abgaben der Aufgaben akzeptiert. Da sich bei der Betriebssystementwicklung ab und zu auch Fehler einschleichen können, müsst ihr euere Lösungen vor der Abgabe testen. Ihr könnt dazu den Emulator (bochs) und einen echten PC im Labor (G29-334) benutzen.
Achtung! Bei der Abgabe benutzen wir immer den echten PC um euere Lösung zu kontrollieren.
compilieren von OOSTUBS im EOS-Labor (eos-lab*)
- es werden die vorinstallierten Tools des Gastsystems (Linux) verwendet
-
der Emulator (bochs) kann mit
'bochs <diskettenimage>'
aufgerufen werden
compilieren von OOSTUBS zuhause
- wir haben OOSTUBS erfolgreich mit RedHat 7.3, 8.0, Debian und Windows XP übersetzt
- 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 Umgebung
Windows
Um OOSTUBS unter Windows entwickeln zu können, benötigt ihr die Entwicklungsumgebung Cygwin und den Bochs-Emulator. Bei der Installation von Cygwin sind folgende Pakete mit auszuwählen:
- + Devel ->
- binutils: The GNU assembler, linker and binary utilities
- gcc: C compiler upgrade helper
- gcc-core: C compiler
- gcc-g++: C++ compiler
- make: The GNU version of the ’make’ utility
- nasm: The Netwide-Assembler
- + Libs ->
- glib2: Low-level core library – runtime libraries and executables
- glib2-devel: Headers and important libraries for glib
- glib2-doc: HTML docs and manpages for glib
- glib2-runtime: Low-level core library – runtime libraries and executables
Nachdem die Entwicklungsumgebung entpackt wurde, müsst ihr das Entwicklungssystem (Win98 für Windows 98 / Me; WinNT für Windows NT / 2000 / XP) im Makefile angeben. Dazu sucht ihr die Zeile in der die Variable GENSYS deklariert ist und ändert sie, z.B:
GENSYS = Linux
verändert ihr beispielsweise zu: GENSYS = WinNT
Anschließend könnt ihr das System genau wie im Labor übersetzen.
Zum Testen eures Systems könnt ihr ebenfalls den Bochs-Emulator
verwenden. Dazu müsst ihr die Windowsversion des Emulators installieren.
Im Unterverzeichnis bochs
der Entwicklungsumgebung ist bereits eine
Batch Datei bochs.bat
vorbereitet, mit der ihr den Emulator einfach
starten könnt, indem ihr als Parameter ein Bootdisk-Image angebt.
Vorher müsst ihr allerdings in der bochs.bat
den Installationspfad
des Emulators in der Variable BXSHARE angeben
(z.B. set BXSHARE=c:\Programme\bochs-2.1.1
). Danach könnt ihr den
Emulator mit dem gewünschten Image starten
(z.B. $ bochs/bochs.bat loesung/build/bootdisk.img
)
Linux, Unix, FreeBSD
Um OOSTUBS unter Linux, Unix oder FreeBSD entwickeln zu können, benötigt ihr zusätzlich zum GCC den Netwider Assembler (NASM) und den Bochs-Emulator. Sind die dazu notwendigen Pakete installiert, kann die Entwicklungsumgebung wie folgt erzeugt werden.
- Verzeichniss für die Umgebung erzeugen (z.B.
~/oostubs
) - oostubs.tar.gz in dieses Verzeichniss entpacken
- make im Unterverzeichniss bochs ausführen
eosgr@eos-lab01:/tmp> cd ~ eosgr@eos-lab01:~> mkdir oostubs eosgr@eos-lab01:~> cd oostubs eosgr@eos-lab01:~/oostubs> tar xvfz oostubs.tar.gz eosgr@eos-lab01:~/oostubs> cd bochs eosgr@eos-lab01:~/oostubs/bochs> make
OOSTUBS übersetzen
-
die Vorgaben (vorgabe1.tar.gz usw.) müssen innerhalb des von euch
erzeugten Verzeichnisses entpackt werden
eosgr@eos-lab01:~/oostubs> tar xvfz vorgabe1.tar.gz
-
alle Vorgaben, die ihr von uns erhaltet, lassen sich korrekt übersetzen,
enthalten aber nur unvollständigen Code. Ihr müsst also den Code
vervollständigen.
Hierzu solltet ihr am besten die Vorgaben in ein eigenes Verzeichnis kopieren,
und die Aufgaben dort bearbeiten, da mit jeder Vorgabe neue Dateien hinzukommen
werden. Ihr könnt diese dann später in euer Lösungsverzeichniss
übernehmen.
eosgr@eos-lab01:~/oostubs> cp -R vorgabe1 loesung eosgr@eos-lab01:~/oostubs> cd loesung eosgr@eos-lab01:~/oostubs/loesung>
-
das eigentliche Übersetzen von OOSTUBS erfolgt durch den Aufruf von
'make'
im Lösungsverzeichnis. Alle.cc
und.asm
Dateien in diesem Verzeichnis werden daraufhin mit den entsprechenden Tools (Compiler bzw. Assembler) übersetzt. Mit Hilfe des build tools, das inoostubs.tar.gz
enthalten ist, wird dann inoostubs/loesung/build
ein Diskettenimage generiert (bootdisk.img).
eosgr@eos-lab01:~/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 eosgr@eos-lab01:~/oostubs/loesung>
OOSTUBS testen
Um euer Betriebssystem mit dem Emulator (bochs) zu testen, ruft ihr den Emulator einfach mit dem Diskettenimage als Parameter auf. Ihr könnt euch dazu per ssh mit einem Rechner im Labor (eos-lab*) verbinden. Dort könnt ihr dann den Emuloator starten.
user@home:~/user>ssh redir@eos-gw.cs.uni-magdeburg.de eosgr@eos-lab01:~eosgr> cd ~/oostubs/loesung/ eosgr@eos-lab01:~/oostubs/loesung> bochs.sh ./build/bootdisk.img
Zum Testen mit richtiger PC-Hardware müsst ihr eine Bootdiskette
(1,44MB 3 1/2") erstellen. Für diese Bootdisketten steht im Labor
ein spezieller Testrechner zur Verfügung.
Bitte verwendet nur diesen Rechner zum Testen eurer Bootdisketten.
Zuhause könnt ihr natürlich auch eueren eigenen PC oder Laptop verwenden.
Zum Erstellen der Bootdiskette gibt es eine eigenes TARGET: make bootdisk
.