- Kconfig make configВ¶
- GeneralВ¶
- KCONFIG_CONFIGВ¶
- KCONFIG_DEFCONFIG_LISTВ¶
- KCONFIG_OVERWRITECONFIGВ¶
- CONFIG_ В¶
- KCONFIG_ALLCONFIGВ¶
- Русские Блоги
- Объяснение механизма настройки ядра Linux (make menuconfig, Kconfig, makefile)
- Buildroot — часть 1. Общие сведения, сборка минимальной системы, настройка через меню
- Введение
- Где взять и как начать
- Важные замечания и полезные советы
- Полезные переменные
- Визуализация
- Полезные скрипты
- Соберем cтоковый дистрибутив
- Создание конфигурации собственной платы
- Добавление файлов платы
- Настройка параметров сборки через KConfig
- Конфигурирование Systemd
- Сохранение конфигурации системы
- Конфигурирование ядра Linux
Kconfig make configВ¶
This file contains some assistance for using make *config .
Use “make help” to list all of the possible configuration targets.
The xconfig (вЂqconf’), menuconfig (вЂmconf’), and nconfig (вЂnconf’) programs also have embedded help text. Be sure to check that for navigation, search, and other general help text.
GeneralВ¶
New kernel releases often introduce new config symbols. Often more important, new kernel releases may rename config symbols. When this happens, using a previously working .config file and running “make oldconfig” won’t necessarily produce a working new kernel for you, so you may find that you need to see what NEW kernel symbols have been introduced.
To see a list of new config symbols, use:
and the config program will list any new symbols, one per line.
Alternatively, you can use the brute force method:
Environment variables for *config
KCONFIG_CONFIGВ¶
This environment variable can be used to specify a default kernel config file name to override the default name of “.config”.
KCONFIG_DEFCONFIG_LISTВ¶
This environment variable specifies a list of config files which can be used as a base configuration in case the .config does not exist yet. Entries in the list are separated with whitespaces to each other, and the first one that exists is used.
KCONFIG_OVERWRITECONFIGВ¶
If you set KCONFIG_OVERWRITECONFIG in the environment, Kconfig will not break symlinks when .config is a symlink to somewhere else.
CONFIG_ В¶
If you set CONFIG_ in the environment, Kconfig will prefix all symbols with its value when saving the configuration, instead of using the default, CONFIG_ .
Environment variables for вЂ
KCONFIG_ALLCONFIGВ¶
(partially based on lkml email from/by Rob Landley, re: miniconfig)
The allyesconfig/allmodconfig/allnoconfig/randconfig variants can also use the environment variable KCONFIG_ALLCONFIG as a flag or a filename that contains config symbols that the user requires to be set to a specific value. If KCONFIG_ALLCONFIG is used without a filename where KCONFIG_ALLCONFIG == “” or KCONFIG_ALLCONFIG == “1”, make *config checks for a file named “all
This enables you to create “miniature” config (miniconfig) or custom config files containing just the config symbols that you are interested in. Then the kernel config system generates the full .config file, including symbols of your miniconfig file.
This вЂKCONFIG_ALLCONFIG’ file is a config file which contains (usually a subset of all) preset config symbols. These variable settings are still subject to normal dependency checks.
Источник
Русские Блоги
Объяснение механизма настройки ядра Linux (make menuconfig, Kconfig, makefile)
Когда мы представили программирование модулей ранее, мы представили два способа для драйверов войти в ядро: модули и прямая компиляция в ядро, а также представили модуль Вид Метод компиляции — в отдельной папке через makefile с указанием пути исходников ядра для завершения
Итак, как скомпилировать драйвер прямо в ядро? Какую адаптацию ядра мы часто слышим во время фактического процесса конфигурации трансплантации ядра? Когда мы настраиваем ядро Linux, мы часто выполняем команду make menuconfig, после чего на экране появляется следующий интерфейс:
Как создается этот интерфейс? О какой связи между конфигурацией ядра и компиляцией мы часто говорим? Давайте возьмем это, чтобы объяснить механизм конфигурации ядра Linux и процесс его компиляции. Система конфигурации ядра Linux состоит из трех частей, а именно: 1. Makefile: Распространяется в корневом каталоге исходного кода ядра Linux и в каталогах различных уровней, определяя правила компиляции ядра Linux; 2. Файл конфигурации (config.in (ядро 2.4, ядро 2.6)): Предоставляет пользователям возможность выбора конфигурации; 3. Инструменты конфигурации: включая интерпретатор команд конфигурации (интерпретирует команды конфигурации, используемые в сценарии конфигурации) и пользовательский интерфейс конфигурации (обеспечивает символьный интерфейс, графический интерфейс на основе Ncurses и интерфейс конфигурации пользователя с графическим интерфейсом на основе Xwindows, каждый из которых соответствует Make config, сделайте menuconfig и сделайте xconfig). Эти инструменты конфигурации написаны на языках сценариев, таких как Tcl / TK и Perl (и некоторые коды, написанные на C, также включены). В этой статье не анализируется сама система конфигурации, а рассказывается, как ее использовать. Поэтому, если вы не являетесь сопровождающим системы конфигурации, обычным разработчикам ядра не нужно понимать их принципы, а нужно только знать, как писать Makefile и файлы конфигурации. Два, объяснение процесса makefile menuconfig Когда мы выполняем команду make menuconfig, что именно делает для нас система? В нем задействовано несколько файлов, давайте объясним их по одному.
файл arch / $ ARCH / Kconfig, файлы Kconfig на каждом уровне каталога Файлы Makefile в корневом каталоге ядра Linux, файлы Makefile на каждом уровне каталога Файл .config в корневом каталоге ядра Linux, файл конфигурации в arm / $ ARCH / Файл include / generated / autoconf.h в корневом каталоге ядра Linux 1) В папке сценариев хранятся файлы, относящиеся к графическому изображению интерфейса конфигурации make menuconfig. Нам, как пользователям, не нужно заботиться о содержимом этой папки. 2) Когда мы выполняем команду make menuconfig и появляется показанный выше синий интерфейс конфигурации, система помогает нам сделать следующее: Сначала система прочитает файл Kconfig в каталоге arch / $ ARCH /, чтобы сгенерировать все параметры интерфейса конфигурации (Kconfig является ядром всего механизма конфигурации Linux), а затем каково значение переменной среды ARCH? Это определяется файлом makefile в корневом каталоге ядра Linux. В make-файле есть определение этой переменной среды:
Или с помощью команды make ARCH = arm menuconfig для создания интерфейса конфигурации, По умолчанию сгенерированный интерфейс состоит в том, что все параметры не имеют значения. Например, Управление по академическим вопросам проводит экзамены. В число экзаменационных предметов могут входить иностранный язык, китайский язык, математика и другие предметы. Это эквивалентно выбору руки для сдачи экзамена. Система прочитает файл arm / arm / kconfig, чтобы сгенерировать параметры конфигурации (выберите документ раздела arm), а также система предоставит экзаменационные вопросы для более чем 10 домашних заданий, таких как раздел x86 и раздел milps. 3) Предполагая, что Офис по академическим вопросам более «добрый», чтобы опасаться, что некоторые студенты будут отвечать на хорошие тестовые вопросы, мы также подготовили для нас справочный ответ (вариант конфигурации по умолчанию), который хранится в arch / $ ARCH / configs, который предназначен для руки Папка arch / arm / configs:
В этой папке много вариантов, какую из них прочитает система? По умолчанию ядро будет читать файл .config в корневом каталоге ядра Linux как параметр ядра по умолчанию (справочный ответ на тестовый вопрос). Обычно мы выбираем серию, которая наиболее близка к нашей плате разработки в соответствии с типом платы разработки для корневого каталога ядра Linux. (Выберите наиболее близкий справочный ответ) #cp arch/arm/configs/s3c2410_defconfig .config 4).config Предполагая, что Управление по академическим вопросам оставило свой разум, предоставленный им справочный ответ не совсем правильный (файл .config не совсем соответствует нашей плате), тогда мы можем напрямую изменить файл .config и выполнить команду make menuconfig, чтобы прочитать новый. Параметры Но обычно мы не принимаем это решение. Мы выбираем определенные параметры через пробел, esc и вводим в интерфейс конфигурации, чтобы выбрать или отменить выбор. При окончательном сохранении и выходе ядро Linux обновит новые параметры (правильные справочные ответы) В .config мы можем переименовать .config в другие файлы и сохранить его (система удалит файл .config, когда вы выполните make distclean), и нам не нужно переходить в arch / arm / при настройке ядра в будущем. Соответствующие файлы получаются под конфигами, что избавляет от необходимости реконфигурировать, просто скопируйте сохраненный файл .config как .config. 5) После двух вышеуказанных шагов мы можем правильно читать и настраивать нужный нам интерфейс. Итак, как они устанавливают отношения компиляции с make-файлом? Когда вы сохраняете опцию make menuconfig, система не только автоматически обновит .config, но и сохранит все опции в виде макроса. В файле include / generated / autoconf.h в корневом каталоге ядра Linux
Исходный код в ядре будет включать указанный выше файл .h и условно компилировать его с определением макроса. Когда нам нужно выбрать, компилировать ли файл целиком, нам также необходимо изменить соответствующий make-файл, например:
Когда мы выбираем, компилировать ли файл s3c2410_ts.c, make-файл решает, компилировать ли этот файл в соответствии с CONFIG_TOUCHSCREEN_S3C2410. Этот макрос определен в файле Kconfig. После того, как мы его настроили, он появится в .config и autconf. Пока что мы Процесс компиляции всего ядра Linux завершен. Наконец, мы обнаружим, что во всем процессе настройки ядра Linux единственным интерфейсом, оставшимся пользователю, на самом деле является Kconfig, файлы makefile и соответствующие исходные файлы каждого уровня. Например, если мы хотим добавить функцию в ядро и управлять процессом ее запроса через make menuconfig Первое, что нужно сделать: Измените файл Kconfig в соответствующем каталоге и добавьте соответствующие параметры в соответствии с синтаксисом Kconfig; Выполните make menuconfig рядом с выбором: компилировать в ядро или не компилировать в ядро, или компилировать в модуль, файлы .config и autoconf.h будут созданы автоматически; Наконец, измените make-файл в соответствующем каталоге, чтобы завершить добавление параметров компиляции; Выполните команду make zImage в конце компиляции. Три конкретных примера Давайте возьмем эксперимент с модулем, который мы провели ранее, в качестве примера, чтобы объяснить, как скомпилировать отдельно скомпилированный модуль в ядро или в модуль с помощью механизма make menuconfig. Допустим, у меня уже есть такой драйвер: Источник Buildroot — часть 1. Общие сведения, сборка минимальной системы, настройка через менюВведениеВ данной серии статей я хочу рассмотреть систему сборки дистрибутива buildroot и поделиться опытом её кастомизации. Здесь будет практический опыт создания небольшой ОС с графическим интерфейсом и минимальным функционалом. Прежде всего, не следует путать систему сборки и дистрибутив. Buildroot может собрать систему из набора пакетов, которые ему предложили. Buildroot построен на make-файлах и поэтому имеет огромные возможности по кастомизации. Заменить пакет на другую версию, добавить свой пакет, поменять правила сборки пакета, кастомизировать файловую систему после установки всех пакетов? Всё это умеет buildroot. В России buildroot используется, но на мой взгляд мало русскоязычной информации для новичков. Цель работы — собрать дистрибутив с live-загрузкой, интерфейсом icewm и браузером. Целевая платформа — virtualbox. Зачем собирать свой дистрибутив? Зачастую нужен ограниченный функционал при ограниченных ресурсах. Ещё чаще в автоматизации нужно создавать прошивки. Приспосабливать дистрибутив общего назначения, вычищая лишние пакеты и превращать его в прошивку путь более трудоёмкий, чем собрать новый дистриб. Использование Gentoo тоже имеет свои ограничения. Buildroot система очень мощная, но она ничего не сделает за вас. Она может лишь дать возможности и автоматизировать процесс сборки. Альтернативные системы сборки (yocto, open build system и прочие) не рассматриваются и не сравниваются. Где взять и как начатьСайт проекта — buildroot.org. Здесь можно скачать актуальную версию и прочитать руководство. Там же можно обратиться к сообществу, есть багтрекер, mail-lists и irc-канал. Buildroot оперирует defconfig’aми для целевой платы сборки. Defconfig — это конфигурационный файл, хранящий в себе только опции, не имеющими значения по умолчанию. Именно он определяет, что и как будет собрано. При этом можно отдельно настроить конфиги busybox, linux-kernel, uClibc, загрузчиков u-boot и barebox, но все они будут привязаны к целевой плате. board — каталог с файлами, специфичными для каждой платы. Это могут быть скрипты формирования образов системы(iso, sdcart, cpio и прочие), каталог overlay, конфиг ядер и прочее Конфигурирование сборки осуществляется через KConfig. Эта же система используется для сборки ядра linux. Список самых часто используемых команд (выполнять в каталоге buildroot):
Важные замечания и полезные советыBuildroot не пересобирает уже собранные пакеты! Поэтому может создаться ситуация, когда потребуется полная пересборка. Можно пересобрать отдельный пакет командой make packagename-rebuild. Например, можно пересобрать ядро linux: Buildroot хранит состояние любого пакета созданием .stamp-файлов в каталоге output/build/$packagename: Следовательно, можно пересобрать root-fs и образы без пересборки пакетов: Полезные переменныеВ buildroot есть набор переменных для удобного конфигурирования
ВизуализацияВ buildroot есть возможность по визуализации.Можно построить схему зависимостей, график времени сборки, график размера пакетов в итоговой системе. Результаты в виде pdf файлов( на выбор есть svn,png) в каталоге output/graph. Примеры команд визуализации:
-graph-depends построить дерево зависимостей конкретного пакета Полезные скриптыВ каталоге buildroot есть подкаталог utils c полезными скриптами. Например, там есть скрипт, проверяющий корректность описания пакетов. Это может быть полезно при добавлении своих пакетов (я это сделаю позже). В файле utils/readme.txt есть описание этих скриптов. Соберем cтоковый дистрибутивВажно напомнить, что все операции ведутся от лица обычного пользователя, не root. Смотрим список конфигураций: Переключаемся на конфиг qemu_x86_64_defconfig И запускаем сборку Сборка завершается успешно, смотрим на результаты: Buildroot собрал образы, которые можно запустить в Qemu и убедиться, что они работают. Результат — запущенная в qemu система: Создание конфигурации собственной платыДобавление файлов платыСмотрим список конфигураций: В списке видим pc_x86_64_bios_defconfig. Мы создадим свою плату, скопировав её с конфигурации: Сразу же создадим каталог платы для хранения своих скриптов, rootfs-overlay и прочих нужных файлов: Переключаемся на этот defconfig: Таким образом, теперь конфиг сборки (хранится в .config в корне каталога buildroot’а) соответствует целевой машине x86-64 legacy(bios) загрузкой. Скопируем конфигурацию linux-kernel (пригодится в дальнейшем): Настройка параметров сборки через KConfigОткроется окно KConfig. Есть возможность конфигурировать с графическим интерфейсом (make nconfig, make xconfig, make gconfig): Входим в первый раздел Target Options. Здесь можно выбрать целевую архитектуру, под которую будет вестись сборка. Build options — здесь есть различные настройки сборки. Можно указать каталоги с исходными кодами, количество потоков сборки, зеркала для скачивания исходных кодов и прочие настройки. Оставим настройки по-умолчанию. Toolchain – здесь настраивается сам инструментарий сборки. О нем подробнее. Toolchain type – тип используемого тулчейна. Это может быть встроенный в buildroot или внешний тулчейн (можно указать каталог с уже собранным или url для скачивания). Для разных архитектур есть дополнительные опции. Например, для arm можно просто выбрать версию внешнего тулчейна Linaro. C library – выбор библиотеки С. От этого зависит работа всей системы. Обычно используется glibc, поддерживающая весь возможный функционал. Но она может оказаться слишком большой для встроенной системы, поэтому часто выбирают uClibc или musl. Мы выберем glibc (в дальнейшем это потребуется для использования systemd). Kernel Headers и Custom Kernel Headers series – должно совпадать с версией ядра, которое будет в собираемой системе. Для kernel headers можно так же указать путь к тарболу или git-репозиторий. GCC COMPILER VERSIONS – выбор версии компилятора, которая будет использована для сборки Additional gcc options – можно задать дополнительные опции компилятора. Нам без надобности пока что. System configuration позволяет задать будущие параметры созданной системы: Большинство пунктов понятны из названия. Обратим внимание на следующие пункты: Пример файла. Будет создан пользователь user с паролем admin, автоматически gid/uid, /bin/sh шеллом, группой по-умолчанию user, член группы root, комментарием Foo user Root filesystem overlay directories — каталог, накладываемый поверх собранной target-fs. Добавляет новые файлы и заменяет имеющиеся. Custom scripts to run before creating filesystem images — Скрипты, выполняемые непосредственно перед сворачиванием файловой системы в образы. Сам скрипт пока оставим пустым Перейдём в раздел Kernel Здесь задаются настройки ядра. Само ядро конфигурируется через make linux-menuconfig. Kernel configuration — путь к конфигу ядра. Можно выбрать конфигурацию по-умолчанию для выбранной архитектуры или defocnfig из Linux. В исходниках Linux есть набор defconfig’ов для разных целевых систем. НАйти нужный можно, глянув напрямую в исходники здесь. Например, для платы beagle bone black можно выбрать конфиг. Раздел Target packages позволяет выбрать, какие пакеты будут установлены в собираемую систему. Пока оставим без изменений. Позже мы добавим свои пакеты в этот список. Bootloaders — выбор собираемых загрузчиков. Выберем isolinix Конфигурирование SystemdSystemd становится одним из столбов linux, наравне с kernel и glibc. Поэтому вынес его настройку в отдельный пункт. Настраивается через make menuconfig, далее Target packages → System tools → systemd. Здесь можно указать, какие службы systemd будут установлены и запущены при старте системы. Сохранение конфигурации системыСохраняем этот конфиг через KConfig. После чего сохраним наш defconfig: Конфигурирование ядра LinuxКонфигурирование ядра linux вызывается следующей командой: Добавим поддержку видеокарты Virtualbox Добавим Virtualbox Guest integration support Сохраняем и выходим. ВАЖНО: конфигурация сохранится в output/build/linux-$version/config, но не в board/my_x86_board/linux.config Поэтому нужно вручную скопировать конфиг в место хранения: Этой командой я копирую ПОЛНЫЙ конфиг ядра, что нужно не всегда. Более правильный путь — сохранять defconfig ядра: После чего выполним полную пересборку всей системы.Т.к. buildroot не пересобирает уже собранное, то надо вручную указать пакеты для пересборки. Чтобы не терять время и нервы, небольшую систему проще пересобрать целиком): По завершении сборки запускаем VirtualBox(проверялось на версии 5.2 и 6.0) с загрузкой с cd-диска.Параметры системы: Источник |