[HELP] Compile on Cygwin or with DJGPP fails

If you are new to OS Development, plan on spending some time here first before going into the other forums.

Moderator:Moderators

Post Reply
DanielB
Posts:1
Joined:Thu Oct 23, 2008 3:47 pm
[HELP] Compile on Cygwin or with DJGPP fails

Post by DanielB » Thu Oct 23, 2008 4:05 pm

Hello,
can someone explain me please, how to compile this HelloWorld-OS under Cygwin or with DJGPP and how to debug it with GDB on Bochs?

I have only 3 files:
mykernel.c

Code: Select all

int main(int argc, char *argv[]) {

    // Pointer zum Videospeicher
    char *video = (char*) 0xB8000;
    // String zum Ausgeben
    char *hello = "Hello World";
    
    // Zuerst den Speicher leeren
    for (video += 4000; video !=(char*)0xB8000; video--)
    {
	*video = 0;
    }
    
    // String ausgeben
    while (*hello) {
	*video = *hello;
	video++;
	*video = 0x07;
	video++;
	hello++;
    }
    
    // Main Loop
    while(1);

    return 0;
}
mykernel.asm

Code: Select all

global loader
extern _main

FLAGS		equ 	0
MAGIC		equ	0x1BADB002
CHECKSUM	equ	-(MAGIC + FLAGS)

section .text
align 4

MultiBootHeader:
    dd MAGIC	
    dd FLAGS	
    dd CHECKSUM
    
loader:
    mov	esp, 0x200000
    push eax
    push ebx	
    call _main
    
    cli	
    hlt
Link.lnk

Code: Select all

ENTRY (loader)
SECTIONS
{
  . = 0x00100000;
    
  .text :
  {
    *(.text)
  }
    
  .rodata ALIGN (0x1000) :
  {
    *(.rodata)
  }
    
  .data ALIGN (0x1000):
  {
    *(.data)
  }
    
  .bss :
  {
    *(.bss)
  }
}	
I can't build it on Windows. When I run the gcc, I get this error:

Code: Select all

gcc.exe -ffreestanding -o mykernel_c.o -c mykernel.c -g

c:/djgpp/tmp/ccXA7t2i.s: Assembler messages:
c:/djgpp/tmp/ccXA7t2i.s:6: Error: Unknown pseudo-op:  `.def'
c:/djgpp/tmp/ccXA7t2i.s:6: Error: Unknown pseudo-op:  `.val'
c:/djgpp/tmp/ccXA7t2i.s:6: Error: Unknown pseudo-op:  `.scl'
c:/djgpp/tmp/ccXA7t2i.s:6: Error: ignoring unrecognized symbol type ""
c:/djgpp/tmp/ccXA7t2i.s:6: Error: Rest of line ignored. First ignored character
is `0'.
c:/djgpp/tmp/ccXA7t2i.s:6: Error: Unknown pseudo-op:  `.endef'
c:/djgpp/tmp/ccXA7t2i.s:9: Error: Unknown pseudo-op:  `.def'
c:/djgpp/tmp/ccXA7t2i.s:9: Error: Unknown pseudo-op:  `.val'
c:/djgpp/tmp/ccXA7t2i.s:9: Error: Unknown pseudo-op:  `.scl'
mykernel.c:6: Error: Unknown pseudo-op:  `.endef'
mykernel.c:7: Error: Unknown pseudo-op:  `.def'
mykernel.c:7: Error: Unknown pseudo-op:  `.val'
mykernel.c:7: Error: Unknown pseudo-op:  `.scl'
mykernel.c:7: Error: ignoring unrecognized symbol type ""
mykernel.c:7: Error: Rest of line ignored. First ignored character is `0'.
mykernel.c:7: Error: Unknown pseudo-op:  `.endef'
mykernel.c:8: Error: Unknown pseudo-op:  `.def'
mykernel.c:8: Error: Unknown pseudo-op:  `.val'
mykernel.c:8: Error: Unknown pseudo-op:  `.scl'
mykernel.c:8: Error: ignoring unrecognized symbol type ""
mykernel.c:8: Error: Rest of line ignored. First ignored character is `0'.
mykernel.c:8: Error: Unknown pseudo-op:  `.endef'
mykernel.c:15: Error: Unknown pseudo-op:  `.def'
mykernel.c:15: Error: Unknown pseudo-op:  `.val'
mykernel.c:15: Error: Unknown pseudo-op:  `.scl'
mykernel.c:15: Error: ignoring unrecognized symbol type ""
mykernel.c:15: Error: Rest of line ignored. First ignored character is `0'.
mykernel.c:15: Error: Unknown pseudo-op:  `.endef'
mykernel.c:16: Error: Unknown pseudo-op:  `.def'
mykernel.c:16: Error: Unknown pseudo-op:  `.val'
mykernel.c:16: Error: Unknown pseudo-op:  `.scl'
mykernel.c:16: Error: ignoring unrecognized symbol type ""
mykernel.c:16: Error: Rest of line ignored. First ignored character is `0'.
mykernel.c:16: Error: Unknown pseudo-op:  `.endef'
mykernel.c:17: Error: Unknown pseudo-op:  `.ln'
mykernel.c:19: Error: Unknown pseudo-op:  `.ln'
mykernel.c:21: Error: Unknown pseudo-op:  `.ln'
mykernel.c:29: Error: Unknown pseudo-op:  `.ln'
mykernel.c:32: Error: Unknown pseudo-op:  `.ln'
mykernel.c:38: Error: Unknown pseudo-op:  `.ln'
mykernel.c:45: Error: Unknown pseudo-op:  `.ln'
mykernel.c:50: Error: Unknown pseudo-op:  `.ln'
mykernel.c:53: Error: Unknown pseudo-op:  `.ln'
mykernel.c:56: Error: Unknown pseudo-op:  `.ln'
mykernel.c:59: Error: Unknown pseudo-op:  `.ln'
mykernel.c:65: Error: Unknown pseudo-op:  `.ln'
mykernel.c:68: Error: Unknown pseudo-op:  `.ln'
mykernel.c:69: Error: Unknown pseudo-op:  `.ln'
mykernel.c:70: Error: Unknown pseudo-op:  `.def'
mykernel.c:70: Error: Unknown pseudo-op:  `.val'
mykernel.c:70: Error: Unknown pseudo-op:  `.scl'
mykernel.c:29: Error: Unknown pseudo-op:  `.endef'
mykernel.c:30: Error: Unknown pseudo-op:  `.def'
mykernel.c:30: Error: Unknown pseudo-op:  `.val'
mykernel.c:30: Error: Unknown pseudo-op:  `.scl'
mykernel.c:30: Error: Unknown pseudo-op:  `.endef'
Thx
Daniel

Andyhhp
Moderator
Posts:387
Joined:Tue Oct 23, 2007 10:05 am
Location:127.0.0.1
Contact:

Post by Andyhhp » Fri Oct 24, 2008 12:12 pm

Hi,

I havn't had much experience using DJGPP but I suggest using this as a commandline argument for gcc

Code: Select all

gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -c -o mykernel.o mykernel.c
This is the one recomeneded by Bran's Kernel Development Tutorial which, while not really a tutorial, is very informative for things like this.

Your main() code itself looks fine to compile and run but there is a fair amount of optimization you could do if you want.

Hope this helps,

~Andrew
Image

Post Reply