Jedro Linuxa

Pojasnjena datoteka za izdelavo jedra Linuxa

Pojasnjena datoteka za izdelavo jedra Linuxa
Pri razvoju programske opreme lahko postopek ustvarjanja in upravljanja velikih skladišč kode postane zelo zapleten.

Za upravljanje in zmanjšanje te zapletenosti razvijalci programske opreme organizirajo kodo v majhne datoteke, ki se povezujejo na določene module. Razvijalci lahko vsako od teh datotek zberejo ločeno in jih nato povežejo, da ustvarijo končno izvedljivo programsko opremo.

Primer tega so projekti C, sestavljeni iz datotek izvorne kode v .c razširitve in programski vmesniki v .h razširitve. Vsaka izvorna datoteka se prevede skupaj z datotekami glave za ustvarjanje. o predmeti, povezani skupaj s knjižnicami, s čimer se ustvarijo izvršljive datoteke.

Za izvedbo tega postopka razvijalci programske opreme uporabljajo orodja, kot je Make, za avtomatizacijo postopka gradnje in zahtevanih odvisnosti datotek. Make uporablja datoteke Makefiles za upravljanje vedenja postopka prevajanja.

Orodja GNU Make ponujajo nabor pravil in konvencij, ki se uporabljajo za ustvarjanje datotek Makefiles in zmanjšujejo zapletenost pri izboljšanju učinkovitosti.

V tej vadnici bomo posebej obravnavali Linux Kernel Makefiles Kconfig in Kbuild.

Preden začnemo, je dobro opozoriti, da se ta članek ne pretvarja, da govori o sistemu Kernel Build. Vendar pa nudimo pregled na visoki ravni o izdelavi slike in modulov vmlinux.

Če želite informacije, ki presegajo obseg te vadnice, priporočamo naslednji vir za boljše informacije:

https: // linkfy.na / goMakefilesDocs

https: // linkfy.do / gnuMake

Datoteke jeder: pregled

Kernel Build System, imenovan tudi sistem za konfiguriranje, je bistveno orodje - za tiste, ki ga potrebujejo - ki obstaja že nekaj časa. Vendar tega sistema ne bodo uporabljali vsi; tudi gonilniki in drugi razvijalci programske opreme na nizki ravni ga redko uporabljajo. Ker berete to, pomeni, da želite vedeti več o sistemu zgradbe jedra.

Tako bomo razpravljali o tem, kako se zbere jedro, in razpravljali o sistemih Kbuild in Kconfig, da jih boste lahko bolje razumeli.

Kernel Makefile ima pet osnovnih komponent:

  1. Makefile: To je zgornja datoteka make, ki se nahaja v izvornem korenu.
  2. Arch / $ (ARCH) Makefile: To je ločni Makefile; deluje kot dodatek k vrhunski datoteki Makefile.
  3. .config: To je konfiguracijska datoteka jedra.
  4. Skripti / Makefile.*: To definira nastavljena pravila za vse datoteke kbuild Make.
  5. Kbuild Makefiles: Makefile je približno 500 kbuild in jih ni prav lahko prebrati. Razmislite o datoteki, kot je:

https: // eliksir.bootlin.com / linux / najnovejši / vir / skripte / Kbuild.vključujejo

Kconfig

Datoteka Kconfig vsebuje module, ki pomagajo pri uporabi make * config. Kernelu pomaga pri selektivnih konfiguracijah, kar ustvarja modularnost in prilagodljivost za postopek gradnje jedra.

Sistem Kconfig določa različne konfiguracijske cilje. Pomoč za pomoč lahko uporabite za ogled razpoložljivih ciljev. Te cilje obdelujejo različni programi, ki jih med postopkom gradnje ponuja jedro.

Nekateri cilji Kconfig vključujejo:

naredite linux-windriver.gconfig
naredite linux-windriver.xconfig

OPOMBA: Za uporabo gconfig in xconfig morate imeti v gostiteljskem sistemu nameščena razvojna orodja QT.

Upoštevajte naslednje:

Posnetek kode Defconfig iz naslednjega vira:

https: // eliksir.bootlin.com / linux / v5.9 / source / scripts / kconfig / Makefile # L98

1. defconfig: $ (obj) / conf
2. ifneq ($ (nadomestni znak $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Privzeta konfiguracija temelji na '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. drugače
6. @ $ (kecho) "*** Privzeta konfiguracija temelji na cilju '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (nadomestni znak $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.konfiguracija: $ (obj) / conf
16. $ (če $ (pokliči configfiles) ,, $ (napaka Za ta cilj v tej arhitekturi ne obstaja nobena konfiguracija))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.sh-m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Posnetek kode Oldconfig iz naslednjega vira:

https: // eliksir.bootlin.com / linux / v5.9 / source / scripts / kconfig / conf.c # L694

1. case olddefconfig:
2. privzeto:
3. odmor;
4.
5.
6. če (input_mode == savedefconfig)
7. če (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Napaka pri shranjevanju defconfig v:% s \ n \ n",
9. defconfig_file);
10. vrnitev 1;
11.
12. drugače, če (input_mode != listnewconfig && input_mode != helpnewconfig)
13. če (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Napaka med pisanjem konfiguracije.\ n \ n ");
15. izhod (1);
16.
17.
18. / *
19. * Ustvari samodejno.conf, če ne obstaja.
20. * To preprečuje GNU Make 4.1 ali starejši od oddajanja
21. * "vključi / konfiguriraj / samodejno.conf: ni take datoteke ali imenika "
22. * v najvišji datoteki Makefile
23. *
24. * syncconfig vedno samodejno ustvari ali posodobi.conf, ker je
25. * uporabljeno med gradnjo.
26. * /
27. če (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Napaka med sinhronizacijo konfiguracije.\ n \ n ");
30. vrnitev 1;
31.
32.
33. vrnitev 0;
34.

V sistemu Kconfig je veliko tarč. Nekateri pogosti vključujejo config in menuconfig.

Kot smo že omenili, cilje obdelujejo različni programi v gostiteljskih sistemih, bodisi z GUI ali ukazno vrstico. Orodja Kconfig najdete v / scripts / Kconfig v izvoru jedra.

https: // eliksir.bootlin.com / linux / latest / source / scripts / kconfig

https: // eliksir.bootlin.com / linux / latest / source / scripts / kconfig / Makefile

Prvi postopek je običajno branje datoteke Kconfig v korenskem imeniku, ki se uporablja za izdelavo začetne konfiguracijske baze podatkov. Ko se postopek nadaljuje, se baza podatkov posodobi pri branju datotek v naslednjem vrstnem redu:

.konfig
/ lib / modules / $ (lupina, uname-r) /.konfig
/ etc / kernel-config
/ boot / config - $ (lupina, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig

.Datoteka config se nato spusti na syncconfig, ki sprejme .kot vhodno datoteko. Datoteko obdela in izpiše datoteke, ki so nato razvrščene v različne kategorije, kot so:

Kbuild Datoteke

Skoraj vse datoteke jedra so datoteke Kbuild Makefiles, ki uporabljajo infrastrukturo Kbuild, ki je rekurzivna funkcija izdelave. Rekurzivna znamka je način uporabe orodja Make kot ukaz v datoteki Make. Rekurzija je zelo koristna pri sestavljanju velikega projekta.

Kbuild deluje tako, da se sklicuje na vse datoteke, ki smo jih omenili v zgornjem razdelku.

Sistem Kbuild gradi svoje komponente z uporabo zgornje datoteke Makefile, ki vključuje lokacijske datoteke z imenom arch / $ (ARCH) / Makefile v nastavitvenih datotekah. Rekurzivno se spusti v podimenike, ki na komponentah prikličejo Make z uporabo rutin v skripti / Makefile.*. Nato Kbuild nadgradi sosednji objekt in jih poveže v predmete ter ustvari vmlinux.

Če želite izvedeti več o sintaksi, ki se uporablja v Kbuild Makefiles, glejte dokumentacijo.

Razmislite o naslednjem skriptu.

https: // github.com / torvalds / linux / blob / master / scripts / link-vmlinux.sh

Datoteke o, ki se uporabljajo za ustvarjanje vmlinuxa, so najprej zbrane v njihovih vgrajenih datotekah .datoteke kot var KBUILD_VMLINUX_INIT, MAIN, LIBS. Ti so sestavljeni v vmlinuxu.

https: // github.com / torvalds / linux / blob / master / scripts / Makefile.graditi

Zaključek

V tem priročniku smo si ogledali sisteme Kbuild in Kconfig v sistemu gradnje jedra in kako deluje. Kot smo že omenili na začetku vadnice, so obravnavane teme široke in jih ni mogoče obravnavati v eni vaji.

Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...
Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...