Una ricerca su Google per il termine "File kernel Linux gdt " fornisce i risultati esatti che stai cercando. Questo è il collegamento al risultato della ricerca del libro con i contenuti che descrivono dove sono definiti GDT e LDT.
-
Tutti i GDT sono memorizzati nella cpu_gdt_table matrice.
-
Se guardi nell'indice del codice sorgente, puoi vedere che questi simboli sono definiti nel file
arch/i386/kernel/head.S
. Tuttavia, penso che l'indice del codice sorgente possa essere visualizzato quando si dispone di una copia del libro. Tuttavia, viene fornito il file in cui è definito GDT.
Per l'ultimo kernel, il GDT sembra essere definito in almeno 3 file separati.
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
arch/x86/include/asm/segment.h
Il layout del GDT principale sembra essere definito in arch/x86/include/asm/segment.h
intorno alla riga 91. Ci sono commenti sul layout sopra questa riga.
La tabella completata viene caricata in arch/x86/include/asm/desc.h
con la funzione static inline void native_load_gdt(const struct desc_ptr *dtr)
che chiama semplicemente il codice operativo dell'assembly lgdt
. Ciò è coerente con il modo in cui i kernel più vecchi caricano la tabella nel processore. Vedere la riga 303 qui. Tuttavia, non riesco a trovare alcuna chiamata a questa funzione nella base di codice. Qualcuno, per favore, mi aiuti a capirlo.
Inoltre non riesco a trovare l'equivalente della definizione delle costanti della tabella effettiva come nella riga 479 nei kernel più recenti.