Interrupts
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Interrupts
Habe jezt ne IDT und ahb diese auch geladen.
Ich hab aus nem tut eine Interruptliste, welcher Interrupt für welche Aktion ausgeführt wird.
Da steht für Tatsatur: 0x24-0x27. NA gut, hab ich in meiner IDT die elemnte 0x24-0x27 den keyboardhandler zugewisen.
HAb in diesem handler auch eine printk("text"); drinn um zu sehen, wann er ausgeköst wurde.
Starte jezt das OS und drücke eine taste, aber es wird kein Inerrupt ausgelöst.
Warum?
edit by Xin: Titel korrigiert
Ich hab aus nem tut eine Interruptliste, welcher Interrupt für welche Aktion ausgeführt wird.
Da steht für Tatsatur: 0x24-0x27. NA gut, hab ich in meiner IDT die elemnte 0x24-0x27 den keyboardhandler zugewisen.
HAb in diesem handler auch eine printk("text"); drinn um zu sehen, wann er ausgeköst wurde.
Starte jezt das OS und drücke eine taste, aber es wird kein Inerrupt ausgelöst.
Warum?
edit by Xin: Titel korrigiert
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Inerrupts
Erstens:
Wie wäre es damit, die Interrupts erstmal anzumachen?
Das geht in ASM mit
Zweitens: Ich glaube nicht, dass deine IDT funktionstüchtig ist.
Das hört sich fast so an, als hättest du dir eine BIOS/DOS (!!) Interruptliste besorgt.
Die BIOS Interrrupts funktionieren im Protected Mode nicht und DOS hast du ja nicht installiert...
Deswegen: Wenn alles fehlschlägt, lies die Anleitung.
Oder in dem konkreten Fall die Linkliste im Wiki:
http://tutorial.proggen.org/doku.php?id ... rammierung
Wie wäre es damit, die Interrupts erstmal anzumachen?
Das geht in ASM mit
Code: Alles auswählen
sti
Zweitens: Ich glaube nicht, dass deine IDT funktionstüchtig ist.
Das hört sich fast so an, als hättest du dir eine BIOS/DOS (!!) Interruptliste besorgt.
Die BIOS Interrrupts funktionieren im Protected Mode nicht und DOS hast du ja nicht installiert...
Deswegen: Wenn alles fehlschlägt, lies die Anleitung.
Oder in dem konkreten Fall die Linkliste im Wiki:
http://tutorial.proggen.org/doku.php?id ... rammierung
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Inerrupts
Gut interrupts waren ausgeschaltet.
So hab sie eingeschaltet. Bekomme das auch ausgegeben. Aber nur ein mal
zweiter bug: ich muss nach jedem Interrupt Master und/oder Slave PIC wieder anweisen Interupts aufzunehmen.
Hab das jezt gemacht. Starte das Image: VirtualPC sagt: Nichtbehebarer prozessorfehler
So hab sie eingeschaltet. Bekomme das auch ausgegeben. Aber nur ein mal
zweiter bug: ich muss nach jedem Interrupt Master und/oder Slave PIC wieder anweisen Interupts aufzunehmen.
Hab das jezt gemacht. Starte das Image: VirtualPC sagt: Nichtbehebarer prozessorfehler
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Inerrupts
Es tut's nich'!cloidnerux hat geschrieben:Gut interrupts waren ausgeschaltet.
So hab sie eingeschaltet. Bekomme das auch ausgegeben. Aber nur ein mal
zweiter bug: ich muss nach jedem Interrupt Master und/oder Slave PIC wieder anweisen Interupts aufzunehmen.
Hab das jezt gemacht. Starte das Image: VirtualPC sagt: Nichtbehebarer prozessorfehler
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Inerrupts
Jezt nicht mehr, aber wieder das selbe problem.
Er zeigt mir an: Interrupt ausgelöst, und macht dann nichts mehr.
Und ich reagire auf jeden Interrupt gleich.
welcher fehler ist das??
Er zeigt mir an: Interrupt ausgelöst, und macht dann nichts mehr.
Und ich reagire auf jeden Interrupt gleich.
welcher fehler ist das??
Code: Alles auswählen
struct idt_entry //das kommt alles ausm tutorial, weil das einfach scheiße erklärt wurde
{
unsigned short base_lo; //keine ahnung was hier rein soll, weil ich das tut net verstnaden habe
unsigned short sel; // ' '
unsigned char always0;
unsigned char flags; // ' '
unsigned short base_hi;// ' '
} __attribute__((packed));
struct idt_ptr
{
unsigned short limit;
unsigned int base;
} __attribute__((packed));
struct idt_entry idt[256];
struct idt_ptr idtp;
void idt_load()
{
asm("lidt %0": : "m" (idtp));
}
void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags)
{
idt[num].base_hi=FP_SEG(base);
idt[num].base_lo=FP_OFF(base);
idt[num].sel=sel;
idt[num].always0=0;
idt[num].flags=flags;
}
void set_slave_EOI() //Teilt MAster UND Slave Pic mit das der Interrupt verarbeitet wurde
{
outb(0x20,0x20);
outb(0xA0,0x20);
}
void test()
{
printk("Es wurde ein iinterrupt ausgelöst");
set_slave_EOI();
}
void set_idt()
{
int i=0;
char a=0;
for(i=0;i<256;i++)
{
++a;
idt_set_gate(a,(unsigned long int)test, 0x08, 0x8E);//weißt jedem interrupt die funktion test() zu
}
}
void idt_install()
{
idtp.limit = (sizeof (struct idt_entry) * 256) - 1;
idtp.base = (int)&idt[0];
memset(&idt, 0, sizeof(struct idt_entry) * 256);
//idt_set_gate(9, (unsigned long int)keyboard_handler, 0x08, 0x8E);
set_idt();
idt_load();
}
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Inerrupts
Es kann hilfreich sein, dass zu lesen, was evtl außenherum steht.
Nur die Funktion aufrufen ist nicht.
Du musst die Register sichern, den Stack sicher, dann die Interruptfunktion aufrufen und nach deren Beendigung alle Register wieder herstellen, den Stack wieder herstellen und ein iret durchführen.
Nur die Funktion aufrufen ist nicht.
Du musst die Register sichern, den Stack sicher, dann die Interruptfunktion aufrufen und nach deren Beendigung alle Register wieder herstellen, den Stack wieder herstellen und ein iret durchführen.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Inerrupts
hä?
in welchen zusammenhang?
bei jedem Interruptcall oder beim initialisren der IDT oder was?
Und was bringt iret??
in welchen zusammenhang?
bei jedem Interruptcall oder beim initialisren der IDT oder was?
Und was bringt iret??
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Inerrupts
Bei jedem Interrupt, immerhin möchte dein Code nach Bearbeitung des Interrupts ja auch weiterlaufen.cloidnerux hat geschrieben:hä?
in welchen zusammenhang?
bei jedem Interruptcall oder beim initialisren der IDT oder was?
Und was bringt iret??
Und eben auch nach Bearbeitung jedes Interrupts.
Um den Zusammenhang zu verstehen, rate ich dir, dir mehrere Tutorials (bzw Brans Kernel Development Tutorial) durchzulesen.
Nach einigem Nachdenken wirst du sicher verstehen, wozu eine IDT gebraucht wird und warum bestimmte Schritte notwendig sind.
Was iret bringt werde ich dir in diesem Zusammenhang nur "verraten" (Google hat heute zu, denke ich...), weil es in diesem Fall ein wirklich wichtiger Aspekt ist.
iret dient dazu, mehrere Werte auf einmal zu Popen. In diesem Fall sollten das CS, EIP, EFLAGS, SS, ESP sein.
Ansonsten wird dir ein geeignetes Tutorial (wie es hier mit der Zeit auch entstehen wird) bestimmt weiterhelfen.
Ich kann dir nicht deinen Code schreiben (meine Dateien nur zur einfachsten Interruptverwaltung haben ca 800 Zeilen Code, wenige davon sind leer... )
MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: Inerrupts
Sorry, dass ich mich hier einmische. Ihr sprecht hier von Interrupts? Sollte dann nicht auch das Thema so heißen?
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Inerrupts
Dazu muss glaub ich erstmal ein Ausschuß gebildet werden, der die Titelschreibweise überprüftdani93 hat geschrieben:Sorry, dass ich mich hier einmische. Ihr sprecht hier von Interrupts? Sollte dann nicht auch das Thema so heißen?
Scherz beseite: Recht hast du.
Hat Xin ja schon geändert.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.