Na správu a zníženie tejto zložitosti organizujú vývojári softvéru kód do malých súborov, ktoré odkazujú na konkrétne moduly. Vývojári môžu každý z týchto súborov zostaviť samostatne a potom ich navzájom prepojiť a vytvoriť tak konečný spustiteľný softvér.
Príkladom toho sú projekty C tvorené súbormi zdrojových kódov v systéme Windows .c rozšírenia a softvérové rozhrania v systéme Windows .h rozšírenia. Každý zdrojový súbor sa skompiluje spolu s hlavičkovými súbormi, ktoré sa majú vytvoriť. o objekty spojené pomocou knižníc, čím sa vytvárajú spustiteľné súbory.
Na vykonanie tohto procesu používajú vývojári softvéru nástroje, ako napríklad Make, na automatizáciu procesu vytvárania a požadovaných závislostí súborov. Make používa súbory Makefiles na správu správania procesu kompilácie.
Nástroje GNU Make poskytujú súbor pravidiel a konvencií používaných na vytváranie Makefiles a znižujú zložitosť pri zvyšovaní efektívnosti.
V tomto tutoriáli sa budeme konkrétne venovať Linuxovým súborom jadra Kconfig a Kbuild.
Skôr ako začneme, je dobré si uvedomiť, že tento článok nepredstiera, že učí všetko o systéme Kernel Build. Poskytujeme však prehľad na vysokej úrovni o zostavovaní obrazu a modulov vmlinux.
Ak chcete informácie presahujúce rámec tohto tutoriálu, odporúčame vám použiť nasledujúci zdroj informácií:
https: // linkfy.to / goMakefilesDocs
https: // linkfy.do / gnuMake
Makefiles jadra: prehľad
Systém vytvárania jadra, nazývaný tiež konfiguračný systém, je základným nástrojom pre tých, ktorí ho potrebujú, ktorý existuje už nejaký čas. Nie všetci však budú používať tento systém; zriedka ho používajú dokonca ani vodiči a ďalší vývojári softvéru na nízkej úrovni. Keď to čítate, znamená to, že sa chcete dozvedieť viac o systéme vytvárania jadra.
Preto si povieme, ako sa kompiluje jadro, a prediskutujeme systémy Kbuild a Kconfig, aby ste im lepšie porozumeli.
Kernel Makefile má päť základných komponentov:
- Makefile: Toto je súbor najvyššej značky umiestnený v koreňovom adresári zdroja.
- arch / $ (ARCH) Makefile: Toto je oblúk Makefile; funguje ako doplnok k najvyššiemu súboru Makefile.
- .konfigurácia: Toto je konfiguračný súbor jadra.
- Skripty / Makefile.*: Toto definuje nastavené pravidlá pre všetky Makebuildy kbuild.
- Kbuild Makefiles: Existuje asi 500 vytvorených súborov Makefile a nie je ľahké ich prečítať. Zvážte súbor, napríklad:
https: // elixír.bootlin.com / linux / latest / source / scripts / Kbuild.zahrnúť
Kconfig
Súbor Kconfig obsahuje moduly, ktoré pomáhajú pri použití konfigurácie make *. Pomáha jadru pri selektívnych konfiguráciách a vytvára tak modularitu a prispôsobiteľnosť procesu vytvárania jadra.
Systém Kconfig určuje rôzne konfiguračné ciele. Môžete použiť pomocníka make na zobrazenie dostupných cieľov. Tieto ciele sú spracovávané rôznymi programami poskytnutými jadrom počas procesu zostavovania.
Niektoré z cieľov Kconfig zahŕňajú:
- Konfigurácia: Používa sa na aktualizáciu konfiguračného súboru jadra pomocou linkového programu.
- Konfigurácia ponuky: Toto je funkcia alebo mechanizmus Kconfig, ktorý ponúka prístup k možnostiam jadra v ponuke. Ak chcete spustiť menuconfig a ďalšie funkcie Kconfig, mali by ste sa nachádzať v adresári projektu platformy. Na spustenie funkcie Kconfig menuconfig môžete použiť nasledujúce. Môžete však tiež spustiť menuconfig s ďalšími funkciami konfigurácie jadra systému Linux s Linuxom, ako sú xconfig a gconfig. urob linux-windriver.menuconfig - Vykoná menuconfig v samostatnej relácii terminálu.
- gconfig a xconfig: Gconfig aktivuje funkcie linuxového jadra založené na GUI. Gconfig využíva používateľské rozhranie založené na GTK alebo (na základe X). Na druhej strane Xconfig využíva UI založené na Qt. Na spustenie príkazov gconfig a xconfig použite nasledujúce príkazy:
urob linux-windriver.xconfig
POZNÁMKA: Ak chcete používať gconfig a xconfig, mali by ste mať v hostiteľskom systéme nainštalované vývojové nástroje QT.
- Nconfig: Funkcia Nconfig spúšťa aktuálnu konfiguráciu (Buildtools) a platí pre program poháňaný ponukami Ncurses. Toto vám umožní vybrať balíčky, ktoré sa majú zostaviť, napríklad CPU, ovládače a súborový systém pri vytváraní jadra. Použite príkaz: make nconfig.
- Oldconfig: Funkcia oldconfig umožňuje použiť novšie .konfiguračné súbory na staršie konfiguračné súbory jadra. Napríklad starý .konfiguračný súbor a novší .konfiguračný súbor (novšia verzia jadra) bude mať rozdiely, čo znamená, že pred zostavením jadra musíte aktualizovať aktuálnu konfiguráciu. Môžete použiť make oldconfig na interaktívnu aktualizáciu starej konfigurácie použitím možností, ktoré chýbajú v starom konfiguračnom súbore.
- Defconfig: Táto vlastnosť umožňuje systému jadra pridať novú konfiguráciu dodanú pomocou defconfig do .konfiguračný súbor. Presnejšie povedané, systém Kbuild kontroluje všetky súbory Kconfig. Ak defconfig určuje voľbu v súbore, systém Kbuild použije zadanú hodnotu na pridanie možnosti do .konfigur. Ak defconfig nezmieňuje túto možnosť, použije Kbuild predvolené hodnoty v .konfigur.
Zvážte nasledovné:
Snímka kódu defconfig z nasledujúceho zdroja:
https: // elixír.bootlin.com / linux / v5.9 / zdroj / skripty / kconfig / Makefile # L98
1. defconfig: $ (obj) / konf2. ifneq ($ (zástupný znak $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Predvolená konfigurácia je založená na '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. inak
6. @ $ (kecho) "*** Predvolená konfigurácia je založená na cieli '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (VYROBIŤ) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. koniec Ak
9.
10. % _defconfig: $ (obj) / konf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (zástupný znak $ (srctree) / jadro / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / konf
16. $ (if $ (call configfiles) ,, $ (chyba Pre tento cieľ neexistuje v tejto architektúre žiadna konfigurácia)))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skripty / kconfig / merge_config.š-m .config $ (konfiguračné súbory)
18. $ (Q) $ (VYROBIŤ) -f $ (srctree) / Makefile olddefconfig
Snímka kódu Oldconfig z nasledujúceho zdroja:
https: // elixír.bootlin.com / linux / v5.9 / zdroj / skripty / kconfig / konf.c # L694
1. case olddefconfig:2. predvolené:
3. prestávka;
4.
5.
6. if (input_mode == savedefconfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Chyba pri ukladaní defconfig na:% s \ n \ n",
9. defconfig_file);
10. návrat 1;
11.
12. else if (input_mode != listnewconfig && input_mode != helpnewconfig)
13. ak (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Chyba pri zápise konfigurácie.\ n \ n ");
15. výstup (1);
16.
17.
18. / *
19. * Vytvoriť auto.conf ak neexistuje.
20. * Toto zabráni GNU Make 4.1 alebo starší z emitujúcich
21. * "include / config / auto.conf: Žiadny takýto súbor alebo adresár "
22. * v súbore Makefile najvyššej úrovne
23. *
24. * syncconfig vždy automaticky vytvára alebo aktualizuje.conf, pretože to je
25. * použité počas zostavovania.
26. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Chyba počas synchronizácie konfigurácie.\ n \ n ");
30. návrat 1;
31.
32.
33. návrat 0;
34.
- Savedefconfig: Toto pravidlo uloží prúd .konfigurácia vo forme ./ defconfig, ktorý sa považuje za minimálny konfiguračný súbor. Použite príkaz: make savedefconfig
- Listnewconfig: Používa sa na zoznam nových možností.
- Kvmconfig: Toto umožňuje možnosti podpory KVM. Použite príkaz: make kvm_guest.konfigur
- Allyesconfig: Týmto sa vytvorí nový konfiguračný súbor jadra so všetkými možnosťami nastavenými na áno. Je to opakom allnoconfig.
- Allmodconfig: Týmto sa vytvára nová konfigurácia jadra, pomocou ktorej sú moduly predvolene povolené.
- Randconfig: Takto sa vytvorí nový konfiguračný súbor jadra s náhodnými odpoveďami na všetky možnosti.
- Tinyconfig: Toto umožňuje čo najmenšie jadro.
V systéme Kconfig je veľa cieľov. Medzi bežné patria config a menuconfig.
Ako už bolo spomenuté, ciele sú spracovávané rôznymi programami v hostiteľských systémoch, ktoré poskytujú buď GUI alebo príkazový riadok. Nástroje Kconfig nájdete v / scripts / Kconfig v zdroji jadra.
https: // elixír.bootlin.com / linux / latest / source / scripts / kconfig
https: // elixír.bootlin.com / linux / latest / source / scripts / kconfig / Makefile
Prvým procesom je zvyčajne čítanie súboru Kconfig v koreňovom adresári, ktorý sa používa na vytvorenie počiatočnej konfiguračnej databázy. Ako proces pokračuje, databáza sa aktualizuje pri čítaní súborov v nasledujúcom poradí:
.konfigur/ lib / modules / $ (shell, uname-r) /.konfigur
/ etc / kernel-config
/ boot / config - $ (shell, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig
.konfiguračný súbor je potom spustený do syncconfig, ktorý akceptuje .konfiguračný súbor ako vstup. Spracováva súbory a výstupné súbory, ktoré sa potom klasifikujú do rôznych kategórií, ako napríklad:
- autokonf.h: Používa sa pre zdrojové súbory v jazyku C.
- auto.conf a tristate.conf: Používajú sa na spracovanie textu Makefile.
- / includes / config: Toto sú prázdne hlavičkové súbory používané pri sledovaní závislostí.
Kbuild Files
Takmer všetky súbory jadra sú súbory Kbuild Makefiles, ktoré využívajú infraštruktúru Kbuild, čo je funkcia rekurzívneho vytvárania. Rekurzívna značka Make je spôsob použitia nástroja Make ako príkazu v súbore Makefile. Rekurzia je veľmi užitočná pri zostavovaní veľkého projektu.
Kbuild funguje odkazom na všetky súbory, ktoré sme spomenuli v predchádzajúcej časti.
Systém Kbuild zostavuje svoje komponenty pomocou špičkového súboru Makefile, ktorý obsahuje konfiguračné súbory archu s názvom arch / $ (ARCH) / Makefile. Rekurzívne klesá do podadresárov vyvolávajúcich Make na komponentoch pomocou rutín v skriptoch / Makefile.*. Kbuild potom nadväzuje na susedný objekt a spája ich do objektov, čím vytvára vmlinux.
Ak sa chcete dozvedieť viac o syntaxi použitej v Kbuild Makefiles, pozrite si dokumentáciu.
Zvážte nasledujúci skript.
https: // github.com / torvalds / linux / blob / master / scripts / link-vmlinux.š
Súbory objektov o, ktoré sa používajú na vytvorenie vmlinuxu, sa kompilujú najskôr v príslušnom vstavanom formáte .súbory ako var KBUILD_VMLINUX_INIT, MAIN, LIBS. Skladajú sa z vmlinuxu.
https: // github.com / torvalds / linux / blob / master / skripty / Makefile.stavať
Záver
V tejto príručke sme sa pozreli na systémy Kbuild a Kconfig v systéme zostavenia jadra a na jeho fungovanie. Ako sme už spomenuli na začiatku tutoriálu, diskutované témy sú široké a nemôžu byť obsiahnuté v jednom tutoriále.