Kbuild
Оригинал – https://docs.kernel.org/kbuild/kbuild.html
Выходные файлы
modules.order
Этот файл записывает порядок, в котором модули появляются в Makefiles. Это используется утилитой "modprobe" для детерминированного разрешения имён, которые соответствуют нескольким модулям.
modules.builtin
Этот файл содержит список всех модулей, которые встроены в ядро. Он используется модулем "modprobe", чтобы избежать ошибок при попытке загрузки каких-либо встроенных модулей.
modules.builtin.modinfo
Этот файл содержит информацию о модулях (modinfo), которые встроены в ядро. В отличие от "modinfo" отдельного модуля, тут все поля имеют префикс с именем модуля, к которому относятся.
Переменные окружения
KCPPFLAGS
Дополнительные параметры для передачи во время предварительной обработки. Параметры предварительной обработки будут использоваться во всех случаях, когда kbuild выполняет предварительную обработку, включая сборку файлов на языке C и файлов ассемблера.
KAFLAGS
Дополнительные параметры для кода ассемблера (для встроенного и модулей).
AFLAGS_MODULE
Дополнительные параметры ассемблера для модулей.
AFLAGS_KERNEL
Дополнительные параметры кода ассемблера встроенного в ядро.
KCFLAGS
Дополнительные параметры для компилятора C (для встроенного кода и модулей).
KRUSTFLAGS
Дополнительные параметры для компилятора Rust (для встроенного кода и модулей).
CFLAGS_KERNEL
Дополнительные параметры для $(CC)
при компиляции кода, который компилируется как встроенный.
RUSTFLAGS_KERNEL
Дополнительные параметры для $(RUSTC)
, используемые для компиляции кода, который компилируется как встроенный.
RUSTFLAGS_MODULE
Дополнительные специфичные для модулей параметры для использования с $(RUSTC)
.
LDFLAGS_MODULE
Дополнительные параметры, используемые для $(LD)
при компоновке модулей.
HOSTCFLAGS
Дополнительные флаги, которые нужно передать $(HOSTCC)
при компиляции программ хоста.
HOSTCXXFLAGS
Дополнительные флаги, которые нужно передать в $(HOSTCXX)
при компиляции программ хоста.
HOSTRUSTFLAGS
Дополнительные флаги, которые нужно передать в $(HOSTRUSTC)
при компиляции программ хоста.
HOSTLDFLAGS
Дополнительные флаги, которые нужно передать при компоновке программ хоста.
HOSTLDLIBS
Дополнительные библиотеки, которые нужно скомпоновать при компиляции программ хоста.
USERCFLAGS
Дополнительные параметры, используемые для $(CC)
при компиляции пользовательских программ.
USERLDFLAGS
Дополнительные опции, используемые для $(LD)
при компоновке пользовательских программ. Пользовательские программы связываются с помощью CC, поэтому $(USERLDFLAGS)
должны включать префикс -Wl,
при необходимости.
KBUILD_KCONFIG
Для этой переменной среды в качестве значения установите имя "самого верхнего" файла Kconfig. Имя по умолчанию - "Kconfig".
KBUILD_VERBOSE
Установите уровень детализации вывода сообщений kbuild. Может принимать те же значения, что и V=...
.
Смотрите make help
для полного списка значений.
Установка V=...
имеет приоритет над KBUILD_VERBOSE
.
KBUILD_EXTMOD
Укажите директорию c исходным кодом внешних модулей (при их сборке).
Установка M=...
имеет приоритет над KBUILD_EXTMOD
.
KBUILD_OUTPUT
Укажите каталог для вывода результатов сборки я дра.
Также можно указать каталог вывода с помощью O=...
.
Установка O=...
имеет приоритет над KBUILD_OUTPUT
.
KBUILD_EXTRA_WARN
Укажите дополнительные проверки сборки. Тот же самый параметр можно присвоить, передавая W=...
из командной строки.
Смотрите make help
для списка поддерживаемых значений.
Установка W=...
имеет приоритет над KBUILD_EXTRA_WARN
.
KBUILD_DEBARCH
Для цели deb-pkg позволяет переопределять обычную эвристику, используемую deb-pkg. Обычно deb-pkg пытается угадать правильную архитектуру на основе переменной UTS_MACHINE
и на некоторых архитектурах также конфигурации ядра. Предполагается (но не проверяется), что значение KBUILD_DEBARCH
является допустимой архитектурой Debian.
KDOCFLAGS
Укажите дополнительные флаги (предупреждения/ошибки) для проверки kernel-doc во время сборки, см. scripts/kernel-doc для поддерживаемых флагов. Обратите внимание, что это в настоящее время не применяется к сборке документации.
ARCH
В переменной ARCH
укажите архитектуру, для которой собирается ядро.
В большинстве случаев название архитектуры совпадает с названием каталога, который можно найти в каталоге arch/
.
Но некоторые архитектуры, такие как x86 и sparc, имеют псевдонимы (aliases).
- x86: i386 для 32 бит, x86_64 для 64 бит
- parisc: parisc64 для 64 бит
- sparc: sparc32 для 32 бит, sparc64 для 64 бит
CROSS_COMPILE
Укажите необязательную фиксированную часть имени файла "binutils". CROSS_COMPILE
может быть частью имени файла или полным путем.
CROSS_COMPILE также используется для ccache в некоторых сетапах.
CF
Дополнительные параметры для sparse.
Часто CF используется в командной строке следующим образом:
make CF=-Wbitwise C=2
INSTALL_PATH
INSTALL_PATH
указывает, куда поместить обновленные образы ядра и системных карт (system map). По умолчанию это /boot, но вы можете установить другие значения.
INSTALLKERNEL
Скрипт установки, который вызывается при использовании команды "make install". По умолчанию его название - "installkernel".
Cкрипт будет вызван с следующими аргументами:
- $1 - версия ядра
- $2 - файл с образом ядра
- $3 - файл с картой ядра
- $4 - путь установки по умолчанию (если на задана – используется корневая директория)
Реализация make install
зависит от архитектуры и может отличаться от приведенной выше.
INSTALLKERNEL
предоставляется для возможности указания пользовательского установщика при кросс-компиляции ядра.
MODLIB
Укажите, куда устанавливать модули. Значение по умолчанию:
$(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
Значение может быть переопределено, в таком случае значение по умолчанию игнорируется.
INSTALL_MOD_PATH
INSTALL_MOD_PATH
задает префикс для MODLIB, который используется для переноса каталога модулей, необходимого для корневых сборочных каталогов (build roots). Эта переменная не определена в файле makefile, но аргумент может быть передан команде make
при необходимости.
INSTALL_MOD_STRIP
INSTALL_MOD_STRIP
, если определена, приведет к удалению отладочных символов из модулей после их установки. Если INSTALL_MOD_STRIP
равно "1", то будет использована опция по умолчанию --strip-debug
. В противном случае будет использовано значение INSTALL_MOD_STRIP
как опции для команды strip.
Утилита strip, является частью GNU Binutils и используется для удаления отладочных символов из бинарных файлов.
INSTALL_HDR_PATH
INSTALL_HDR_PATH
указывает, к уда устанавливаются заголовки пространства пользователя при выполнении команды make headers_*
.
Значение по умолчанию:
$(objtree)/usr
$(objtree)
- это каталог, в котором сохраняются выходные файлы. Каталог выходных файлов часто устанавливается с помощью опции O=...
при запуске программы из командной строки.
Значение может быть переопределено, в таком случае значение по умолчанию игнорирует ся.
INSTALL_DTBS_PATH
INSTALL_DTBS_PATH
указывает, куда устанавливать блобы дерева устройств для переносов, необходимых для корневых сборочных каталогов (build roots). Это не определено в файле make, но аргумент может быть передан в make по необходимости.
KBUILD_ABS_SRCTREE
Kbuild использует относительный путь для указания на дерево, когда это возможно. Например, во время сборки в исходном дереве путь исходного дерева — это "."
Установка этого флага запрашивает от Kbuild использование абсолютного пути к исходному дереву. Есть несколько полезных случаев, когда это необходимо, например, при генерации tag-файлов с абсолютными записями путей и т. д.
KBUILD_SIGN_PIN
Эта переменная позволяет передать пароль или PIN-код в утилиту sign-file при подписи модулей ядра, если приватный ключ этого требует.
KBUILD_MODPOST_WARN
Переменная KBUILD_MODPOST_WARN
может быть установлена для избежания ошибок в случае наличия неопределенных символов на этапе окончательной компоновки модуля. Она меняет такие ошибки на предупреждения.
KBUILD_MODPOST_NOFINAL
KBUILD_MODPOST_NOFINAL
может быть установлен для пропуска завершающей компоновки модулей. Это полезно только для ускорения тестовой компиляции.
KBUILD_EXTRA_SYMBOLS
Для модулей, которые используют символы из других модулей. Подробнее см. в разделе "Сборка внешних модулей".
ALLSOURCE_ARCHS
Для целей типа tags/TAGS/cscope вы можете указать несколько архитектур, которые будут включены в базы данных, разделенные пробелом. Например:
$ make ALLSOURCE_ARCHS="x86 mips arm" tags
Чтобы сборки на все доступные архитектуры, вы также можете указать "all". Например:
$ make ALLSOURCE_ARCHS=all tags
tags файл отличается от TAGS файла тем, что первы й предназначен для редакторов Vim и Vi, а второй для Emacs и XEmacs.
Оба являются индексными файлами, которые помогают разработчикам быстро находить определения символов в исходном коде.
IGNORE_DIRS
Для целей tags/TAGS/cscope можно исключить определённые директории, которые не войдут в базу данных, указав их через пробел следующим образом:
$ make IGNORE_DIRS="drivers/gpu/drm/radeon tools" cscope
KBUILD_BUILD_TIMESTAMP
Установка этого значения в строку даты переопределяет отметку времени, использованную в определении UTS_VERSION
(uname -v
в работающем ядре). Значение должно быть строкой, которая может быть передана команде date -d
. Значение по умолчанию - результат выполнения команды date
во время сборки.
KBUILD_BUILD_USER, KBUILD_BUILD_HOST
Эти две переменные позволяют заменить строку user@host
, отображаемую при загрузке и в /proc/version
. Значение по умолчанию - результат команд whoami
и host
соответственно.
LLVM
Если эта переменная установлена в 1, то Kbuild будет использовать утилиты Clang и LLVM вместо GCC и GNU binutils для сборки ядра.