Как передать параметры компилятора во время компиляции ядра Linux?

По причинам, мне нужно скомпилировать ядро ​​Linux (в настоящее время 4.7.10), передавая некоторые простые и невинные дополнительные параметры командной строки (например, -pipe -Wsomething и т. д.) компилятору Си.

Как мне это сделать?

Более конкретно, как мне применить эти флаги компилятора во время простого make а также во время make menuconfig и аналогичные, т. е. чтобы они всегда передавались компилятору C при каждом его выполнении.

PS: прошу вас, пожалуйста, не спрашивать меня о деталях, почему мне нужно что-то столь глупое, как это. Удовлетворительное объяснение этого, вероятно, заняло бы несколько часов, чтобы написать, что не является одним из моих лучших навыков.

1 ответ

Решение

Из файла сборки ядра Linux:

# Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
# last assignments
KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS)
KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(KAFLAGS)
KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS)

Таким образом, передача дополнительных опций для Kbuild использует обычные переменные среды /makefile, но с K префикс:

make "KCFLAGS=-pipe -Wsomething"

Kbuild - документация ядра Linux предоставляет список опций,

  • KCPPFLAGS

    Дополнительные параметры, передаваемые при предварительной обработке. Параметры предварительной обработки будут использоваться во всех случаях, когда kbuild выполняет предварительную обработку, включая сборку файлов C и файлов ассемблера.

  • КАФЛАГИ

    Дополнительные опции к ассемблеру (для встроенных и модулей).

  • AFLAGS_MODULE

    Дополнительные возможности ассемблера для модулей.

  • AFLAGS_KERNEL

    Дополнительные возможности ассемблера для встроенного.

  • KCFLAGS

    Дополнительные опции к компилятору C (для встроенных и модулей).

  • CFLAGS_KERNEL

    Дополнительные параметры для $(CC) при использовании для компиляции кода, который компилируется как встроенный.

  • CFLAGS_MODULE

    Дополнительные параметры модуля для использования для $(CC).

  • LDFLAGS_MODULE

    Дополнительные параметры, используемые для $(LD) при компоновке модулей.

  • HOSTCFLAGS

    Дополнительные флаги, передаваемые в $(HOSTCC) при создании хост-программ

Другие вопросы по тегам