Linux カーネル (vmlinux.lds) のリンカー ファイルから、_PAGE_OFFSET の値が 0xc0000000 であることを知りましたが、何らかの理由でこの値を変更したいのですが、この値がどのマクロから来ているのかわかりません。
したがって、この _PAGE_OFFSET の値がどのファイルから来たのか知りたいです。
Linux カーネル (vmlinux.lds) のリンカー ファイルから、_PAGE_OFFSET の値が 0xc0000000 であることを知りましたが、何らかの理由でこの値を変更したいのですが、この値がどのマクロから来ているのかわかりません。
したがって、この _PAGE_OFFSET の値がどのファイルから来たのか知りたいです。
「アンダースコア」のプレフィックスはアーキテクチャ固有であり、いくつかのアーキテクチャにのみ存在します。それらは、次のようなarchディレクトリにあります。
arch/x86/include/asm/page_32_types.h
一般に、それらを使用するべきではありません-そしてより一般的なものを使用する必要があります:
PAGE_OFFSET
これは、すべてのアーキテクチャタイプで定義されています。
include/asm-generic/page.h
たとえば、x86 arch を考えてみましょう。
arch/x86/include/asm/page_types.h :
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
arch/x86/include/asm/page_32_types.h :
#define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)
arch/x86/Kconfig:
config PAGE_OFFSET
hex
default 0xB0000000 if VMSPLIT_3G_OPT
default 0x80000000 if VMSPLIT_2G
default 0x78000000 if VMSPLIT_2G_OPT
default 0x40000000 if VMSPLIT_1G
default 0xC0000000
depends on X86_32
arch/x86/Kconfig の PAGE_OFFSET は、page_32_types.h の CONFIG_PAGE_OFFSET です。プレフィックス 'CONFIG_' はmake systemによって自動的に追加されるためです。