Kernel wird nicht geladen
-
So wie Du das jetzt hast mit den Unterstrichen, sieht es ziemlich falsch aus.
Mach alle Unterstriche bei Funktionsnamen in den C- und Asm-Dateien mal weg. Dann sollte es gehen, sofern Du _ohne_ -fleading-underscore compilierst
-
Mach alle Unterstriche bei Funktionsnamen in den C- und Asm-Dateien mal weg. Dann sollte es gehen, sofern Du _ohne_ -fleading-underscore compilierst
ganz ohne unterstriche kommt das:
http://www8.pic-upload.de/05.03.11/tutsomiigbuc.jpg
-
mit -fleading-underscore verwendest Du den einfachen underscore nur in asm, aber nicht in C.
-
Der Linker will nicht. Das Thema ist bekannt, wenn man 16- und 32-Bit-Code in asm mischt. Zeige mal bitte deine kernel32.asm.
-
mit -fleading-underscore verwendest Du den einfachen underscore nur in asm, aber nicht in C.
-->
ckernel.o:ckernel.c.... undefined reference to ___main
EDIT:
kernel32.asm:[Bits 32] ; http://www.lowlevel.eu/wiki/Multiboot GRUB_FLAGS equ 10b ; Flags for GRUB header GRUB_MAGIC_NUMBER equ 0x1BADB002 ; Magic number for GRUB header GRUB_HEADER_CHECKSUM equ -(GRUB_MAGIC_NUMBER + GRUB_FLAGS) ; Checksum for GRUB header align 4 MultiBootHeader: ; This is the "multiboot" header for GRUB dd GRUB_MAGIC_NUMBER dd GRUB_FLAGS dd GRUB_HEADER_CHECKSUM KernelStart: mov esp, 0x190000 push ebx ; EBX points to the multiboot structure created by the bootloader and containing e.g. the address of the memory map extern _main ; entry point in ckernel.c call _main cli hlt
-
vielleicht verwechsle ich das schon wieder: Probier mal -fnoleading-underscore
-
dann kommt auch
ckernel.o:ckernel.c.... undefined reference to ___main
-
Woher kommen plötzlich die _drei_ Unterstriche?
-
Nochmal aus PrettyOS:
[Bits 32] ; http://www.lowlevel.eu/wiki/Multiboot GRUB_FLAGS equ 10b ; Flags for GRUB header GRUB_MAGIC_NUMBER equ 0x1BADB002 ; Magic number for GRUB header GRUB_HEADER_CHECKSUM equ -(GRUB_MAGIC_NUMBER + GRUB_FLAGS) ; Checksum for GRUB header align 4 MultiBootHeader: ; This is the "multiboot" header for GRUB dd GRUB_MAGIC_NUMBER dd GRUB_FLAGS dd GRUB_HEADER_CHECKSUM KernelStart: mov esp, 0x190000 push ebx ; EBX points to the multiboot structure created by the bootloader and containing e.g. the address of the memory map extern main ; entry point in ckernel.c call main cli hlt
Flags:
# Compiler-/Linker-Flags NASMFLAGS= -Ox -f elf CCFLAGS= -c -std=c99 -march=i386 -Wshadow -m32 -Werror -Wall -s -O -ffreestanding -nostdinc -fno-pic -fno-strict-aliasing -fno-builtin -fno-stack-protector -fno-common -Iinclude LDFLAGS= -nostdlib --warn-common
-
das frag ich mich auch
-
Also am besten alle underscores weglassen, und nicht erwähnen bei den flags im makefile. So gehts bei uns momentan.
-
schau mal hier: http://www.delorie.com/gnu/docs/gcc/gccint_170.html
-
jetzt hab ich mal diese flags benutzt nd ohne unterstriche.
bis auf, dass bei video.c/video.h jetzt viele errors kommen, ist wieder folgendes:
http://www8.pic-upload.de/05.03.11/tutsomiigbuc.jpg
-
coff verwenden wir nicht. -Ox -f elf
-
das war noch das alte bild. hab jetzt elf.
mit collect2 guck ich grad mal
-
du hast drei tools: nasm, gcc, ld und die zugehörigen Flags. Da kann man eine Menge falsch machen. Bau es doch erst mal wie prettyOS auf. Der ld kommt momentan nicht klar mit deinen object-Dateien.
-
Moin
kannst du bitte Fehlermeldungen kopieren und als Text einfügen. Es ist absoluter Mist jedesmal ein Bild laden zu müssen um sich die Fehlermeldung anzusehen. Und wenn du deinen Code hochlädst dan läd man auch nur die Dateien die zu deinem Projekt eghören hoch. irgendwelche bfi.exe Dateien gehören da garantiert nicht dazu.
Ich habe momentan die vermutung das du einfach irgendwas zusammenkopiert hast und jetzt willst das andere Leute dir das zusammenflicken das es passt. Ich empfehle dir ganz eindeutig dieses Tutorial. das ist schön strukturiert aufgebaut. http://www.lowlevel.eu/wiki/OS-Dev_für_Einsteiger
Wenn du bei dem Tutorial probleme hast, kannst du dich gerne bei mir oder in dem dazugehörigem Forum melden.
Und nein das Tutorial kann man genauso unter Windows verwenden auch wenn da ein Beispiel ist welches nur unter Linux geht. steht da aber auch bei.
-
nach dem tutorial? (PrettyOS) so gehts ja irgendwie nicht O_o
gibts noch irgendwo ne alte vesion die z.B. nur hallo schreibt? ^^
-
Warum arbeitest Du nicht einfach mein Tutorial durch? Da hast du sogar downloads mit allem drinnen.
http://www.henkessoft.de/OS_Dev/OS_Dev1.htmDort habe ich den DJGPP verwendet, der konnte noch 16-/32-bit gemischt in asm.
-
Wo es die alten PrettyOS versionen gibt habe ich dir schon gesagt. les dir meine Beiträge nochmal durch.
Und nimm das Tut was ich dir gerade verlinkt habe. Da weiß ich nämlich das es garantiert geht und da kann ich auch bei helfen.
PNoob