Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - N43

Seiten: [1]
1
Lowlevel-Coding / IDT
« am: 16. December 2005, 14:50 »
Hallo,

mein Kernel befindet sich im Protected Mode und Paging ist aktiv. Das laden der IDT funktioiert auch, jedoch greift er beim Aufruf eines Interrupts auf den falschen Speicherbereich zu.

Der Segmentdeskriptor hat die Basisadresse 0xC0000000, die ersten 4MB des physikalen Speichers habe ich an diese Stelle gemapped. Sobald ich die ersten 4MB auch an die ersten 4MB des virtuellen Speichers mappe funktionieren die Interrupts.

Mit dem folgendem Code richte ich einen Interrupt ein.void setup_int(short number, void (*handler)(), char debug)
{
unsigned long offset = (unsigned long) handler;

unsigned short selector;
asm volatile("movw %%cs, %0" : "=g"(selector));

// set actual values of int
idt[number].low_offset   = (offset & 0xFFFF);
idt[number].selector     = selector;
idt[number].settings     = 0x8E00;
idt[number].high_offset  = (offset >> 16);

if (debug)
{
ltoh(selector); k_printf("\n");
ltoh(offset); k_printf("\n");
ltoh(idt[number].low_offset); k_printf("\n");
ltoh(idt[number].high_offset); k_printf("\n");
}

}


Wenn ich mir die Werte mittels dem debug-Flag ausgeben lasse, stimmen sie alle.

Woran könnte es liegen, dass die Basisadresse des Deskriptors nicht berücksichtigt wird?

N43
2
Lowlevel-Coding / near jump im Protected Mode
« am: 27. November 2005, 16:38 »
Hallo,

wenn ich einen near jump im Protected Mode ausführen möchte, bleibt das System stehen. Bochs gibt mir auch keine Fehlermeldung.

Woran könnte das liegen?

Danke schonmal für die Antworten.


N43
Seiten: [1]

Einloggen