Ядро Linux

Пояснення Makefile ядра Linux

Пояснення Makefile ядра Linux
При розробці програмного забезпечення процес створення та управління великими сховищами коду може стати дуже складним.

Для управління та зменшення цієї складності розробники програмного забезпечення організовують код у невеликі файли, що посилаються на певні модулі. Розробники можуть скомпілювати кожен з цих файлів окремо, а потім зв’язати їх, щоб створити остаточний виконуваний файл програмного забезпечення.

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

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

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

У цьому підручнику ми конкретно обговоримо Linux Kernel Makefiles Kconfig і Kbuild.

Перш ніж розпочати, варто зауважити, що ця стаття не претендує на те, щоб навчити усьому про систему побудови ядра. Однак ми пропонуємо високорівневий огляд побудови образу та модулів vmlinux.

Якщо ви хочете отримати інформацію, яка виходить за рамки цього підручника, радимо отримати наступний ресурс для отримання кращої інформації:

https: // linkfy.to / goMakefilesDocs

https: // linkfy.to / gnuMake

Змінні файли ядра: огляд

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

Таким чином, ми обговоримо, як ядро ​​збирається, і обговоримо систему Kbuild та Kconfig, щоб ви могли їх краще зрозуміти.

Ядро Makefile має п’ять основних компонентів:

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

https: // еліксир.бутлін.com / linux / latest / source / scripts / Kbuild.включати

Kconfig

Файл Kconfig містить модулі, які допомагають використовувати конфігурацію make *. Це допомагає ядру робити вибіркові конфігурації, створюючи модульність та настроюваність для процесу побудови ядра.

Існують різні цілі конфігурації, визначені системою Kconfig. Ви можете використовувати довідку make, щоб переглянути доступні цілі. Ці цілі обробляються різними програмами, наданими ядром під час процесу збірки.

Деякі цілі Kconfig включають:

зробити linux-windriver.gconfig
зробити linux-windriver.xconfig

ПРИМІТКА: Щоб використовувати gconfig та xconfig, вам слід встановити засоби розробки QT в хост-системі.

Розглянемо наступне:

Знімок коду Defconfig із наступного ресурсу:

https: // еліксир.бутлін.com / linux / v5.9 / source / scripts / 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) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (підстановочний знак $ (srctree) / ядро ​​/ configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.конфігурація: $ (obj) / conf
16. $ (якщо $ (викликати конфігураційні файли) ,, $ (помилка Для цієї цілі в цій архітектурі не існує конфігурації))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.ш-м .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Знімок коду Oldconfig із наступного ресурсу:

https: // еліксир.бутлін.com / linux / v5.9 / source / scripts / kconfig / conf.c # 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. * "включити / конфігурацію / авто.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 / latest / source / scripts / kconfig

https: // еліксир.бутлін.com / linux / latest / source / scripts / kconfig / Makefile

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

.конфігурація
/ lib / modules / $ (оболонка, uname-r) /.конфігурація
/ etc / kernel-config
/ boot / config - $ (оболонка, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig

.Потім файл конфігурації скидається до syncconfig, який приймає файл .конфігураційний файл як вхідний. Він обробляє файл і виводить файли, які потім класифікуються на різні категорії, такі як:

Файли Kbuild

Майже всі файли ядра - це файли Kbuild Makefiles, які використовують інфраструктуру Kbuild, що є рекурсивною функцією створення. Рекурсивний Make - це спосіб використання інструмента Make як команди у файлі Make. Рекурсія дуже корисна при складанні великого проекту.

Kbuild працює, посилаючись на всі файли, про які ми згадали у вищевказаному розділі.

Система Kbuild створює свої компоненти, використовуючи верхній файл Makefile, що включає аркові файли MakeFile з ім'ям arch / $ (ARCH) / Makefile у файлах конфігурації. Він рекурсивно опускається в підкаталоги, що викликають Make на компонентах, використовуючи підпрограми у скриптах / Makefile.*. Потім Kbuild будує на сусідньому об’єкті та зв’язує їх у об’єкти, створюючи vmlinux.

Щоб дізнатися більше про синтаксис, який використовується у Kbuild Makefiles, зверніться до документації.

Розглянемо наступний сценарій.

https: // github.com / torvalds / linux / blob / master / scripts / link-vmlinux.ш

Файли об'єктів o, що використовуються для створення vmlinux, спочатку компілюються у відповідних вбудованих файлах .файли як var KBUILD_VMLINUX_INIT, MAIN, LIBS. Вони складаються у vmlinux.

https: // github.com / torvalds / linux / blob / master / scripts / Makefile.побудувати

Висновок

У цьому посібнику ми розглянули системи Kbuild і Kconfig в системі побудови ядра та їх роботу. Як ми вже згадували на початку підручника, обговорювані теми є широкими і не можуть бути висвітлені в одному підручнику.

Встановіть останню стратегічну гру OpenRA на Ubuntu Linux
OpenRA - це ігровий движок Libre / Free Real Time Strategy, який відтворює ранні ігри Вествуда, такі як класичний Command & Conquer: Red Alert. Пошире...
Встановіть найновіший емулятор Dolphin для Gamecube & Wii на Linux
Емулятор Dolphin дозволяє грати у вибрані вами ігри Gamecube та Wii на персональних комп’ютерах Linux (ПК). Будучи вільно доступним і відкритим ігров...
Як використовувати GameConqueror Cheat Engine в Linux
Стаття висвітлює посібник із використання механізму читів GameConqueror в Linux. Багато користувачів, які грають у ігри в Windows, часто використовуют...