Linuxové jadro

Vysvetlenie Makefile jadra Linuxu

Vysvetlenie Makefile jadra Linuxu
Pri vývoji softvéru sa proces vytvárania a správy veľkých úložísk kódov môže ľahko stať veľmi zložitým.

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:

  1. Makefile: Toto je súbor najvyššej značky umiestnený v koreňovom adresári zdroja.
  2. arch / $ (ARCH) Makefile: Toto je oblúk Makefile; funguje ako doplnok k najvyššiemu súboru Makefile.
  3. .konfigurácia: Toto je konfiguračný súbor jadra.
  4. Skripty / Makefile.*: Toto definuje nastavené pravidlá pre všetky Makebuildy kbuild.
  5. 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ú:

urob linux-windriver.gconfig
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.

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) / konf
2. 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.

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:

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.

Top 5 ergonomických produktov pre počítačové myši pre Linux
Spôsobuje dlhodobé používanie počítača bolesť zápästia alebo prstov? Trpíte stuhnutými kĺbmi a neustále si musíte podávať ruky? Cítite pálivú bolesť z...
Ako zmeniť nastavenie myši a touchpadu pomocou systému Xinput v systéme Linux
Väčšina distribúcií systému Linux sa štandardne dodáva s knižnicou „libinput“ na spracovanie vstupných udalostí v systéme. Dokáže spracovať vstupné ud...
S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...