hi Leute,
sorry, dass ich ständig neue threads öffne, aber ich hab einfach mehrere probleme gleichzeitg...
wenn ich paging aktiviere, dann muss ich doch zuvor ein pagedirectory und 1024 pagetables (angenommen ich setze alle pages auf present) anlegen, oder? das habe ich getan. folgender codeabschnitt sorgt dafür:
paging.h:
#define adr_PageDirectory 0x120000
#define adr_PageTables 0x121000
typedef struct
{
ulong Entry[1024];
} SPAGETABLE;
paging.c:
static ulong *PageDirectory = (ulong *)(adr_PageDirectory);
static SPAGETABLE *PageTable = (SPAGETABLE *)(adr_PageTables);
void setup_Paging()
{
int i1, i2;
ulong adr = 0;
for (i1 = 0; i1 < 1024; i1++)
{
PageDirectory[i1]=(ulong)PageTable + (i1*1024);
for (i2 = 0; i2 < 1024; i2++)
{
PageTable[i1].Entry[i2] = adr | 3; // alle pages present
adr += 4096;
}
}
write_cr3((ulong)PageDirectory);
put_PagingBit();
}
die funktion put_PagingBit() ist in asm geschrieben:
[global _put_PagingBit]
_put_PagingBit:
mov eax, cr0
or eax, 080000000h
mov cr0, eax
jmp $
ret
das problem ist, dass noch vor dem jmp $ ein neustart ausgeführt wird... es kommt noch nicht einmal ein "page-fault". woran liegt das?
an der stelle, an der ich setup_Paging() ausführe, befinde ich mich bereits im pm und habe ein flaches speichermodell.
grüße
Cheebi