Autor Thema: C++ Kernel Startup.cpp  (Gelesen 9572 mal)

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« am: 05. September 2013, 15:04 »
Hi,
ich eine Frage zu http://www.lowlevel.eu/wiki/C%2B%2B-Kernel_mit_GRUB.
Bei dem Abschnitt Startup.cpp!
Ich hab das glaub ich richtig verstanden, aber wo bekomme ich jetzt die Startup.cpp her?? muss ich die selber schreiben oder wie? Kann mir jemand die hochladen?

lolxdfly

EDIT: hab einfach seine Startup.cpp genommen: http://forum.lowlevel.eu/index.php?topic=3262.0  :-D

Jetzt gibts aber nen link error: ld: cannot perform PE operations on non PE output file 'kernel.bin'.
Liegt das an meinem 64-bit Windows 7?? Ich hab jetz MinGW benutzt. Mit dem Crosscompiler gehts fast.

ld: link.txt:19:syntax error
« Letzte Änderung: 05. September 2013, 16:49 von lolxdfly »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 05. September 2013, 18:06 »
Jetzt gibts aber nen link error: ld: cannot perform PE operations on non PE output file 'kernel.bin'.
Liegt das an meinem 64-bit Windows 7?? Ich hab jetz MinGW benutzt. Mit dem Crosscompiler gehts fast.

Es liegt daran, dass du MinGW nutzt. Du musst einen Cross-Compiler verwenden.

ld: link.txt:19:syntax error
Wenn das hier die Fehlermeldung sein soll, die du bekommst, musst du die link.txt mal herzeigen.
Dieser Text wird unter jedem Beitrag angezeigt.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 05. September 2013, 19:29 »
Ich hab MinGW und den Cross-Compiler benutzt. Macht kein Unterschied. Es kommt immer der gleiche Error. Der eigenlich Error ist ja jetzt der link error.

Meine link.txt(müsste die selbe sein wie vom TuT):
ENTRY(loader)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)

SECTIONS
{
  . = 0x0100000;

  .text :
  {
    *(.text*)
    *(.rodata)
  }

  .data  :
  {
    start_ctors = .;
    KEEP(*( .init_array ));
    KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* )));
    end_ctors = .;

    *(.data)
  }

  .bss  :
  {
    *(.bss)
  }

  /DISCARD/ : { *(.fini_array*) *(.comment) }
}

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 05. September 2013, 19:49 »
Ich nehme mal an, dass du den Crosscompiler aus dem Wiki genommen hast. Es scheint so, als ob die darin enthaltenen binutils zu alt sind, und den Befehl SORT_BY_INIT_PRIORITY nicht kennen. Du könntest dir entweder selbst ein aktuelles binutils bauen, oder du verwendest das Linkerskript aus einer älteren Version des Artikels. Ich glaube das sollte zu dem alten Compiler und den alten Binutils passen.
Dieser Text wird unter jedem Beitrag angezeigt.

lolxdfly

  • Beiträge: 52
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 05. September 2013, 20:23 »
Damit gehts! Danke :-)

 

Einloggen