Autor Thema: Multitasking in Ring-3  (Gelesen 13940 mal)

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 27. May 2012, 17:34 »
Das Problem ist einfach, dass der Usermode nicht funktioniert.
Wenn ich in den Usermode switche, kommt der jmp ins nichs.
Kennt da jemand mögliche Fehler?

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 03. June 2012, 19:37 »
Da mir jetzt so niemand weiterhelfen kann, hier mal der Code https://www.dropbox.com/s/trl8nug0a91on9a/code.tar.gz

Um zu kompilieren einfach mkall ausfühern. Dabei wird kompiliert, gelinkt, das image erstellt und mit qemu gestartet.

ACHTUNG: So wie der Code jetzt ist, funktioniert alles wunderbar. Um den Fehler sichtbar zu machen, in /kernel/tasks/multitasking.c in init_task in der struct new_cpu .cs auf 0x1b setzten.

Ich freue mich auf Hilfe!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 03. June 2012, 22:14 »
Wenn ich den Kernel bei mir ohne Änderungen boote, passiert nichts. Soll das so? Ich hab keine Möglichkeit eine ISO zu erstellen. Das funktioniert hoffentlich auch so.

Das Problem ist, dass du zwei TSS-Datenstrukturen hast. Einmal in gdt.c und einmal in common_handler.c. Die in gdt.c darf nicht static sein und die in common_handler.c sollte als extern deklariert sein.

gdt.c:
uint32_t tss[TSS_SIZE] = {0, 0, 0x10};
common_handler.c:
extern uint32_t tss[TSS_SIZE];
Das sollte zumindest einen Fehler beheben. Durch den restlichen Code steig ich dann auch nicht mehr durch. Die Initialisierung des Tastaturtreibers scheint aktivierte Interrupts zu benötigen. Zu dem Zeitpunkt ist das Multitasking allerdings noch nicht initialisiert, und du kriegst möglicherweise einen Timer IRQ. Da solltest du nochmal schauen, ob der korrekt behandelt wird.

Stört dich das eigentlich nicht, dass deine printf-Funktion nur 5 Ziffern von hexadezimalen Zahlen ausgibt?
« Letzte Änderung: 03. June 2012, 22:16 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 05. June 2012, 15:42 »
Es geht! Danke!!

auf die andern fragen brauch ich ja jetzt nicht mehr zu antworten. :-D

BeanMe

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 05. June 2012, 16:05 »
Ich habe auch schon mal die Fehlermeldung "Trying to execute code outside RAM or ROM" bekommen.
Es lag daran, dass ich 6 Segmente in der GDT benutzt, aber den Array nur mit 5 deklariert habe!
Prüfe das mal!

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 05. June 2012, 16:31 »
Wieso es geht doch. Ich hatte den TSS nur nicht richtig benutzt.

 

Einloggen