Compilieren/Linken von PrettyOS



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


  • Mod

    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.


  • Mod



  • Sag ich doch 😉

    PS.: Revision 60 lässt sich perfekt compilieren! Danke! 😃


  • Mod

    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.


  • Mod

    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.


  • Mod

    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


  • Mod

    Ah ok, das sollte kein problem sein.


  • Mod

    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 🙄


  • Mod

    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.


Anmelden zum Antworten