Да би управљали и смањили ову сложеност, програмери софтвера организују код у мале датотеке које воде до одређених модула. Програмери могу сваку од ових датотека компајлирати одвојено, а затим их повезати како би створили коначну извршну датотеку софтвера.
Пример за то су Ц пројекти који се састоје од датотека изворног кода у .ц проширења и софтверски интерфејси у .х продужеци. Свака изворна датотека се компајлира заједно са датотекама заглавља за стварање. о објекти повезани заједно помоћу библиотека, стварајући тако извршне датотеке.
Да би извели овај процес, програмери софтвера користе алате, као што је Маке, за аутоматизацију процеса израде и потребних зависности датотека. Маке користи Макефилес за управљање понашањем процеса компајлирања.
Алати ГНУ Маке пружају скуп правила и конвенција коришћених за креирање Макефиле-а и смањење сложености у побољшању ефикасности.
У овом упутству ћемо посебно разговарати о Линук Кернел Макефиле-овима Кцонфиг и Кбуилд.
Пре него што започнемо, добро је напоменути да овај чланак не претендује да подучава све о систему Кернел Буилд. Међутим, пружамо преглед на високом нивоу о изградњи вмлинук слике и модула.
Ако желите информације изван опсега овог водича, препоручујемо следећи ресурс за боље информације:
хттпс: // линкфи.на / гоМакефилесДоцс
хттпс: // линкфи.у / гнуМаке
Датотеке кернела: преглед
Кернел Буилд Систем, који се назива и систем за конфигурисање, основни је алат - за оне којима је потребан - који постоји већ неко време. Међутим, неће сви користити овај систем; чак га и управљачки програми и други програмери ниског нивоа ретко користе. Будући да ово читате, значи да желите да сазнате више о систему градње језгра.
Стога ћемо разговарати о томе како се кернел компајлира и разговарати о систему Кбуилд и Кцонфиг како бисте их могли боље разумети.
Кернел Макефиле има пет основних компоненти:
- Макефиле: Ово је горња датотека израде која се налази у изворном корену.
- арцх / $ (АРЦХ) Макефиле: Ово је лук Макефиле; делује као додатак врхунском Макефиле-у.
- .цонфиг: Ово је датотека конфигурације језгра.
- Скрипте / Макефиле.*: Ово дефинише постављена правила за све кбуилд маке датотеке.
- Кбуилд Макефилес: Постоји око 500 кбуилд Макефиле-а, и није их лако прочитати. Размотрите датотеку као што је:
хттпс: // еликсир.боотлин.цом / линук / најновије / извор / скрипте / Кбуилд.укључују
Кцонфиг
Датотека Кцонфиг садржи модуле који помажу приликом коришћења маке * цонфиг. Помаже кернелу да направи селективне конфигурације, стварајући модуларност и прилагодљивост за процес изградње кернела.
Постоје различити циљеви конфигурације назначени системом Кцонфиг. Помоћу маке маке можете погледати доступне циљеве. Те циљеве обрађују различити програми које језгра пружа током процеса израде.
Неки од Кцонфиг циљева укључују:
- Цонфиг: Ово се користи за ажурирање датотеке конфигурације језгра помоћу линијског програма.
- Менуцонфиг: Ово је Кцонфиг функција или механизам који нуди приступ Кернел опцијама на основу менија. Да бисте покренули менуцонфиг и друге Кцонфиг функције, требали бисте бити у директоријуму пројекта платформе. Можете да употребите следеће да бисте покренули функцију Кцонфиг менуцонфиг. Међутим, можете такође да покренете менуцонфиг са другим функцијама за конфигурацију Линук кернела ГУИ-а, као што су кцонфиг и гцонфиг. направите линук-виндривер.менуцонфиг - извршава менуцонфиг у одвојеној терминалској сесији.
- гцонфиг и кцонфиг: Гцонфиг активира функције језгра засноване на ГУИ-у. Гцонфиг користи ГТК или (базиран на Кс) УИ. С друге стране, Ксцонфиг користи кориснички интерфејс заснован на Кт. Користите следеће наредбе за покретање гцонфиг, односно кцонфиг:
направите линук-виндривер.кцонфиг
БЕЛЕШКА: Да бисте користили гцонфиг и кцонфиг, требали бисте имати инсталиране КТ развојне алате на хост систему.
- Нцонфиг: Нцонфиг функција покреће тренутну конфигурацију (Буилдтоолс) и примењује се на програм вођен менијем Нцурсес. Ово вам омогућава да одаберете пакете за изградњу, као што су ЦПУ, управљачки програми и систем датотека приликом изградње кернела. Користите наредбу: маке нцонфиг.
- Олдцонфиг: Функција олдцонфиг вам омогућава да примените новије .цонфиг датотеке у старије датотеке конфигурације кернела. На пример, стара .датотеку за конфигурацију и новију .цонфиг датотека (новија верзија кернела) ће имати разлике, што значи да морате ажурирати тренутну конфигурацију пре изградње кернела. Помоћу маке олдцонфиг можете интерактивно ажурирати стару конфигурацију применом опција које недостају у старој конфигурационој датотеци.
- Дефцонфиг: Ова функција омогућава систему градње језгра да дода нову конфигурацију коју пружа дефцонфиг у .цонфиг датотеку. Тачније, систем Кбуилд проверава све Кцонфиг датотеке. Ако дефцонфиг наведе опцију у датотеци, систем Кбуилд користи наведену вредност за додавање опције у .цонфиг. Ако дефцонфиг не помиње опцију, Кбуилд користи подразумеване вредности у .цонфиг.
Узмите у обзир следеће:
Снимак кода Дефцонфиг из следећег ресурса:
хттпс: // еликсир.боотлин.цом / линук / в5.9 / соурце / сцриптс / кцонфиг / Макефиле # Л98
1. дефцонфиг: $ (обј) / цонф2. ифнек ($ (вилдцард $ (срцтрее) / арцх / $ (СРЦАРЦХ) / цонфигс / $ (КБУИЛД_ДЕФЦОНФИГ)),)
3. @ $ (кецхо) "*** Подразумевана конфигурација се заснива на '$ (КБУИЛД_ДЕФЦОНФИГ)'"
4. $ (К) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. иначе
6. @ $ (кецхо) "*** Подразумевана конфигурација заснива се на циљу '$ (КБУИЛД_ДЕФЦОНФИГ)'"
7. $ (К) $ (МАКЕ) -ф $ (срцтрее) / Макефиле $ (КБУИЛД_ДЕФЦОНФИГ)
8. ендиф
9.
10. % _дефцонфиг: $ (обј) / цонф
11. $ (К) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. цонфигфилес = $ (вилдцард $ (срцтрее) / кернел / цонфигс / $ @ $ (срцтрее) / арцх / $ (СРЦАРЦХ) / цонфигс / $ @)
14.
15. %.конфигурација: $ (обј) / цонф
16. $ (иф $ (цалл цонфигфилес) ,, $ (грешка Не постоји конфигурација за овај циљ на овој архитектури))
17. $ (К) $ (ЦОНФИГ_СХЕЛЛ) $ (срцтрее) / скрипте / кцонфиг / мерге_цонфиг.сх-м .цонфиг $ (цонфигфилес)
18. $ (К) $ (МАКЕ) -ф $ (срцтрее) / Макефиле олддефцонфиг
Снимак кода Олдцонфиг из следећег ресурса:
хттпс: // еликсир.боотлин.цом / линук / в5.9 / соурце / сцриптс / кцонфиг / цонф.ц # Л694
1. цасе олддефцонфиг:2. Уобичајено:
3. пауза;
4.
5.
6. иф (инпут_моде == саведефцонфиг)
7. иф (цонф_врите_дефцонфиг (дефцонфиг_филе))
8. фпринтф (стдерр, "н *** Грешка при чувању дефцонфиг-а на:% с \ н \ н",
9. дефцонфиг_филе);
10. ретурн 1;
11.
12. елсе иф (инпут_моде != листневцонфиг && инпут_моде != хелпневцонфиг)
13. ако (!но_цонф_врите && цонф_врите (НУЛЛ))
14. фпринтф (стдерр, "\ н *** Грешка током писања конфигурације.\ н \ н ");
15. излаз (1);
16.
17.
18. / *
19. * Направите ауто.цонф ако не постоји.
20. * Ово спречава ГНУ Маке 4.1 или старији од емитовања
21. * "укључи / конфигурисање / аутоматски.цонф: Нема такве датотеке или директоријума "
22. * у Макефиле-у највишег нивоа
23. *
24. * синццонфиг увек креира или ажурира аутоматски.цонф јер је
25. * користи се током израде.
26. * /
27. иф (цонф_врите_аутоцонф (синц_кцонфиг) && синц_кцонфиг)
28. фпринтф (стдерр,
29. "\ н *** Грешка током синхронизације конфигурације.\ н \ н ");
30. ретурн 1;
31.
32.
33. ретурн 0;
34.
- Саведефцонфиг: Ово правило штеди струју .конфигурација у облику ./ дефцонфиг, која се сматра минималном конфигурационом датотеком. Користите наредбу: маке саведефцонфиг
- Листневцонфиг: Ово се користи за навођење нових опција.
- Квмцонфиг: Ово омогућава опције за КВМ подршку. Користите наредбу: маке квм_гуест.цонфиг
- Аллиесцонфиг: Ово гради нову датотеку конфигурације језгра са свим опцијама постављеним на да. Супротно је од аллноцонфиг.
- Аллмодцонфиг: Ово гради нову конфигурацију језгра са којом су модули подразумевано омогућени.
- Рандцонфиг: Ово гради нову датотеку конфигурације језгра са случајним одговорима на све опције.
- Тиницонфиг: Ово чини најситније могуће језгро.
У систему Кцонфиг има пуно циљева. Неки од уобичајених укључују цонфиг и менуцонфиг.
Као што је поменуто, циљеве обрађују различити програми у системима домаћина, било да пружају ГУИ или командну линију. Кцонфиг алате можете пронаћи у / сцриптс / Кцонфиг у извору језгра.
хттпс: // еликсир.боотлин.цом / линук / најновије / извор / скрипте / кцонфиг
хттпс: // еликсир.боотлин.цом / линук / најновије / извор / скрипте / кцонфиг / Макефиле
Први поступак је обично читање датотеке Кцонфиг у основном директоријуму, која се користи за изградњу почетне конфигурационе базе података. Како се процес наставља, база података се ажурира приликом читања датотека следећим редоследом:
.цонфиг/ либ / модулес / $ (љуска, унаме-р) /.цонфиг
/ етц / кернел-цонфиг
/ боот / цонфиг - $ (љуска, унаме-р)
АРЦХ_ДЕФЦОНФИГ
арцх / $ (АРЦХ) / дефцонфиг
.Датотека цонфиг се затим спушта на синццонфиг, која прихвата .конфигурациона датотека као улаз. Обрађује датотеку и избацује датотеке које се затим класификују у различите категорије као што су:
- аутоцонф.х: Ово се користи за изворне датотеке на језику Ц.
- ауто.цонф и тристате.цонф: Они се користе за обраду текста Макефиле.
- / укључује / конфигурацију: То су празне датотеке заглавља које се користе за праћење зависности.
Кбуилд Филес
Готово све кернел датотеке су Кбуилд Макефилес који користе Кбуилд инфраструктуру, што је рекурзивна карактеристика израде. Рекурзивно стварање је начин коришћења алата Маке као наредбе у датотеци Маке. Рекурзија је веома корисна при састављању великог пројекта.
Кбуилд ради тако што се позива на све датотеке које смо поменули у горњем одељку.
Кбуилд систем гради своје компоненте користећи горњу датотеку Макефиле која укључује арх датотеке Макефиле са именом арцх / $ (АРЦХ) / Макефиле у датотекама конфигурације. Рекурзивно се спушта у поддиректоријуме који позивају Маке на компонентама користећи рутине у скриптама / Макефиле.*. Кбуилд се затим надовезује на суседни објекат и повезује их у објекте, стварајући вмлинук.
Да бисте сазнали више о синтакси која се користи у Кбуилд Макефилес, погледајте документацију.
Размотрите следећу скрипту.
хттпс: // гитхуб.цом / торвалдс / линук / блоб / мастер / сцриптс / линк-вмлинук.сх
О објектне датотеке које се користе за креирање вмлинук-а се прво компајлирају у одговарајуће уграђене датотеке .датотеке као вар КБУИЛД_ВМЛИНУКС_ИНИТ, МАИН, ЛИБС. Они су састављени у вмлинук-у.
хттпс: // гитхуб.цом / торвалдс / линук / блоб / мастер / сцриптс / Макефиле.градити
Закључак
У овом водичу смо погледали Кбуилд и Кцонфиг системе у систему градње језгра и како то функционише. Као што смо споменули на почетку уџбеника, теме о којима се расправља су широке и не могу се покрити ни у једном уџбенику.