Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 25. December 2005, 11:17
-
Erstmal generelles ablauf
1. In den PMODE wechseln
2. Zum CKernel Springen
3. Interrupts ausschalten (wurde vorher auch schonmal gemacht, aber zur sicherheit nochmal, da zwischen dem 1. Ausschalten (PMODE) und dem Kernel noch ne menge Passiert/Passieren soll)
4. PIC
5. IRQa ausschalten (0xFF)
6. IDT "bauen"
7. Interrupts einschalten
8. IRQs aktivieren (0x00)
Fehler
Bist einschlißlich Punkt 7 Läuft alles wie es soll (zumindest passiert nichts ungewöhnliches)
Nach Punkt 8 Startet bochs neu.
Ausgabe der Konsole bei bochs
***e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
***i[SYS ] bx_pc_system_c::Reset(SOFTWARE) called
***i[APIC0] local apic in CPU apicid=00 initializing
***i[BIOS ] rombios.c,v 1.138.2.1 2005/07/06 19:30:36 vruppert Exp $
***i[KBD ] reset-disable command received
VGABios &Id: vgabios.c,v 1.62 2005/07/02 18:39:43 vruppert Exp $
***i[CLVGA] VBE known Display Interface b0c0
***i[CLVGA] VBE known Display Interface b0c3
***i[VBIOS] VBE Bios $Id: vbe.c,v 1.47 2005/05/24 16:50:50 vruppert Exp $
Frage
Wo muss ich nach dem Fehler suchen, was läuft falsch??
Könnte der Fehler beim laden der IDT auftreten??
-
Wo muss ich nach dem Fehler suchen, was läuft falsch??
Könnte der Fehler beim laden der IDT auftreten??
Ich würde sagen der Fehler ist in der IDT. Lädts du die IDT korrekt bzw. die Korrekte Basisadresse (va. wenn Paging aktiviert wird)/Größe? Sind die Deskriptoren in der IDT korrekt?
Hoffentlich konnte ich helfen :!:
-
Danke, du hast mir gut geholfen.
Aber neues Problem:
Wieder ein Problem mit Globalen Variablen.
Wenn ich ein Array mit 2 Elementen (Global) haben möchte:
DWORD idtr[2] = {0,0};
Wird "idtr" vom Linker nicht erkannt
Wenn ich nur einen einfachen Pointer verwende:
DWORD *idtr;
macht der linker kein Probem.
Allerdings finde ich es eher weniger gut, einen Pointer irgendwohin zeigen zu lassen.
Woran liegt das??
PS.: Wenn ich ein lokale Array static machen möchte passiert ähnliches.
Warum hasst mein linker Arrays??
-
hi,
könntest du vllt den entsprechenden Code bzw. die Aufteilung in verschiedene Quellcodedateien posten :?:
-
Es scheint nicht am Code zu liegen, sondern ein generelles Problem zu sein:
Aber in diesem Fall tritt der Fehler hier auf:
__asm__ __volatile__ ("LIDT (%0) ": :"g" ((char*)idtr+2));
Meine "Generelle" aufteilung:
Header:
#ifndef HEADERXY
#define HEADERXY
#define xy ab
namespace name
{
void funktion();
}
#endif
Codefile:
#include "headerxy.hpp"
int x; //OK
int *y; //OK
int z[2]; //FEHLER !?
namespace name
{
void funktion()
{
x = 1; //OK
z[0] = x; //LINER-ERROR
*y = 2; //OK
z[1] = 3; //LINER-ERROR
return;
}
}