Get error trying to compile the kernel
Posted: Mon Sep 03, 2007 4:23 pm
Hi
I'm pretty new to OS Developement, but I'm quite interested and I'm trying to start with a simple kernel, which isn't made by me, but which I copied from the tutorial in OS Developing from http://www.osdever.net/bkerndev/index.php
I can compile it, but I can't link it correctly, so whenever I try to link it I get the error message:
kernel.asm:
Makefile:
Reading again the makefile, I just noticed that actually I'm using nasmw...and I don't know if it's the right assembler or if I should find another one...Because the 'w' may stand for windows, which could be the problem. Is it so? Actually I can't verify by myself because it's late and I'm incredibly tired, so I'll check tomorrow this theory.
Any help is welcome
I'm pretty new to OS Developement, but I'm quite interested and I'm trying to start with a simple kernel, which isn't made by me, but which I copied from the tutorial in OS Developing from http://www.osdever.net/bkerndev/index.php
I can compile it, but I can't link it correctly, so whenever I try to link it I get the error message:
Actually I don't really understand what the problem could be, since I followed the tutorial step by step. I'm using NASM and LD GNU Linker(latest version I found on the net). Anyway, I'll post here the ASM code I'm using and my makefile.kernel.o: file not recognized: File format not recognized
kernel.asm:
Code: Select all
; This is the kernel's entry point. We could either call main here,
; or we can use this to setup the stack or other nice stuff, like
; perhaps setting up the GDT and segments. Please note that interrupts
; are disabled at this point: More on interrupts later!
[BITS 32]
global start
start:
mov esp, _sys_stack ; This points the stack to our new stack area
jmp stublet
; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN 4'
ALIGN 4
mboot:
; Multiboot macros to make a few lines later more readable
MULTIBOOT_PAGE_ALIGN equ 1<<0
MULTIBOOT_MEMORY_INFO equ 1<<1
MULTIBOOT_AOUT_KLUDGE equ 1<<16
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
EXTERN code, bss, end
; This is the GRUB Multiboot header. A boot signature
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_CHECKSUM
; AOUT kludge - must be physical addresses. Make a note of these:
; The linker script fills in the data for these ones!
dd mboot
dd code
dd bss
dd end
dd start
; This is an endless loop here. Make a note of this: Later on, we
; will insert an 'extern _main', followed by 'call _main', right
; before the 'jmp $'.
stublet:
jmp $
; Shortly we will add code for loading the GDT right here!
; In just a few pages in this tutorial, we will add our Interrupt
; Service Routines (ISRs) right here!
; Here is the definition of our BSS section. Right now, we'll use
; it just to store the stack. Remember that a stack actually grows
; downwards, so we declare the size of the data before declaring
; the identifier '_sys_stack'
SECTION .bss
resb 8192 ; This reserves 8KBytes of memory here
_sys_stack:
Code: Select all
echo Now assembling, compiling, and linking your kernel:
nasmw -f aout kernel.asm -o kernel.o
rem Remember this spot here: We will add 'gcc' commands here to compile C sources
rem This links all your files. Remember that as you add *.o files, you need to
rem add them after start.o. If you don't add them at all, they won't be in your kernel!
ld -T link.ld -o kernel kernel.o
echo Done!
pause
Any help is welcome