Norėdami valdyti ir sumažinti šį sudėtingumą, programinės įrangos kūrėjai organizuoja kodą mažuose failuose, kurie susieja su konkrečiais moduliais. Kūrėjai gali sukompiliuoti kiekvieną iš šių failų atskirai ir susieti, kad būtų sukurtas galutinis programinės įrangos vykdomasis failas.
To pavyzdys yra C projektai, sudaryti iš šaltinio kodo failų .c plėtiniai ir programinės įrangos sąsajos .h pratęsimai. Kiekvienas šaltinio failas sudaromas kartu su antraštės failais, kuriuos norite sukurti. o objektai, susieti naudojant bibliotekas, taip sukuriant vykdomuosius failus.
Norėdami atlikti šį procesą, programinės įrangos kūrėjai naudoja tokius įrankius kaip „Make“, kad automatizuotų kūrimo procesą ir reikalingas failų priklausomybes. „Make“ naudoja „Makefiles“, kad valdytų kompiliavimo proceso elgesį.
„GNU Make“ įrankiai pateikia taisyklių ir konvencijų rinkinį, naudojamą kuriant „Makefiles“ ir sumažinant efektyvumo didinimo sudėtingumą.
Šioje pamokoje aptarsime būtent „Linux Kernel Makefiles“ Kconfig ir „Kbuild“.
Prieš pradedant, gerai pažymėti, kad šis straipsnis neapsimeta, kad moko visko apie branduolio sukūrimo sistemą. Tačiau mes pateikiame aukšto lygio „vmlinux“ vaizdo ir modulių kūrimo apžvalgą.
Jei norite informacijos, kuri nepatenka į šios mokymo programos taikymo sritį, rekomenduojame pateikti šį šaltinį, kad gautumėte geresnės informacijos:
https: // linkfy.to / goMakefilesDocs
https: // linkfy.į / gnuMake
Branduolio „Makefiles“: apžvalga
Branduolio sukūrimo sistema, dar vadinama konfigūravimo sistema, yra būtina priemonė tiems, kuriems jos reikia, kuri jau kurį laiką veikia. Tačiau ne visi naudosis šia sistema; net tvarkyklės ir kiti žemo lygio programinės įrangos kūrėjai ją retai naudoja. Tai skaitant reiškia, kad norite sužinoti daugiau apie branduolio kūrimo sistemą.
Taigi aptarsime, kaip kompiliuojamas branduolys, ir aptarsime „Kbuild“ ir „Kconfig“ sistemas, kad galėtumėte geriau juos suprasti.
Branduolio „Makefile“ yra penki pagrindiniai komponentai:
- „Makefile“: Tai yra pagrindinis failas, esantis šaltinio šaknyje.
- arch / $ (ARCH) Makefile: Tai yra „Makefile“ arka; jis veikia kaip papildomas „Makefile“.
- .konfigūracija: Tai yra branduolio konfigūracijos failas.
- Scenarijai / „Makefile“.*: Tai apibrėžia nustatytas taisykles visoms kbuild Makefiles.
- „Kbuild Makefiles“: Yra apie 500 „kbuild“ „Makefiles“, ir juos skaityti nėra labai lengva. Apsvarstykite tokį failą:
https: // eliksyras.bootlinas.com / linux / latest / source / scripts / Kbuild.įtraukti
Kconfig
Kconfig faile yra modulių, kurie padeda naudoti konfigūraciją make *. Tai padeda branduoliui atlikti pasirinktines konfigūracijas, sukuriant moduliškumą ir pritaikomumą branduolio kūrimo procesui.
Kconfig sistema nurodo įvairius konfigūracijos tikslus. Norėdami peržiūrėti galimus taikinius, galite naudoti „make help“. Šiuos tikslus apdoroja įvairios branduolio pateiktos programos kūrimo metu.
Kai kurie „Kconfig“ tikslai apima:
- Konfigūruoti: Tai naudojama norint atnaujinti branduolio konfigūracijos failą naudojant eilutės programą.
- „Menuconfig“: Tai yra „Kconfig“ funkcija arba mechanizmas, kuris suteikia meniu prieigą prie branduolio parinkčių. Norėdami paleisti „menuconfig“ ir kitas „Kconfig“ funkcijas, turėtumėte būti platformos projekto kataloge. Norėdami paleisti „Kconfig“ meniu funkciją, galite naudoti šiuos veiksmus. Tačiau taip pat galite paleisti „menuconfig“ su kitomis „GUI Linux“ branduolio konfigūravimo funkcijomis, tokiomis kaip xconfig ir gconfig. padaryti linux-windriver.menuconfig - vykdo menuconfig atskiroje terminalo sesijoje.
- „gconfig“ ir „xconfig“: „Gconfig“ suaktyvina GUI pagrįstas „Linux“ branduolio funkcijas. „Gconfig“ naudoja GTK arba (X pagrindu) pagrįstą vartotojo sąsają. Kita vertus, „Xconfig“ naudoja Qt pagrįstą vartotojo sąsają. Norėdami paleisti „gconfig“ ir „xconfig“, naudokite šias komandas:
padaryti linux-windriver.xconfig
PASTABA: Norėdami naudoti „gconfig“ ir „xconfig“, pagrindinėje sistemoje turite būti įdiegę QT kūrimo įrankius.
- Nconfig: „Nconfig“ funkcija vykdo dabartinę konfigūraciją („Buildtools“) ir taikoma „Ncurses“ meniu valdomai programai. Tai leidžia kurti paketus, tokius kaip procesorius, tvarkykles ir failų sistemą kuriant branduolį. Naudokite komandą: make nconfig.
- „Oldconfig“: „Oldconfig“ funkcija leidžia pritaikyti naujesnes .konfigūracijos failus į senesnius branduolio konfigūracijos failus. Pavyzdžiui, senas .konfigūracijos failą ir naujesnį .konfigūracijos failas (naujesnė branduolio versija) turės skirtumų, tai reiškia, kad prieš branduolio kūrimą turite atnaujinti dabartinę konfigūraciją. Galite naudoti „make oldconfig“ interaktyviai atnaujindami seną konfigūraciją, pritaikydami parinktis, kurių trūksta senajame konfigūracijos faile.
- Defconfig: Ši funkcija leidžia branduolio sukūrimo sistemai pridėti naują konfigūraciją, pateiktą defconfig .konfigūracijos failas. Tiksliau, „Kbuild“ sistema tikrina visus „Kconfig“ failus. Jei faile „defconfig“ nurodoma parinktis, Kbuild sistema naudoja nurodytą reikšmę, kad pridėtų parinktį prie .konfigūruoti. Jei defconfig nemini parinkties, Kbuild naudoja numatytąsias reikšmes .konfigūruoti.
Apsvarstykite šiuos dalykus:
Defconfig kodo momentinė kopija iš šio ištekliaus:
https: // eliksyras.bootlinas.„com“ / „Linux“ / v5.9 / source / scripts / kconfig / Makefile # L98
1. defconfig: $ (obj) / conf2. ifneq ($ (pakaitos simbolis $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Numatytoji konfigūracija grindžiama '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. Kitas
6. @ $ (kecho) "*** Numatytoji konfigūracija yra pagrįsta tikslu '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endifas
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (pakaitos simbolis $ (srctree) / branduolys / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.konfigūracija: $ (obj) / conf
16. $ (jei $ (call configfiles) ,, $ (klaida Šioje architektūroje nėra tikslinės konfigūracijos))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scenarijai / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig
„Oldconfig“ kodo nuotrauka iš šio šaltinio:
https: // eliksyras.bootlinas.„com“ / „Linux“ / v5.9 / source / scripts / kconfig / conf.c # L694
1. case olddefconfig:2. numatytas:
3. pertrauka;
4.
5.
6. jei (input_mode == savedefconfig)
7. jei (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** klaida išsaugant defconfig:% s \ n \ n",
9. defconfig_file);
10. grąžinti 1;
11.
12. else if (įvesties_režimas != listnewconfig && input_mode != helpnewconfig)
13. jei (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Klaida rašant konfigūraciją.\ n \ n ");
15. išėjimas (1);
16.
17.
18. / *
19. * Sukurti automatinį.konf, jei jo nėra.
20. * Tai apsaugo GNU „Make 4“.1 ar vyresni nuo spinduliavimo
21. * "įtraukti / config / auto.conf: Nėra tokio failo ar katalogo "
22. * aukščiausio lygio „Makefile“
23. *
24. * „syncconfig“ visada sukuria arba atnaujina automatinį.konf, nes yra
25. * naudojamas statant.
26. * /
27. jei (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Sinchronizuojant konfigūraciją įvyko klaida.\ n \ n ");
30. grąžinti 1;
31.
32.
33. grąžinti 0;
34.
- „Savedefconfig“: Ši taisyklė taupo srovę .konfigūruoti ./ defconfig, kuris laikomas minimaliu konfigūracijos failu. Naudokite komandą: make savedefconfig
- „Listnewconfig“: Tai naudojama norint išvardyti naujas parinktis.
- „Kvmconfig“: Tai įgalina KVM palaikymo parinktis. Naudokite komandą: make kvm_guest.konfigūruoti
- „Allyesconfig“: Tai sukuria naują branduolio konfigūracijos failą su visomis parinktimis „Taip“. Tai priešinga allnoconfig.
- „Allmodconfig“: Tai sukuria naują branduolio konfigūraciją, kurioje moduliai yra įjungti pagal numatytuosius nustatymus.
- „Randconfig“: Tai sukuria naują branduolio konfigūracijos failą su atsitiktiniais atsakymais į visas parinktis.
- „Tinyconfig“: Tai daro mažiausią įmanomą branduolį.
Kconfig sistemoje yra daug taikinių. Kai kurie iš jų yra „config“ ir „menuconfig“.
Kaip minėta, taikinius apdoroja įvairios pagrindinės sistemos programos, pateikdamos GUI arba komandinę eilutę. „Kconfig“ įrankius rasite branduolio šaltinyje aplanke / scripts / Kconfig.
https: // eliksyras.bootlinas.com / linux / latest / source / scripts / kconfig
https: // eliksyras.bootlinas.com / linux / latest / source / scripts / kconfig / Makefile
Pirmasis procesas paprastai yra nuskaityti Kconfig failą šakniniame kataloge, kuris naudojamas kuriant pradinę konfigūracijos duomenų bazę. Kai procesas tęsiasi, duomenų bazė atnaujinama, kai skaitomi failai tokia tvarka:
.konfigūruoti/ lib / moduliai / $ (apvalkalas, uname-r) /.konfigūruoti
/ etc / kernel-config
/ boot / config - $ (apvalkalas, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig
.konfigūracijos failas yra nuleistas į syncconfig, kuris priima .konfigūracijos failas kaip įvestis. Jis apdoroja failą ir išleidžia failus, kurie tada skirstomi į įvairias kategorijas, tokias kaip:
- autokonf.h: Tai naudojama C kalbos šaltinio failams.
- automatinis.konfiskuoti ir tristate.konf .: Jie naudojami „Makefile“ teksto apdorojimui.
- / apima / config: Tai tušti antraštės failai, naudojami stebint priklausomybę.
„Kbuild“ bylos
Beveik visi branduolio failai yra „Kbuild Makefiles“, kurie naudoja „Kbuild“ infrastruktūrą, kuri yra rekursinė „make“ funkcija. Rekursinis „Make“ yra būdas naudoti įrankį „Make“ kaip komandą „Makefile“. Rekursija yra labai naudinga sudarant didelį projektą.
„Kbuild“ veikia remdamasi visais failais, kuriuos minėjome ankstesniame skyriuje.
„Kbuild“ sistema sukuria komponentus naudodama viršutinį „Makefile“ failą, kuriame konfigūracijos failuose yra archyvas Makefiles su pavadinimu arch / $ (ARCH) / Makefile. Rekursyviai nusileidžia į pakatalogius, iškviečiant komponentų „Make“, naudojant scenarijus / „Makefile“.*. Tada „Kbuild“ remiasi gretimu objektu ir susieja juos su objektais, sukurdamas „vmlinux“.
Norėdami sužinoti daugiau apie „Kbuild Makefiles“ naudojamą sintaksę, žiūrėkite dokumentaciją.
Apsvarstykite šį scenarijų.
https: // github.com / torvalds / linux / blob / master / scripts / link-vmlinux.sh
„O“ objekto failai, naudojami kuriant „vmlinux“, pirmiausia yra kompiliuojami jų atitinkamose įmontuotose .failus kaip var KBUILD_VMLINUX_INIT, MAIN, LIBS. Jie komponuojami vmlinux.
https: // github.com / torvalds / linux / blob / master / scripts / Makefile.statyti
Išvada
Šiame vadove apžvelgėme „Kbuild“ ir „Kconfig“ sistemas branduolio komponavimo sistemoje ir kaip ji veikia. Kaip minėjome pamokos pradžioje, aptariamos temos yra plačios ir jų negalima aptarti vienoje pamokoje.