Autor Thema: Frage: Interrputs  (Gelesen 5691 mal)

Kobra

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« am: 31. October 2012, 15:48 »
Hallo,
ich bin gerade dabei in meinen Kernel
Intrrupts einzufügen (http://www.lowlevel.eu/wiki/Teil_5_-_Interrupts), aber
beim Compillern erhalt ich die Fehlermeldung, dass gdt in der Funktion set_entry(...)
nicht deklariert ist, Welchen Datentyp soll ich nehmen, und wie viele Werte müsse im Array gdt
eingefügt werden? Der Datentyp sollte doch uint64_t sein, oder? Den bei dem Datetyp erhalte ich eine Fehler,
dass dieser Datentyp nicht vorhanden ist.
Und die Funktion load_gdt() in init_gdt ist nicht vorhanden. Wo finde ich deren Dekleration?
Kobra 

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 31. October 2012, 17:24 »
Hallo,

die Deklaration findest du unter der Ueberschrift "Laden der GDT" im GDT-Artikel. Du brauchst mindestens die 7 im Artikel verlinkten Einträge. Der Typ uint64_t sollte eigentlich in der stdint.h enthalten sein, notfalls kannst du "unsigned long long" benutzen - pruefe aber vorher die Groesse! Die Funktion load_gdt() ist im Wiki nicht direkt vorhanden, den Code findest du aber ebenfalls im GDT-Artikel.

Gruss,
Sebastian

Kobra

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 31. October 2012, 18:11 »
Könntest du den Quellode hier posten?
Also den der Funktion load_gdt() und die restlichen
Funktionen für Interrupts? Ich komme da nicht wirklich weiter.

Kobra

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 31. October 2012, 18:41 »
Nö, denken musst du schon selbst. :evil:
Du findest den Code hier.

Kobra

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 12. November 2012, 15:30 »
Kannst du den Code doch Poste?
Hab alles rsucht, bekomme es abr nicht hin :? :? :?

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 12. November 2012, 16:26 »
Hallo,

set_gdt_entry() ist hier, load_gdt() ist hier zu finden.

Für Interrupts brauchst du zusätzlich noch die IDT. Den Code zum Aktivieren dieser (load_idt()) findest du hier. Den eigentlichen Interrupt-Handler kannst du nicht in C schreiben, dazu brauchst du Assembler-Code, den du dann mit deinem C-Code verbindest. Wie du das machst, ist hier beschrieben.

Ansonsten ist es schlechter Stil, nach fertigem Code zu fragen. Wenn du was nicht verstanden hast oder etwas einfach nicht geht, dann frage lieber nach oder poste den nicht funktionierenden Teil deines Codes. Außerdem gibt es noch IRC, was sich für direkte Hilfen besser eignet.

Gruß,
Svenska

 

Einloggen