「Linux カーネル ファイル gdt」という用語の Google 検索 " は、探している正確な結果をもたらします。これは、GDT と LDT が定義されている場所を説明するコンテンツを含む書籍の検索結果へのリンクです。
-
すべての GDT は cpu_gdt_table に保存されます
-
ソース コード インデックスを見ると、これらのシンボルがファイル
arch/i386/kernel/head.S
で定義されていることがわかります。 .ただ、ソースコード索引は単行本を持っていれば見れると思います。それにもかかわらず、GDT が定義されているファイルが提供されます。
最新のカーネルでは、GDT は少なくとも 3 つの個別のファイルで定義されているようです。
arch/x86/include/asm/desc_defs.h
arch/x86/include/asm/desc.h
arch/x86/include/asm/segment.h
メイン GDT のレイアウトは arch/x86/include/asm/segment.h
で定義されているようです 91 行目あたり。この行の上にレイアウトに関するコメントがあります。
完成したテーブルは arch/x86/include/asm/desc.h
でロードされます 関数 static inline void native_load_gdt(const struct desc_ptr *dtr)
で アセンブリオペコード lgdt
を呼び出すだけです .これは、古いカーネルがテーブルをプロセッサにロードする方法と一致しています。ここの 303 行を参照してください。ただし、コード ベースでこの関数の呼び出しが見つかりません。誰かがこれを理解するのを手伝ってください。
また、新しいカーネルの 479 行目のように、実際のテーブルの定数を定義するのと同等のものを見つけることができません。