Mal was neues zum Knobeln...
und diesesmal habe ich nicht den leisesten Schimmer, was da abgeht...
Ich habe jetzt eine Funktion eingebaut, mit der es iwann möglich sein soll, ein Directory zu erstellen, in dem die Kernelbereiche schon gemappt sind. Denn die Kernelbereiche müssen in allen Directorys gemappt sein, sonst kann bei einem Interrupt/PageFault/was auch immer kein Kernelcode ausgeführt werden => die CPU bekommt einen Triple Fault.
Diese Funktion alleine scheint auch gut zu funktionieren.
Ich kann sie implementieren, ausführen lassen, es ergibt alles die gewünschten Ergebnisse.
Das geht also:
Code: Alles auswählen
Activate_Kernelheap();//Kernelheap aktivieren ###########Da ist dann der Fehler######
vfs_root = Init_iRamDisk( (unsigned int)ird_Start);
////////////AUSKOMMENTIERT////////////////////////////
/*//Zum testen: Inhalt von / aufzeigen:
unsigned int i = 0;
struct dirent *node = 0;
while( (node = vfsreaddir(vfs_root,i)) != 0) {
K_PSUCCESS("file: ");
K_PINFO(node->name);
vfsn_t *dirnode = (vfsn_t *)khalloc(sizeof(vfsn_t));
dirnode = vfsfinddir(vfs_root,node->name);
if ((dirnode->type&0x7) == FS_DIRECTORY) {
K_PSUCCESS(" -> dir\n");
} else {
K_PSUCCESS(" -> content:\n");
char *buffer = (char*)khalloc(dirnode->length+1);
vfsread(dirnode, 0, dirnode->length, (unsigned char*)buffer);
K_PINFO((char*)buffer);
K_PINFO("\n---------------\n\n");
}
i++;
}*/
////////////AUSKOMMENTIERT////////////////////////////
unsigned int *NDir = (unsigned int*)K_alloc();
NewDir(NDir); //######################'Die neue FUNKTION (NewDir)!!!! ////////////////////////////
unsigned int * probe = (unsigned int*)0xDDDDDDD;//Nur ein Test, ob die Sache mit PageFaults geht..
PEN(32);
*probe = 5;
PEN(*probe);
for(;;);
}
Wenn ich aber den Code, der zwischen den
Code: Alles auswählen
////////////AUSKOMMENTIERT////////////////////////////
steht ausführen lasse, dann kommt es zu einem Abbruch.
Und nun das kuriose:
Der Abbruch ist VOR diesem Codeabschnitt, in der Funktion Acticate_KernelHeap().
Vor dieser Funktion wird die neue Funktion aber gar nicht ausgeführt, heißt, die verändert vorher nichts.
Selbst wenn ich die neue Funktion NICHT EINMAL aufrufe (also auch später nicht; die Funktion wird NIE aufgerufen), kommt der Fehler (Triple Fault) an der gleichen Stelle.
Bin dazu echt ratlos.
Das funktioniert nur, wenn ich die neue Funktion komplett auskommentiere (also nicht nur den Aufruf der Funktion).
*Total verwirrt*
*Um Hilfe ersuch*