Ядро Linux

Объяснение Makefile ядра Linux

Объяснение Makefile ядра Linux
При разработке программного обеспечения процесс создания больших репозиториев кода и управления ими может легко стать очень сложным.

Чтобы управлять этой сложностью и уменьшить ее, разработчики программного обеспечения организуют код в небольшие файлы, которые связаны с конкретными модулями. Разработчики могут скомпилировать каждый из этих файлов отдельно, а затем связать их вместе, чтобы создать окончательный исполняемый файл программного обеспечения.

Примером этого являются проекты C, состоящие из файлов исходного кода в .c расширений и программных интерфейсов в .h расширения. Каждый исходный файл компилируется вместе с файлами заголовков для создания. o объекты, связанные вместе с помощью библиотек, тем самым создавая исполняемые файлы.

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

Инструменты GNU Make предоставляют набор правил и соглашений, используемых для создания Make-файлов, и упрощают повышение эффективности.

В этом руководстве мы обсудим Makefiles ядра Linux, в частности Kconfig а также Kbuild.

Прежде чем мы начнем, стоит отметить, что эта статья не претендует на то, чтобы научить все о системе сборки ядра. Тем не менее, мы предоставляем общий обзор создания образа и модулей vmlinux.

Если вам нужна информация, выходящая за рамки этого руководства, мы рекомендуем следующий ресурс для получения более подробной информации:

https: // linkfy.в / goMakefilesDocs

https: // linkfy.в / gnuMake

Makefiles ядра: обзор

Система сборки ядра, также называемая системой конфигурации, является важным инструментом для тех, кто в ней нуждается, и который существует уже некоторое время. Однако не все будут использовать эту систему; даже драйверы и другие разработчики низкоуровневого ПО редко используют его. Раз вы читаете это, значит, вы хотите узнать больше о системе сборки ядра.

Таким образом, мы обсудим, как компилируется ядро, и обсудим систему Kbuild и Kconfig, чтобы вы могли лучше их понять.

Makefile ядра состоит из пяти основных компонентов:

  1. Makefile: Это верхний make-файл, расположенный в корне исходного кода.
  2. arch / $ (ARCH) Makefile: Это архива Makefile; он действует как дополнение к верхнему Makefile.
  3. .config: Это файл конфигурации ядра.
  4. Скрипты / Makefile.*: Это определяет установленные правила для всех Make-файлов kbuild.
  5. Kbuild Makefiles: Существует около 500 сборочных файлов Makefile, и их не очень легко читать. Рассмотрим такой файл, как:

https: // эликсир.бутлин.com / linux / последний / источник / скрипты / Kbuild.включать

Kconfig

Файл Kconfig содержит модули, которые помогают при использовании make * config. Это помогает ядру производить выборочные конфигурации, создавая модульность и настраиваемость для процесса сборки ядра.

Система Kconfig определяет различные цели конфигурации. Вы можете использовать справку make для просмотра доступных целей. Эти цели обрабатываются различными программами, предоставляемыми ядром в процессе сборки.

Некоторые из целей Kconfig включают:

сделать linux-windriver.gconfig
сделать linux-windriver.xconfig

ПРИМЕЧАНИЕ: Чтобы использовать gconfig и xconfig, у вас должны быть установлены инструменты разработки QT в хост-системе.

Учтите следующее:

Снимок кода Defconfig со следующего ресурса:

https: // эликсир.бутлин.com / linux / v5.9 / источник / сценарии / kconfig / Makefile # L98

1. defconfig: $ (obj) / conf
2. ifneq ($ (подстановочный знак $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Конфигурация по умолчанию основана на '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. еще
6. @ $ (kecho) "*** Конфигурация по умолчанию основана на цели '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (СДЕЛАТЬ) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (подстановочный знак $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.конфигурация: $ (obj) / conf
16. $ (если $ (call configfiles) ,, $ (ошибка Нет конфигурации для этой цели в этой архитектуре))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.ш-м .config $ (файлы конфигурации)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Снимок кода Oldconfig со следующего ресурса:

https: // эликсир.бутлин.com / linux / v5.9 / источник / сценарии / kconfig / conf.с # L694

1. case olddefconfig:
2. По умолчанию:
3. перерыв;
4.
5.
6. if (input_mode == savedefconfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Ошибка при сохранении defconfig в:% s \ n \ n",
9. defconfig_file);
10. возврат 1;
11.
12. иначе, если (input_mode != listnewconfig && input_mode != helpnewconfig)
13. если (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Ошибка при записи конфигурации.\ n \ n ");
15. выход (1);
16.
17.
18. / *
19. * Создать авто.conf, если он не существует.
20. * Это предотвращает GNU Make 4.1 или старше от испускания
21 год. * "include / config / auto.conf: нет такого файла или каталога "
22. * в Makefile верхнего уровня
23. *
24. * syncconfig всегда создает или обновляет автоматически.conf, потому что это
25. * используется во время сборки.
26 год. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28 год. fprintf (stderr,
29. "\ n *** Ошибка при синхронизации конфигурации.\ n \ n ");
30. возврат 1;
31 год.
32.
33. возврат 0;
34.

В системе Kconfig много целей. Некоторые общие включают config и menuconfig.

Как уже упоминалось, цели обрабатываются различными программами в хост-системах, предоставляя графический интерфейс или командную строку. Вы можете найти инструменты Kconfig в / scripts / Kconfig в исходном коде ядра.

https: // эликсир.бутлин.com / linux / последний / источник / скрипты / kconfig

https: // эликсир.бутлин.com / linux / последний / источник / сценарии / kconfig / Makefile

Первый процесс обычно заключается в чтении файла Kconfig в корневом каталоге, который используется для создания исходной базы данных конфигурации. По мере продолжения процесса база данных обновляется при чтении файлов в следующем порядке:

.config
/ lib / modules / $ (оболочка, uname-r) /.config
/ и т.д. / ядро-конфигурация
/ boot / config - $ (оболочка, uname-r)
ARCH_DEFCONFIG
арка / $ (ARCH) / defconfig

.config затем удаляется в syncconfig, который принимает .файл конфигурации в качестве ввода. Он обрабатывает файл и выводит файлы, которые затем классифицируются по различным категориям, например:

Файлы Kbuild

Почти все файлы ядра - это файлы Kbuild Makefile, использующие инфраструктуру Kbuild, которая является рекурсивной функцией make. Рекурсивный Make - это способ использования инструмента Make в качестве команды в Makefile. Рекурсия очень полезна при компиляции большого проекта.

Kbuild работает, ссылаясь на все файлы, упомянутые в предыдущем разделе.

Система Kbuild собирает свои компоненты, используя верхний Makefile, который включает в себя Arch Makefile с именем arch / $ (ARCH) / Makefile в файлах конфигурации. Он рекурсивно спускается в подкаталоги, вызывая Make для компонентов, используя процедуры в скриптах / Makefile.*. Затем Kbuild опирается на соседний объект и связывает их в объекты, создавая vmlinux.

Чтобы узнать больше о синтаксисе, используемом в Kbuild Makefiles, обратитесь к документации.

Рассмотрим следующий сценарий.

https: // github.ком / torvalds / Linux / blob / мастер / скрипты / ссылка-vmlinux.ш

Объектные файлы o, используемые для создания vmlinux, сначала компилируются в соответствующие встроенные .a файлы как var KBUILD_VMLINUX_INIT, MAIN, LIBS. Они составлены в vmlinux.

https: // github.com / torvalds / linux / blob / мастер / скрипты / Makefile.строить

Заключение

В этом руководстве мы рассмотрели системы Kbuild и Kconfig в системе сборки ядра и как они работают. Как мы упоминали в начале руководства, обсуждаемые темы обширны и не могут быть рассмотрены в одном учебном пособии.

Добавьте жесты мыши в Windows 10 с помощью этих бесплатных инструментов
В последние годы компьютеры и операционные системы сильно эволюционировали. Было время, когда пользователям приходилось использовать команды для навиг...
Контроль и управление перемещением мыши между несколькими мониторами в Windows 10
Диспетчер мыши с двумя дисплеями позволяет контролировать и настраивать движение мыши между несколькими мониторами, замедляя ее движения возле границы...
WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...