Linkerfile

Hey Leute
also folgendes Problem, ich bin genau nach diesem Tutorial
http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_mit_GRUB
vorgegangen.

Leider funktioniert das mit dem Linken nicht. Ich versteh auch nicht was die Datei soll ?(

Code:
ENTRY (loader)

SECTIONS
{
  . = 0x00100000;
	
  .text :
  {
    *(.text)
  }
	
  .rodata ALIGN (0x1000) :
  {
    *(.rodata)
  }

  .data ALIGN (0x1000): 
  {
    *(.data)
  }

  .bss :
  {
    _sbss = .;
    *(COMMON)
    *(.bss)
    _ebss = .;
  }
}

Vielleicht ist ja von euch jemand dabei der sich da ein bisschen auskennt :)

Naja wäre super wenn mir das mal jemand erklären könnte,das ich eine funktionierende Linkerdatei erstellen kann.


Das ist der Fehler der beim Linken angezeigt wird:
Code:
ld: warning: cannot find entry symbol _mainCRTStartup; defaulting to 00401000
boot.o(.text+0x14): In function `loader':
: undefined reference to `main'
kernel.o(.text+0x21):kernel.c: undefined reference to `_alloca'
kernel.o(.text+0x26):kernel.c: undefined reference to `__main'
 
Schau doch mal hier:

OS aus Tutorial - Fehler beim booten

Da gabs das Thema schonmal.
Vllt. hilfts dir weiter, wenn nicht, dann frag einfach die Leute die sich damit auskennen und evtl. auch schon das Tutorial gelesen haben und evtl. auch schon ein OS programmiert haben:
z.B. mcf & thyrael.lu

slightlyNERD
 
Hi AaFreak,

Original von AaFreak
Ich versteh auch nicht was die Datei soll ?(
Generell lässt sich sagen, dass du durch diese Link-Datei dem Linker (in diesem Fall also "ld") mitteilst, welche Teile der Input-Datei(en) er wohin in die Output-Datei(en) tun soll. Wenn dich das Ganze genau interessiert, schau doch mal hier vorbei - da ist alles genau beschrieben, insbesondere unter "SECTIONS Command".

Zu deinem Fehler fällt mir momentan nicht viel ein, sorry - ld scheint die main-Methode nicht zu finden. Überprüf' vielleicht nochmal, ob du alles genau wie im Tutorial hast, ansonsten müsste man sich was anderes ausdenken. ;)

Soweit erstmal,
mfg
 
Zurück
Oben