Eine Google-Suche nach dem Begriff „Linux Kernel file gdt " liefert genau die Ergebnisse, nach denen Sie suchen. Dies ist der Link zum Suchergebnis des Buchs mit den Inhalten, die beschreiben, wo GDT und LDT definiert sind.
-
Alle GDTs werden in der cpu_gdt_table gespeichert Array.
-
Wenn Sie im Quellcode-Index nachsehen, können Sie sehen, dass diese Symbole in der Datei
arch/i386/kernel/head.S
definiert sind . Ich denke jedoch, dass der Quellcodeindex eingesehen werden kann, wenn Sie eine Kopie des Buches haben. Trotzdem wird die Datei angegeben, in der GDT definiert ist.
Für den neuesten Kernel scheint die GDT in mindestens 3 separaten Dateien definiert zu sein.
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
arch/x86/include/asm/segment.h
Das Layout der Haupt-GDT scheint in arch/x86/include/asm/segment.h
definiert zu sein etwa Zeile 91. Es gibt Kommentare zum Layout oberhalb dieser Zeile.
Die fertige Tabelle wird in arch/x86/include/asm/desc.h
geladen mit der Funktion static inline void native_load_gdt(const struct desc_ptr *dtr)
die nur den Assembly-Opcode lgdt
aufruft . Dies steht im Einklang mit der Art und Weise, wie ältere Kernel die Tabelle in den Prozessor laden. Siehe Zeile 303 hier. Ich kann jedoch keine Aufrufe dieser Funktion in der Codebasis finden. Bitte hilf jemandem, das herauszufinden.
Außerdem kann ich in neueren Kernels kein Äquivalent zum Definieren der Konstanten der aktuellen Tabelle wie in Zeile 479 finden.