EDIT3:Habs gefunden, nicht gefixt :/Das verstehe ich nicht. Ist an der Adresse 10187e das Symbol "end"?
Ist genauso wie hier: nur mit 10187e: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren
EDIT4: Dürfte am link script liegen... die Adresse ist ein externes Symbl aus dem Link Script:Code: [Auswählen]end = .; _end = .; __end = .;soll ich dass einfach ans Ende dranklatschen? Hab leider überhaupt keine Ahnung was Link Scripte angeht :S
Ne... war vllt etwas unglücklich formuliert.
Der Qemu log sagt folgendes:
Code: [Auswählen]
check_exception old: 0xe new 0xe
3: v=08 e=0000 i=0 cpl=0 IP=0008:0010188e pc=0010188e SP=0010:001fff90 EAX=80000011
Da ich sachen geändert habe hat sich die Adresse wieder geändert... vorher war es 10187e!Dann habe ich mein Kernel disasm.:
Code: [Auswählen]
10187b: 0f 22 c0 mov %eax,%cr0
10187e: c9 leave
10187f: c3 ret
Wie man sieht scheint der gleiche Fehler, wie hier beschrieben vorzuliegen: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivierenIn "meiner" Source findet man bezüglich der Speicheradresse das hier:
Code: [Auswählen]
// end ist im linker script definiert!
extern uint32_t end;
uint32_t placement_address = (uint32_t)&end;
Die Deklarierung von end im LinkerScript sieht bei dem BeispielKernel wiefolgt aus:
Code: [Auswählen]
ENTRY(start)
SECTIONS
{
.text 0x100000 :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}
Ich denke mal ich hab das was im Linker Script bezüglich end falsch gemacht:Code: [Auswählen]
ENTRY(loader)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)
SECTIONS
{
. = 0x0100000;
.text :
{
*(.text*)
*(.rodata)
}
.data :
{
start_ctors = .;
*(.ctors)
end_ctors = .;
*(.data)
}
.bss :
{
*(.bss)
}
end = .; _end = .; __end = .;
/DISCARD/ : { *(.dtors) *(.comment) }
}

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


