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 ~_~