Autor Thema: fehler beim linken?  (Gelesen 2891 mal)

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« am: 08. May 2005, 16:44 »
hallo,

also ich hab hier ein kleines problem: ich hab mir roshl`s bootloader geborgt und will grade einen kleinen kernel in c schreiben - im textmodus, also kein vesa - und hab mal eine kleine clearScreen-funktion geschrieben, die eben den bildschirm loeschen soll.

jetzt hab die funktion in die video.c gepackt und eine header-datei mit prototyp und so gemacht, kompiliert, gelinkt und dann mit bochs versucht auszufuehren.

dann bekam ich zwei fehlermeldungen von bochs, je nachdem wie ich die funktion umgeschrieben habe:
- "prefetch: running in bogus memory"
- "prefetch: getHostMemAddr vetoed direct read, pAddr=0xa0000."

ratlos, wie ich war hab ich mal probiert den code der funktion einfach in die main-funktion zu kopieren.. und siehe da, es geht.
weiterprobiert und probiert, bis ich irgendwann die ganze funktion in die kernel.c geschmissen hab und es hat wieder funktioniert...

weiss vielleicht jemand, was hier nicht passt?

so kompiliere ich video.c:

gcc -ffreestanding -Os -c -Iinclude\ -o video.obj src\kernel\video.c


und das hier ist mein linker-script:

OUTPUT_FORMAT("binary")
INPUT(kernel32.obj kernel.obj video.obj)
ENTRY(start)
SECTIONS
{
  .text  0x10000 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}

ld -Tlink.txt -o out\kernel.bin


hilfe ~_~
\\o
o//
\o/

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #1 am: 08. May 2005, 21:21 »
*bump*
\\o
o//
\o/

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 08. May 2005, 22:17 »
Denke, das problem liegt bei bochs:
"prefetch: getHostMemAddr vetoed direct read, pAddr=0xa0000."
da is die adresse vom videoram => (für mich) problem bei bochs beim schreiben an die adresse... das "vetoed" weiß ich net, was heißt, aber wenn es von "vetare" kommt, heißt es verboten, du greifst also auf verbotenen (gesperrten) speicher an der adresse für den "direct read" zu...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #3 am: 09. May 2005, 13:14 »
wie ichs dir bereits im ICQ->Verbotener Lesezugriff auf die Adresse 0xa0000^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen