„Linux“ branduolys

Paaiškinta „Linux“ branduolio „Makefile“

Paaiškinta „Linux“ branduolio „Makefile“
Kuriant programinę įrangą, didelių kodų saugyklų kūrimo ir valdymo procesas gali lengvai tapti labai sudėtingas.

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:

  1. „Makefile“: Tai yra pagrindinis failas, esantis šaltinio šaknyje.
  2. arch / $ (ARCH) Makefile: Tai yra „Makefile“ arka; jis veikia kaip papildomas „Makefile“.
  3. .konfigūracija: Tai yra branduolio konfigūracijos failas.
  4. Scenarijai / „Makefile“.*: Tai apibrėžia nustatytas taisykles visoms kbuild Makefiles.
  5. „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:

padaryti linux-windriver.gconfig
padaryti linux-windriver.xconfig

PASTABA: Norėdami naudoti „gconfig“ ir „xconfig“, pagrindinėje sistemoje turite būti įdiegę QT kūrimo įrankius.

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

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:

„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.

„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...
Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...