Autor Thema: GDT laden - Problem:  (Gelesen 5382 mal)

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« am: 21. April 2014, 20:01 »
Ich bin gerade bei Teil 5 des Lowleveltutorials und habe ein Problem.

Ich rufe in meiner init-Funktion die Funktion init_gdt() auf. In der werden die ganzen Einträge mit set_entry(..) eingetragen.
Dann wird im Tutorial die Funktion load_gdt() aufgerufen. Im Tutorial wird auf eine Beschreibung der GDT verlinkt. Auf dieser Seite ist auch ein Punkt "GDT laden".
Dort steht am Anfang folgender Code:
static uint64_t gdt [GDT_ENTRIES];
Aber diesen Datentyp gibt es ja gar nicht? Wie soll das funktionieren?
 

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. April 2014, 20:08 »
Den Datentyp musst du selbst definieren. Das geht zum Beispiel mittels

typedef unsigned long long uint64_t;
oder du bindest den Standard-Header stdint.h ein, den der Compiler mitliefern sollte.

Edit: unsigned long long natürlich.
Dieser Text wird unter jedem Beitrag angezeigt.

capstrovor

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. April 2014, 20:15 »
Ok danke!

Wieso kann ich dafür nicht einfach ein int-Array nehmen?
« Letzte Änderung: 21. April 2014, 20:17 von capstrovor »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. April 2014, 20:55 »
Theoretisch könntest du das. Dann ist es allerdings etwas komplizierter, wenn du auf die einzelnen Deskriptoren zugreifen willst, weil ein Deskriptor 8 Bytes groß ist, aber ein int ja nur 4 Bytes. Du müsstest also immer mit 2 multiplizieren, was den Code nicht gerade schöner macht.

Eine bessere Lösung als uint64_t wäre für die Deskriptoren ein richtiges struct zu definieren.

Beispielsweise ähnlich wie dies hier:
typedef struct gdt_descriptor {
uint16_t limit;
uint16_t base;
uint8_t base16;
uint8_t access;
uint8_t limit16;
uint8_t base24;
} __attribute__((packed)) gdt_descriptor_t;

Dann kannst du auf die meisten Elemente zugreifen ohne viel rumshiften zu müssen.
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen