ACHTUNG:
Es wird kein Unterstützung für Windows gewährt!
Jeder der unter Windows entwickeln möchte muss seine Probleme
selber lösen.
Es wird dringend empfohlen unter Linux/Solaris zu entwickeln.
Für alle, die dennoch Windows verwenden wollen, bietet diese
Anleitung eine Orientierung einer möglichen Einrichtung der
Entwicklungsumgebung unter Windows. Es wird nicht garantiert, dass
die Befolgung dieser Anleitung zwangsweise zum Ziel führt.
Eine nicht funktionierende Entwicklungsumgebung ist keine Ausrede,
warum eine Aufgabe nicht rechtzeitig abgegeben werden konnte.
Die Verwendung dieser Anleitung geschieht auf eigene Gefahr,
bestimmte Schritte können in seltenen Fällen das System
(Windows) zerstören bzw. unbrauchbar machen.
Es gibt viele Möglichkeiten auch unter Windows ein Betriebssystem zu
entwickeln. Aufgrund der Vorgaben für den GNU-C-Compiler wurde sich
für eine Kombination von Cygwin, Doxygen, QEMU und Visual Studio 2010
entschieden. Eine Alternative zu Cygwin bietet
MinGW.
Diese Anleitung wurde unter Windows 7 Professional 64 Bit, mit
Visual Studio 2010 Ultimate - beides mittels MSDNAA für FIN-Studenten
kostenlos zu erhalten - vom 14.08. bis 21.09.2011 herum mit den neusten
Versionen von Cygwin, Doxygen, Graphviz, QEMU und Syslinux entwickelt
und getestet.
unter "Devel" binutils gcc4 (Version 4.5.3 oder höher) gcc4-core (Version 4.5.3 oder höher) gcc4-g++ (Version 4.5.3 oder höher) gdb make patchutilsEs sollten keine Pakete abgewählt werden, die vorausgewählt waren. Wichtig ist an dieser Stelle, dass die gcc4-Pakete als 4.5-Version (oder höher) ausgewählt werden. Beim ersten Klick auf Skip wurde bei den Tests manchmal 4.3.4 als Version angezeigt. Diese unterstützt allerdings die benötigte Option "-fno-leading-underscore" nicht. Ein erneuter Klick bringt in einem solchen Fall dann die 4.5.3 hervor. Dies ist für alle gcc4-Pakete einzeln anzugeben.
a@b ~ $ cd /cygdrive/f/Daten/oostubs/code/ a@b /cygdrive/f/Daten/oostubs/code $ make (ASM ) build/boot.o <- src/asm/boot.S (CXX ) build/cgastr.o <- src/device/cgastr.cc (CXX ) build/guardian.o <- src/guard/guardian.cc (CXX ) build/cgascr.o <- src/machine/cgascr.cc (CXX ) build/keyctrl.o <- src/machine/keyctrl.cc (CXX ) build/o_stream.o <- src/object/o_stream.cc (CXX ) build/strbuf.o <- src/object/strbuf.cc (CXX ) build/main.o <- src/main.cc (ASM ) build/compat.o <- src/asm/compat.S (CC ) build/inifini.o <- misc/windows/inifini.c (LD ) bin/oostubs <- [boot.o cgastr.o guardian.o cgascr.o keyctrl.o o_stream.o strbuf.o main.o compat.o inifini.o] a@b /cygdrive/f/Daten/oostubs/code $ make clean (CLEAN) a@b /cygdrive/f/Daten/oostubs/code $Anmerkung: Anstelle von a@b müsste der unter Windows verwendete Benutzername "@" Computername des gerade genutzten Computers erscheinen.
@set "CYGWINPATH=F:\Programme\CygWin" @set "DOXYGENPATH=F:\Programme\Doxygen" @set "QEMUPATH=F:\Programme\QEMU" @set "GRAPHVIZPATH=F:\Programme\Graphviz" @set "CROSSPATH=F:\Programme\CygWin\usr\src\cross"Wurden andere Orte als die in dieser Anleitung verwendet, so gilt es nun diese Pfade zu korrigieren. Es ist wichtig darauf zu achten, dass alles vor dem Gleichheitszeichen (incl.) und die Anführungszeichen am Ende unverändert bleiben. "CROSSPATH" muss an dieser Stelle nicht verändert werden, es dient nur einer alternativen Variante (siehe Alternativen).
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten. C:\Windows\system32>F: F:\>cd Temp\Syslinux\win32 F:\Temp\Syslinux\win32>syslinux.exe -m -a -d boot G: F:\Temp\Syslinux\win32>Der sonst leere USB-Stick müsste nun die versteckte Datei "ldlinux.sys" enthalten. Da sie versteckt ist, kann es sein, dass sie nicht angezeigt wird.
PROMPT 1 TIMEOUT 10 DEFAULT oostubs DISPLAY bootmenu.lst LABEL oostubs KERNEL /boot/mboot.c32 APPEND /boot/kernel/oostubsEs folgt das Anlegen der Datei "G:\boot\bootmenu.lst":
oostubs - aktuelle OOStuBS-Version [DEFAULT]Nachdem dies erledigt ist, muss nur noch die oostubs-Datei von "F:\Daten\oostubs\code\bin\oostubs" nach "G:\boot\kernel\" kopiert werden.
PROMPT 1 TIMEOUT 100 DEFAULT oostubs UI /boot/menu.c32 MENU TITLE OOStuBS Bootmenue mit Syslinux LABEL - MENU LABEL OOStuBS: MENU DISABLE LABEL oostubs MENU LABEL ^oostubs - aktuelle Version [DEFAULT] MENU INDENT 1 TEXT HELP Dies ist die aktuelle Entwicklungsversion von OOStuBS. ENDTEXT KERNEL /boot/mboot.c32 APPEND /boot/kernel/oostubs LABEL oostubsA1 MENU LABEL oostubsA^1 - fertige Aufgabe 1 MENU INDENT 1 TEXT HELP Diese Version von OOStuBS beeinhaltet nur die abgeschlossene Aufgabe 1. ENDTEXT KERNEL /boot/mboot.c32 APPEND /boot/kernel/oostubs.A1 LABEL oostubsA2 MENU LABEL oostubsA^2 - fertige Aufgabe 2 MENU INDENT 1 TEXT HELP Diese Version von OOStuBS beeinhaltet nur die abgeschlossenen Aufgaben 1 bis 2. ENDTEXT KERNEL /boot/mboot.c32 APPEND /boot/kernel/oostubs.A2Der Wert bei TIMEOUT gibt an, wie lange gewartet wird, bis die Standard-Option genutzt wird. Die Angabe ist in 1/10 Sekunden, der Wert 100 besagt also 10 Sekunden.
Setup Environment F:\Daten\oostubs\code>patch -p1 -i ../oostubs_task2.patch patching file include/machine/io_port.h patching file Makefile patching file include/device/keyboard.h patching file include/device/panic.h patching file include/guard/gate.h patching file include/machine/cpu.h patching file include/machine/keyctrl.h patching file include/machine/pic.h patching file include/machine/plugbox.h patching file include/user/task2.h patching file src/device/keyboard.cc patching file src/device/panic.cc patching file src/machine/pic.cc patching file src/machine/plugbox.cc patching file src/main.cc Hunk #1 succeeded at 9 with fuzz 2. Hunk #2 succeeded at 28 (offset 4 lines). Hunk #3 succeeded at 36 with fuzz 1 (offset 4 lines). patching file src/user/task2.cc F:\Daten\oostubs\code>Damit sollte alles abgeschlossen sein, das Konsolenfenster kann wieder geschlossen werden.
patching file include/machine/io_port.h patching file Makefile Hunk #1 FAILED at 9. 1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej patching file include/device/keyboard.h patching file include/device/panic.h patching file include/guard/gate.h patching file include/machine/cpu.h patching file include/machine/keyctrl.h Hunk #1 succeeded at 20 with fuzz 2 (offset 8 lines). patching file include/machine/pic.h patching file include/machine/plugbox.h patching file include/user/task2.h patching file src/device/keyboard.cc patching file src/device/panic.cc patching file src/machine/pic.cc patching file src/machine/plugbox.cc patching file src/main.cc Hunk #1 FAILED at 9. Hunk #2 succeeded at 29 (offset 5 lines). Hunk #3 FAILED at 37. 2 out of 3 hunks FAILED -- saving rejects to file src/main.cc.rej patching file src/user/task2.ccIn der Makefile, vermutlich ab Zeile 9, konnte er den "Hunk", also die Änderung nicht durchführen. Genauso verhält es sich mit der Datei "code/src/main.cc" ab vermutlich Zeile 9 und Zeile 37. In der main.cc-Datei konnte er aber eine von drei Änderungen erfolgreich durchführen. Vermutlich bedeutet dabei, dass das Programm patch davon ausging, dass dort der Bereich der Änderungen anfängt, da er aber nicht erfolgreich war, kann diese Zeilenangabe nur als Anhaltspunkt genommen werden.
*************** *** 9,15 **** LDFLAGS=-O0 ASMFLAGS=-g - OBJECT_IGNORE= task1.o INCPATHS= LDPATHS= --- 9,15 ---- LDFLAGS=-O0 ASMFLAGS=-g + OBJECT_IGNORE= task1.o task2.o INCPATHS= LDPATHS=Die obere Hälfte gibt an, die patch sich die Originaldatei in Zeile 9-15 vorstellt. Das Minus gibt an, dass diese Zeile entfernt werden soll. Die zweite Hälfte gibt an, wie er sich die fertig veränderte Datei vorstellt, das Plus gibt dabei an, dass die Zeile eingefügt wurde.
LDFLAGS=-O0 ASMFLAGS=-g #OBJECT_IGNORE= task1.o OBJECT_IGNORE= INCPATHS=Ganz offenbar ist das schon die richtige Stelle, sie muss nur leicht abgeändert werden:
LDFLAGS=-O0 ASMFLAGS=-g #OBJECT_IGNORE= task1.o OBJECT_IGNORE= task1.o task2.o INCPATHS=Schon ist der Patch bei dieser Datei erfolgreich durchgeführt wurden. Jetzt können die .orig und .rej-Dateien gelöscht werden.
1> ./include/machine/cgascr.h:13:21: schwerwiegender Fehler: ./include/machine/io_port.h: Permission denied 1> Kompilierung beendet.Dann ist beim Patchen etwas schief gelaufen und die Zugriffsrechte auf die Datei, in diesem Beispiel "F:\Daten\oostubs\code\include\machine\io_port.h" müssen korrigiert werden (im Explorer Rechtsklick auf die Datei, "Eigenschaften", Reiter "Sicherheit", hier kontrollieren, im Notfall "Bearbeiten" und korrigieren). Bei den Tests zu dieser Anleitung trat dies Problem jedoch nur auf, als sich nicht an diese Anleitung gehalten wurde, genauer gesagt, als Cygwin zum Patchen genutzt wurde und nicht das oben angegebene "doConsole".
export PREFIX==/usr/src/cross export TARGET=i686-pc-linuxbinutils wurde auch leicht anders konfiguriert:
../binutils-2.21.1/configure --target=$TARGET --prefix=$PREFIX --with-gnu-as --with-gnu-ld --disable-nlsUnd zu guter letzt wurde auch gcc anders konfiguriert:
../gcc-4.6.1/configure --prefix=$PREFIX --target=$TARGET --disable-nls --enable-language=c,c++ --without-headers \ --with-newlib --disable-gdbtk --disable-libssp --enable-threadsDie so erzeugten Dateien und Ordner von binutils und gcc liegen damit unter "F:\Programme\CygWin\usr\src\cross".
1.0.0 (23.09.2011) |
|
---|---|
1.0.1 (09.10.2011) |
|
1.0.2 (11.10.2011) |
|
1.1.0 (08.11.2011) |
|