Первая, которую вы цитируете, является версией для архитектуры x86..config
для архитектуры x86 определяет символ препроцессора CONFIG_HAVE_SETUP_PER_CPU_AREA
.И обратите внимание, что вторая ссылка, которую вы указали, используется, когда этот символ не определен.(Третья версия используется, когда CONFIG_SMP
не определена, и поэтому также не будет применяться для этой конфигурации x86.)
В ядро linux встроена довольно сложная и надежная система конфигурации.Смотрите файлы с именем Kconfig
, которые разбросаны по всему дереву исходного кода ядра.В частности, arch/x86/Kconfig
имеет этот слепок:
config HAVE_SETUP_PER_CPU_AREA
def_bool y
, который в основном говорит "безоговорочно определите символ HAVE_SETUP_PER_CPU_AREA
для True при сборке x86".
В итоге настройки вВаш файл ядра .config
выбирает множество функций и иногда отменяет выбор других, определяя или не определяя символы.Эти символы используются при выборе кода, который компилируется и связывается. Некоторые параметры находятся под вашим контролем (попробуйте make menuconfig
, чтобы увидеть их);другие определяются по умолчанию для каждой архитектуры.
РЕДАКТИРОВАТЬ:Если CONFIG_SMP
не включен, этот параметр в arch/x86/kernel/Makefile
предотвращает включение setup_per_cpu_areas
для x86:
obj-$(CONFIG_SMP) += setup_percpu.o
Система makefile ядра преобразует это в obj-n
или obj-y
в соответствии ск определению CONFIG_SMP
.