Compilieren/Linken von PrettyOS
-
anubis2k5 schrieb:
Hallo!
Besteht die Möglichkeit - das die Makefiles etwas "übertrimmt" sind? Zumindest kann ich das OS nicht unter Windows kompilieren. Die Fehlermeldung besagt das er dem Befehl "rm" sowie "mv" nicht finden kann. Mit meiner Laienhaftigkeit habe ich schon versucht das Problem durch eine Äquivalent mittels Batch-Datei zu ersetzen, leider gelingt mir das nur mit "rm". "mv" ist scheinbar beharrlicher...
Die Befehle "rm" und "mv" sind Linux/ Unix Befehle. Du brauchst Windows typische Befehle...
anubis2k5 schrieb:
Habt ihr vielleicht ein Idee?
Kompiliere das OS einfach unter ein Linux Derivat.
anubis2k5 schrieb:
NACHTRAG: mit installierter Cygwin - Umgebung und entsprechenden anpassen des Pfades läuft nun die build.bat komplett durch
Cygwin macht Linux/ Unix Befehle unter Windows Nutzbar. Daher klappt das Kompilieren mit der Linux Makefile
anubis2k5 schrieb:
- bis... bis folgende Fehlermeldung erschein:
syscall.o:(.rodata+0x20): undefined reference to `_flpydsk_read_directory'
mingw32-make: *** [ckernel] Error 1Erhard Henkes hat zwar zur Version 56 http://www.c-plusplus.net/forum/viewtopic-var-t-is-254893-and-postdays-is-0-and-postorder-is-asc-and-start-is-20.html geschrieben, dass die funktion nach fat12.c ausgelagert wurde, nur leider lässt sich diese Datei in den zur Verfügung stehenden Repositorys nicht finden...
Lade Dir mal von hier das komplette Archiv (Tar Archiv) herunter. Anschliessend patcht Du mit diesen Dateien Deine Sourcecodes. Die Datei "fat12.inc" gehört in den Ordner "stage2_bootloader".
Anschliessend alles neu kompilieren und sich über ein laufendes OS freuen
-
Die Befehle "rm" und "mv" sind Linux/ Unix Befehle. Du brauchst Windows typische Befehle...
Du kannst Dein Windows auch "linuxieren":
http://www.chrysocome.net/dd (dd anstelle partcopy)
https://olex.openlogic.com/packages/msys (cp, rm, ...)
Das hilft bestimmt.Hier findest Du alle wichtigen Links zu PrettyOS:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-252232.html (siehe Abschnitt "Tools")
-
Vielen Dank für die schnelle Hilfe!
Die Tools hatte ich mir schon vorher besorgt - am Pfad hatte es gelegen
Allerdings besteht mein Fehler im Make-Prozess immernoch...Ich habe mir den aktuellen Trunk (56) aus dem SVN Repository gezogen - auch nach der Anleitung von Gamepower funktioniert es nicht... Ich erhalte weiterhin folgende Fehlermeldung:
E:\MyOS>tools\mingw32-make OS=WINDOWS nasmw -f bin stage1_bootloader/boot.asm -Istage1_bootloader/ -o stage1_bootloade r/boot.bin nasmw -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage2_bootload er/BOOT2.BIN rm *.o -f nasmw -O32 -f elf user/user_program_c/start.asm -Iuser/user_program_c/ -o start. o i586-elf-gcc user/user_program_c/*.c -c -Iuser/user_program_c -m32 -fno-pic -Wer ror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builti n nasmw -O32 -f elf user/user_program_c/start.asm -o start.o i586-elf-ld *.o -T user/user_program_c/user.ld -Map user/user_program_c/kernel.m ap -nostdinc -o user/user_program_c/program.elf rm *.o -f tools/make_initrd user/init_rd_img/test1.txt file1 user/init_rd_img/test2.txt fi le2 user/init_rd_img/test3.txt file3 user/user_program_c/program.elf shell writing file user/init_rd_img/test1.txt->file1 at 0x1304 writing file user/init_rd_img/test2.txt->file2 at 0x1327 writing file user/init_rd_img/test3.txt->file3 at 0x134a writing file user/user_program_c/program.elf->shell at 0x1910 mv initrd.dat kernel/initrd.dat rm *.o -f i586-elf-gcc kernel/*.c -c -Ikernel/include -std=c99 -march=i386 -mtune=i386 -m3 2 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostd inc -fno-builtin -fno-stack-protector -Iinclude nasmw -O32 -f elf kernel/data.asm -Ikernel/ -o data.o nasmw -O32 -f elf kernel/flush.asm -Ikernel/ -o flush.o nasmw -O32 -f elf kernel/interrupts.asm -Ikernel/ -o interrupts.o nasmw -O32 -f elf kernel/kernel.asm -Ikernel/ -o kernel.o nasmw -O32 -f elf kernel/process.asm -Ikernel/ -o process.o i586-elf-ld *.o -T kernel/kernel.ld -Map kernel/kernel.map -nostdinc -o kernel/K ERNEL.BIN syscall.o:(.rodata+0x20): undefined reference to `_flpydsk_read_directory' mingw32-make: *** [ckernel] Error 1
Ich werd's jetzt mal unter Linux versuchen. Im übrigen habe ich mich vorher durch alle erdenklichen Schlagwörter hier im Forum umgesehen, aber ich finde einfach keine andere Lösung.
Nachtrag: Revision 55 funktioniert unter Windows ohne Probleme ?!
-
Revision 55 funktioniert unter Windows ohne Probleme
Kann bitte mal jemand prüfen, was bei Rev. 56 falsch ist?
Bei mir läuft das wie folgt durch:
G:\OSDev\PrettyOS\trunk\Source>tools\mingw32-make OS=WINDOWS
nasmw -f bin stage1_bootloader/boot.asm -Istage1_bootloader/ -o stage1_bootloader/boot.bin
nasmw -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage2_bootloader/BOOT2.BIN
rm .o -f
nasmw -O32 -f elf user/user_program_c/start.asm -Iuser/user_program_c/ -o start.o
i586-elf-gcc user/user_program_c/.c -c -Iuser/user_program_c -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
nasmw -O32 -f elf user/user_program_c/start.asm -o start.o
i586-elf-ld *.o -T user/user_program_c/user.ld -Map user/user_program_c/kernel.map -nostdinc -o user/user_program_c/program.elf
rm *.o -f
tools/make_initrd user/init_rd_img/test1.txt file1 user/init_rd_img/test2.txt file2 user/init_rd_img/test3.txt file3 user/user_program_c/program.elf shell
writing file user/init_rd_img/test1.txt->file1 at 0x1304
writing file user/init_rd_img/test2.txt->file2 at 0x1327
writing file user/init_rd_img/test3.txt->file3 at 0x134a
writing file user/user_program_c/program.elf->shell at 0x1910
mv initrd.dat kernel/initrd.dat
rm .o -f
i586-elf-gcc kernel/.c -c -Ikernel/include -std=c99 -march=i386 -mtune=i386 -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostd
inc -fno-builtin -fno-stack-protector -Iinclude
nasmw -O32 -f elf kernel/data.asm -Ikernel/ -o data.o
nasmw -O32 -f elf kernel/flush.asm -Ikernel/ -o flush.o
nasmw -O32 -f elf kernel/interrupts.asm -Ikernel/ -o interrupts.o
nasmw -O32 -f elf kernel/kernel.asm -Ikernel/ -o kernel.o
nasmw -O32 -f elf kernel/process.asm -Ikernel/ -o process.o
i586-elf-ld *.o -T kernel/kernel.ld -Map kernel/kernel.map -nostdinc -o kernel/KERNEL.BIN
rm *.o -f
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin stage2_bootloader/BOOT2.BIN kernel/KERNEL.BIN
rawwrite dd for windows version 0.5.
Written by John Newbigin jn@it.swin.edu.au
This program is covered by the GPL. See copying.txt for details
512 100%
1+0 records in
1+0 records out
1 Datei(en) kopiert.
-
Bitte mal Rev. 58 (=57a) testen, da fehlte in 57 die fat.c.
-
Sag ich doch
PS.: Revision 60 lässt sich perfekt compilieren! Danke!
-
Sag ich doch
Ja, stimmte. Ist mir leider zunächst nicht aufgefallen, dass die fat12.c beim committen vergessen wurde. Nun haut's ja wieder hin.
-
Ich hab gestern das makefile von PrettyOS so umgebaut, das es unter Windows ohne msys funktioniert (unter Linux müsste es dank Nutzung von Variablen weiterhin funktionieren). Anlass war das nicht-funktionieren von msys bei mir (kann auch an mir liegen ). Ich möchte Euch das natürlich nicht vorenthalten und bitte um Tests (vlt. auch unter Linux, ob es da auch noch funktioniert):
STAGE1DIR= stage1_bootloader STAGE2DIR= stage2_bootloader KERNELDIR= kernel USERRDDIR= user/init_rd_img USERDIR= user/user_program_c USERTEST= user/user_test_c ifeq ($(OS),WINDOWS) RM=cmd /c del MV=cmd /c move/Y NASM= nasmw CC= i586-elf-gcc LD= i586-elf-ld #NASM= tools/nasmw #CC= tools/i586-elf/bin/i586-elf-gcc #LD= tools/i586-elf/bin/i586-elf-ld else RM=rm -f MV=mv NASM=nasm CC=gcc LD=ld endif all: boot1 boot2 ckernel boot1: $(wildcard $(STAGE1DIR)/*.asm $(STAGE1DIR)/*.inc) $(NASM) -f bin $(STAGE1DIR)/boot.asm -I$(STAGE1DIR)/ -o $(STAGE1DIR)/boot.bin boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc) $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/BOOT2.BIN ckernel: $(wildcard $(KERNELDIR)/* $(KERNELDIR)/include/*) initrd $(RM) *.o $(CC) $(KERNELDIR)/*.c -c -I$(KERNELDIR)/include -std=c99 -march=i386 -mtune=i386 -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude $(NASM) -O32 -f elf $(KERNELDIR)/data.asm -I$(KERNELDIR)/ -o data.o $(NASM) -O32 -f elf $(KERNELDIR)/flush.asm -I$(KERNELDIR)/ -o flush.o $(NASM) -O32 -f elf $(KERNELDIR)/interrupts.asm -I$(KERNELDIR)/ -o interrupts.o $(NASM) -O32 -f elf $(KERNELDIR)/kernel.asm -I$(KERNELDIR)/ -o kernel.o $(NASM) -O32 -f elf $(KERNELDIR)/process.asm -I$(KERNELDIR)/ -o process.o $(LD) *.o -T $(KERNELDIR)/kernel.ld -Map $(KERNELDIR)/kernel.map -nostdinc -o $(KERNELDIR)/KERNEL.BIN $(RM) *.o tools/CreateFloppyImage2 PrettyOS FloppyImage.bin $(STAGE1DIR)/boot.bin $(STAGE2DIR)/BOOT2.BIN $(KERNELDIR)/KERNEL.BIN $(USERTEST)/HELLO.ELF initrd: $(wildcard $(USERDIR)/*) $(RM) *.o $(NASM) -O32 -f elf $(USERDIR)/start.asm -I$(USERDIR)/ -o start.o $(CC) $(USERDIR)/*.c -c -I$(USERDIR) -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin $(NASM) -O32 -f elf $(USERDIR)/start.asm -o start.o $(LD) *.o -T $(USERDIR)/user.ld -Map $(USERDIR)/kernel.map -nostdinc -o $(USERDIR)/program.elf $(RM) *.o tools/make_initrd $(USERRDDIR)/test1.txt file1 $(USERRDDIR)/test2.txt file2 $(USERRDDIR)/test3.txt file3 $(USERDIR)/program.elf shell $(MV) initrd.dat $(KERNELDIR)/initrd.dat
Aufgrund des Tab-Problems hier noch zum download: http://kloke-witten.dyndns.org/~philipp/downloads/PrettyOS/makefile
-
Prima, finde ich gut! Bei mir klappt's, allerdings muss
RM=del
noch durch
RM=cmd /c del
ersetzt werden. (Und natürlich die Einrückungs-Leerzeichen durch Tabs ersetzen beim Copy-Pasten.
-
habs korrigiert.
Das mit den Tabs ist natürlich doof... Ich lad das makefile gleich einfach mal hoch, dann ist das einfacher...EDIT: ist inzwischen passiert, Link siehe oben.
-
Mrx (im IRC):
Mit diesem makefile könnte man das Problem mit msys umgehen, ohne ein zweites makefile erstellen zu müssen. Ich schlage daher vor, auf dieses makefile, wenn es unter UNIX funktioniert, umzusteigen.
Wenn die Linux-Fraktion es frei gibt, dann ok. Bei Cuervo ist es gelaufen.
-
Hier ein patch von MrX:
Index: build.bat =================================================================== --- build.bat (revision 144) +++ build.bat (working copy) @@ -1,2 +1,2 @@ -mingw32-make main -pause \ No newline at end of file +..\..\tools\mingw32-make OS=WINDOWS +pause \ No newline at end of file Index: makefile =================================================================== --- makefile (revision 144) +++ makefile (working copy) @@ -1,6 +1,18 @@ -main: hello.c userlib.c userlib.h - ..\..\tools\nasmw -O32 -f elf start.asm -o start.o - i586-elf-gcc -c userlib.c -std=c99 -march=i386 -mtune=i386 -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude - i586-elf-gcc -c hello.c -std=c99 -march=i386 -mtune=i386 -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude - i586-elf-ld *.o -T user.ld -Map user.map -nostdinc -o HELLO.ELF - rm -f *.o \ No newline at end of file +ifeq ($(OS),WINDOWS) + RM=cmd /c del + MV=cmd /c move + NASM= ..\..\tools\nasmw + GCC= i586-elf-gcc + LD= i586-elf-ld +else + RM=rm -f + NASM=nasm + GCC=gcc + LD=ld +endif + +main: + $(NASM) -O32 -f elf start.asm -o start.o + $(GCC) -c *.c -std=c99 -march=i386 -mtune=i386 -m32 -fno-pic -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude + $(LD) *.o -T user.ld -Map user.map -nostdinc -o HELLO.ELF + $(RM) *.o \ No newline at end of file
-
Der ist für das makefile/build.bat des User-Programs
-
Ah ok, das sollte kein problem sein.
-
Es fehlt ein aktualisertes Quick Guide für Einsteiger, die schnell praktische Erfolge sehen wollen.
-
Wieso? Meine Anleitung ist doch noch aktuell? oO
-
Nö, ist sie nicht.
Z.B. steht da, die Installation von NASM sei optional. Das ist mittlerweile nichtmehr der Fall, da nasm.exe nichtmehr mitgeliefert wird.
-
ich mache optionale Sachen sowieso immer, also von da her.. und ich vermute mal, dass viele, die sich in diesem Forum rumtreiben den NASM sowieso installiert haben
-
Hier die "Mitschrift" eines Einsteigenden, die er freundlicherweise im IRC hinterlassen hat:
pretty os quick guide (für Windoes XP soeben getestet) nasm runterladen von http://www.nasm.us/pub/nasm/releasebuilds/2.08.01/win32/nasm-2.08.01-win32.zip auspacken nach c:\nasm crosstools runterladen von http://jidder.de/lost/files/crosstools-complete.rar auspacken nach c:\crosstools prettyos runterladen von http://prettyos.svn.sourceforge.net/viewvc/prettyos.tar.gz?view=tar auspacken nach zum Beispiel d:\src\prettyos qemu runterladen von http://download.tyndur.org/temp/qemu-ehci.tgz auspacken nach c:\qemu die zlib1.dll irgendwie finden und nach c:\quemu kopieren. Zum Beispiel aus http://sourceforge.net/projects/gnuwin32/files/zlib/1.2.3/zlib-1.2.3-bin.zip/download neues Konsolenfenster aufmachen und nach d:\src\prettyos gehen Pfad anpassen path=c:\nasm;%path% path=c:\crosstools\bin;%path% Image bauen mit build.bat Image testen mit c:\qemu\qemu.exe -soundhw pcspk -fda FloppyImage.img -boot a -localtime
-
Auch wenn man Programme normalerweise nicht nach C:\ sondern eher C:\Programme legt
Und dort wird nicht erwähnt, das man die Pfade einstellen muss.Cuervo: Aber solange NASM in Deiner Anleitung als "optional" gilt, gilt für mich Deine Anleitung als obsolet