Функции с одинаковой сигнатурой в ядре Linux - PullRequest
0 голосов
/ 24 декабря 2018

Рассмотрим функцию setup_per_cpu_areas.Существует одно определение в коде, специфичном для архитектуры: https://elixir.bootlin.com/linux/v4.14/source/arch/x86/kernel/setup_percpu.c#L166. Есть другое определение, определенное в коде, не зависящем от архитектуры, здесь: https://elixir.bootlin.com/linux/v4.14/source/mm/percpu.c#L2665 или здесь: https://elixir.bootlin.com/linux/v4.14/source/mm/percpu.c#L2696.

После сборки ядра, котороеодин используется в образе ядра?В исходном коде ядра таких случаев много, так в общем, какова цель такого шаблона?

1 Ответ

0 голосов
/ 24 декабря 2018

Первая, которую вы цитируете, является версией для архитектуры 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...