ld problem
Posted: Tue Jan 22, 2008 1:49 pm
Hi, I was trying to make my first Os, with the tutorial on this webpage : http://osdever.net/bkerndev/Docs/creatingmain.htm, I checked my main with the solution, but gcc said me a lot of errors, so I was trying to just make a main() like that:
To just see if the linking works...
And the booting_new.asm like that:
I was using this bat file for compiling and linking :
but the linker said : start.o : file not recognized : File format not recognized.
Does anyone know what am I doing wrong? If you need more info, feel free to ask... I really don't know what's going on with that...
Thanks for your help!!!
EDIT: I was trying too to change the output format of nasm, for example elf, win32, but all of these did not work.
This time, the error was :"PE operations on non PE file.".
PLEASE help.
Code: Select all
void main() {}
And the booting_new.asm like that:
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:
extern _main
call _main
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
Q:\osdev>nasm -f aout -o start.o booting_new.asm
Q:\osdev>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o main.o main.c
Q:\osdev>ld -T link.ld -o kernel.bin start.o main.o
Q:\osdev>echo Done!
Done!
Q:\osdev>pause
Press any key to continue . . .
Does anyone know what am I doing wrong? If you need more info, feel free to ask... I really don't know what's going on with that...
Thanks for your help!!!
EDIT: I was trying too to change the output format of nasm, for example elf, win32, but all of these did not work.
This time, the error was :"PE operations on non PE file.".
PLEASE help.