Linux ядро

Обяснение на файла за създаване на ядро ​​на Linux

Обяснение на файла за създаване на ядро ​​на Linux
При разработването на софтуер процесът на създаване и управление на големи хранилища на кодове може да стане много сложен лесно.

За да управляват и намаляват тази сложност, разработчиците на софтуер организират код в малки файлове, които се свързват към определени модули. Разработчиците могат да компилират всеки от тези файлове поотделно и след това да ги свържат заедно, за да създадат окончателен изпълним софтуер.

Пример за това са C проекти, съставени от файлове с изходен код в .c разширения и софтуерни интерфейси в .h разширения. Всеки изходен файл се компилира заедно със заглавните файлове за създаване. o обекти, свързани заедно чрез библиотеки, като по този начин създават изпълними файлове.

За да изпълнят този процес, разработчиците на софтуер използват инструменти като Make, за да автоматизират процеса на изграждане и необходимите файлови зависимости. Make използва Makefiles за управление на поведението на процеса на компилация.

Инструментите GNU Make предоставят набор от правила и конвенции, използвани за създаване на Makefile и намаляване на сложността при подобряване на ефективността.

В този урок ще обсъдим конкретно Linux Kernel Makefiles Kconfig и Kbuild.

Преди да започнем, добре е да отбележим, че тази статия не претендира да преподава всичко за системата за изграждане на ядрото. Ние обаче предоставяме общ преглед на високо ниво за изграждане на vmlinux образ и модули.

Ако искате информация извън обхвата на този урок, препоръчваме следния ресурс за по-добра информация:

https: // linkfy.към / goMakefilesDocs

https: // linkfy.към / gnuMake

Профили на ядрото: Общ преглед

Системата за изграждане на ядро, наричана още конфигурационна система, е основен инструмент - за тези, които се нуждаят - който съществува от известно време. Не всеки обаче ще използва тази система; дори драйверите и други разработчици на софтуер от ниско ниво рядко го използват. Тъй като четете това, това означава, че искате да научите повече за системата за изграждане на ядрото.

По този начин ще обсъдим как се компилира ядрото и ще обсъдим системата Kbuild и Kconfig, за да можете да ги разберете по-добре.

Kernel Makefile има пет основни компонента:

  1. Makefile: Това е най-добрият файл за създаване, намиращ се в изходния корен.
  2. arch / $ (ARCH) Makefile: Това е арката Makefile; той действа като допълнение към най-добрия Makefile.
  3. .конфиг: Това е конфигурационният файл на ядрото.
  4. Скриптове / Makefile.*: Това дефинира зададени правила за всички kbuild Makefiles.
  5. Kbuild Makefiles: Има около 500 kbuild Makefiles и те не са много лесни за четене. Помислете за файл като:

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

Kconfig

Файлът Kconfig съдържа модули, които помагат при използване на конфигурацията make *. Той помага на ядрото да прави селективни конфигурации, създавайки модулност и адаптивност за процеса на изграждане на ядрото.

Има различни конфигурационни цели, посочени от системата Kconfig. Можете да използвате помощната помощ за преглед на наличните цели. Тези цели се обработват от различни програми, предоставени от ядрото по време на процеса на изграждане.

Някои от целите на 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) / kernel / 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. ако (input_mode == savedefconfig)
7. ако (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Грешка при запазване на defconfig в:% s \ n \ n",
9. defconfig_file);
10. връщане 1;
11.
12. else if (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.

Както бе споменато, целите се обработват от различни програми в хост системите, като предоставят GUI или команден ред. Можете да намерите инструментите на Kconfig в / scripts / Kconfig в източника на ядрото.

https: // еликсир.обувка.com / linux / latest / source / scripts / kconfig

https: // еликсир.обувка.com / linux / latest / source / scripts / kconfig / Makefile

Първият процес обикновено е да се прочете файлът Kconfig в основната директория, който се използва за изграждане на първоначална база данни за конфигуриране. Тъй като процесът продължава, базата данни се актуализира при четене на файлове в следния ред:

.конфиг
/ lib / модули / $ (черупка, uname-r) /.конфиг
/ etc / kernel-config
/ boot / config - $ (черупка, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig

.След това конфигурационният файл се изпуска в syncconfig, който приема .конфигурационен файл като вход. Той обработва файла и извежда файлове, които след това се класифицират в различни категории като:

Kbuild файлове

Почти всички файлове на ядрото са Kbuild Makefiles, които използват инфраструктурата на Kbuild, което е рекурсивна функция за създаване. Recursive Make е начин за използване на инструмента Make като команда в Makefile. Рекурсията е много полезна при съставяне на голям проект.

Kbuild работи, като се позовава на всички файлове, които споменахме в горния раздел.

Системата Kbuild изгражда своите компоненти, използвайки най-добрия Makefile, който включва сводните Makefiles с името arch / $ (ARCH) / Makefile в конфигурационните файлове. Той рекурсивно се спуска в поддиректории, извикващи Make на компонентите, използвайки рутините в скриптове / Makefile.*. След това Kbuild надгражда съседния обект и ги свързва в обекти, създавайки vmlinux.

За да научите повече за синтаксиса, използван в Kbuild Makefiles, вижте документацията.

Обмислете следния скрипт.

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

Файловете o o, използвани за създаване на vmlinux, се компилират първо в съответните им вградени .файлове като var KBUILD_VMLINUX_INIT, MAIN, LIBS. Те са съставени във vmlinux.

https: // github.com / torvalds / linux / blob / master / scripts / Makefile.изграждане

Заключение

В това ръководство разгледахме системите Kbuild и Kconfig в системата за изграждане на ядро ​​и как работи. Както споменахме в началото на урока, обсъжданите теми са широки и не могат да бъдат обхванати в един урок.

Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...
Топ Oculus App Lab Games
Ако сте собственик на слушалки на Oculus, тогава трябва да знаете за странично зареждане. Sideloading е процесът на инсталиране на несъхранявано съдър...
Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...