das äußert sich, dass wenn die Methode mit physical=0x26000 aufgerufen wird, der entsprechende Eintrag in der PageTable nicht 0x26007, sondern 0x00007 ist, als würde
pageTable[pageNumber] = (u32)physical & 0xFFFFF000;
gar nicht benutzt.
Ich hatte schonmal ein ähnliches Problem in dem Zusammenhang, nämlich in der Funktion, die die ersten 4MB auf sich selbst mappt.
Die Funktion
unsigned int count = 0;
while(count < 1024) {
map(kernelPageDirectory, count * 0x1000, count * 0x1000, 7);
count++;
}
hat nicht funktioniert, weil irgendwie die Veriable count nach dem Funktionsaufruf von map verändert war, aber wenn ich das geändert habe auf:
void* addr;
static unsigned int count = 0;
while(count < 1024) {
addr = count * 0x1000;
map(kernelPageDirectory, addr, addr, 7);
count++
}
auf einmal schon.
Übrigens kompiliere ich mit:
gcc -ffreestanding -c -Os -o vmm.obj vmm.c
bei einigen Optionen weiß ich nicht genau, was die machen - das habe ich aus einem Tutorial übernommen - vllt liegt es irgendwie daran!