Compilieren/Linken von PrettyOS
-
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
-
Moin,
ich verfolge Pretty OS jetzt schon eine ganze Zeit - im Prinzip seit den Tutorial 1 - und seit dem VGA Support hat sich mein Interesse gesterkt.
Nun wollte ich dann doch auch mal mein eigenes Image erstellen und hab mir die aktuellste Rev. vom SVN heruntergeladen. (648)
Doch beim ausführen der build.bat schmeißt mir Make nur ein Error -1 aus.
Ich wäre um eine kleine Hilfestellung beim erstellen sehr dankbar. :c
http://codepad.org/jNlyXbIE (editiert durch ehenkes)
-
Sieht aus, als würdest du NASM 2.09rc4 nehmen.
diese Version scheint fehlerhaft zu sein.Bitte entweder 2.09rc3 oder 2.08 nehmen, dann sollte es gehen.
-
-
Danke, es lag an der neusten NASM Version. (Ich hatte bereits letzte Woche auf r4 geupdated).
Danke sehr.
-
oldsqldma: wenn du lust hast, mach doch mit als entwickler bei svga
-
Ich habe jetzt auch mal euer Tutorial gefunden und ein bisschen rumprobiert. Sobald ich aber den ckernel einbinden will, wofür ich natürich den Linker benutzen muss, kommt immer bei ld.exe dieser Fehler:
kernel.o: file not recognized: File format not recognizedIn der .bat steht das hier :
nasm -O32 -f bin boot.asm -o boot.bin
nasm -O32 -f aout kernel.asm -o kernel.o
gcc -c ckernel.c -o ckernel.o
ld -T kernel.ld ckernel.o kernel.o -o ckernel.bin
copy /b boot.bin + ckernel.bin MyOS.bin
pause>nulIch muss übrigens die gcc.exe und ld.exe aus dem Dev-C++ nehmen, da diese 64-bit kompatibel sind. Macht das einen Unterschied?
Ich habe auch die NASM Version 2.08 genommen wie MrX sagte.
mfG TheCrip