Linux kernel

Objašnjena datoteka makete Linux kernela

Objašnjena datoteka makete Linux kernela
U razvoju softvera, postupak stvaranja i upravljanja velikim spremištima koda može postati vrlo složen.

Da bi upravljali i smanjili ovu složenost, programeri softvera organiziraju kod u male datoteke koje se povezuju na određene module. Programeri mogu svaku od ovih datoteka kompajlirati zasebno, a zatim ih povezati kako bi stvorili konačni izvršni softver.

Primjer za to su C projekti koji se sastoje od datoteka izvornog koda u .c proširenja i softverska sučelja u sustavu Windows .h nastavci. Svaka izvorna datoteka sastavlja se zajedno s datotekama zaglavlja za stvaranje. o objekti povezani zajedno pomoću knjižnica, stvarajući tako izvršne datoteke.

Da bi izveli ovaj postupak, programeri softvera koriste alate, kao što je Make, za automatizaciju procesa gradnje i potrebnih ovisnosti datoteka. Make koristi Makefiles za upravljanje ponašanjem postupka kompilacije.

Alati GNU Make pružaju niz pravila i konvencija korištenih za stvaranje Makefile-a i smanjenje složenosti u poboljšanju učinkovitosti.

U ovom ćemo uputstvu posebno razgovarati o Linuxovim kernel datotekama Kconfig i Kbuild.

Prije nego što započnemo, dobro je napomenuti da ovaj članak nema pretvaranje da podučava sve o sustavu gradnje jezgre. Međutim, pružamo pregled na visokoj razini izgradnje vmlinux slike i modula.

Ako želite informacije izvan dosega ovog vodiča, za bolje informacije preporučujemo sljedeći resurs:

https: // linkfy.na / goMakefilesDocs

https: // linkfy.u / gnuMake

Datoteke kernela: pregled

Sustav gradnje jezgre, koji se naziva i konfiguracijski sustav, bitan je alat - za one koji ga trebaju - koji postoji već neko vrijeme. Međutim, neće svi koristiti ovaj sustav; čak ga i vozači i drugi programeri niske razine rijetko koriste. Budući da ovo čitate, znači da želite znati više o sustavu gradnje jezgre.

Stoga ćemo razgovarati o tome kako se kernel kompajlira i raspravit ćemo o sustavu Kbuild i Kconfig kako biste ih mogli bolje razumjeti.

Kernel Makefile ima pet temeljnih komponenata:

  1. Makefile: Ovo je gornja datoteka izrade koja se nalazi u izvornom korijenu.
  2. Arch / $ (ARCH) Makefile: Ovo je lučni Makefile; djeluje kao dodatak vrhunskom Makefileu.
  3. .config: Ovo je konfiguracijska datoteka kernela.
  4. Skripte / Makefile.*: Ovo definira postavljena pravila za sve kbuild make datoteke.
  5. Kbuild make fajlovi: Postoji oko 500 kbuild make datoteka, a njih nije baš lako pročitati. Razmotrite datoteku kao što je:

https: // eliksir.bootlin.com / linux / najnovije / izvor / skripte / Kbuild.uključuju

Kconfig

Datoteka Kconfig sadrži module koji pomažu pri korištenju make * config. Pomaže kernelu da napravi selektivne konfiguracije, stvarajući modularnost i prilagodljivost za postupak gradnje kernela.

Postoje različiti ciljevi konfiguracije koje određuje sustav Kconfig. Pomoću make make možete pogledati dostupne ciljeve. Te ciljeve obrađuju različiti programi koje jezgra pruža tijekom postupka izrade.

Neki od Kconfig ciljeva uključuju:

izraditi linux-windriver.gconfig
izraditi linux-windriver.xconfig

BILJEŠKA: Da biste koristili gconfig i xconfig, trebali biste imati instalirane QT alate za razvoj na glavnom sustavu.

Uzmite u obzir sljedeće:

Snimak koda Defconfig iz sljedećeg resursa:

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

1. defconfig: $ (obj) / conf
2. ifneq ($ (zamjenski znak $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Zadana se konfiguracija temelji na '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. drugo
6. @ $ (kecho) "*** Zadana se konfiguracija temelji na cilju '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. završi ako
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (zamjenski znak $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.konfiguracija: $ (obj) / conf
16. $ (if $ (call configfiles) ,, $ (pogreška Ne postoji konfiguracija za ovaj cilj na ovoj arhitekturi))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.sh-m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Snimka koda Oldconfig iz sljedećeg resursa:

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

1. case olddefconfig:
2. zadano:
3. pauza;
4.
5.
6. if (input_mode == savedefconfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Pogreška prilikom spremanja defconfig-a u:% s \ n \ n",
9. defconfig_file);
10. povratak 1;
11.
12. else if (input_mode != listnewconfig && input_mode != helpnewconfig)
13. ako (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Pogreška tijekom pisanja konfiguracije.\ n \ n ");
15. izlaz (1);
16.
17.
18. / *
19. * Stvori auto.conf ako ne postoji.
20. * Ovo sprječava GNU Make 4.1 ili stariji od emitiranja
21. * "uključi / konfiguriraj / automatski.conf: Nema takve datoteke ili direktorija "
22. * u najvišoj razini Makefile
23. *
24. * syncconfig uvijek automatski stvara ili ažurira.conf jer je
25. * koristi se tijekom gradnje.
26. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Pogreška tijekom sinkronizacije konfiguracije.\ n \ n ");
30. povratak 1;
31.
32.
33. return 0;
34.

U sustavu Kconfig ima puno ciljeva. Neki od uobičajenih uključuju config i menuconfig.

Kao što je spomenuto, ciljevi se obrađuju različitim programima u host sustavima, bilo da pružaju GUI ili naredbeni redak. Alate Kconfig možete pronaći u / scripts / Kconfig u izvoru jezgre.

https: // eliksir.bootlin.com / linux / najnovije / izvor / skripte / kconfig

https: // eliksir.bootlin.com / linux / najnovije / izvor / skripte / kconfig / Makefile

Prvi je postupak obično čitanje datoteke Kconfig u korijenskom direktoriju, koja se koristi za izgradnju početne konfiguracijske baze podataka. Kako se postupak nastavlja, baza podataka se ažurira prilikom čitanja datoteka sljedećim redoslijedom:

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

.Datoteka config se zatim ispušta na syncconfig, koji prihvaća .konfiguracijska datoteka kao ulaz. Datoteku obrađuje i izbacuje datoteke koje se zatim klasificiraju u razne kategorije kao što su:

Kbuild Datoteke

Gotovo sve datoteke kernela su Kbuild Makefiles koji koriste Kbuild infrastrukturu, što je rekurzivna značajka izrade. Rekurzivno stvaranje način je korištenja alata Make kao naredbe u datoteci Make. Rekurzija je vrlo korisna pri sastavljanju velikog projekta.

Kbuild djeluje pozivajući se na sve datoteke koje smo spomenuli u gornjem odjeljku.

Kbuild sustav gradi svoje komponente koristeći gornju datoteku Makefile koja uključuje lučne datoteke s imenom arch / $ (ARCH) / Makefile u datotekama konfiguracije. Rekurzivno se spušta u poddirektoriju koji poziva Make na komponentama koristeći rutine u skriptama / Makefileu.*. Kbuild se zatim nadovezuje na susjedni objekt i povezuje ih u objekte, stvarajući vmlinux.

Da biste saznali više o sintaksi korištenoj u Kbuild Makefiles, pogledajte dokumentaciju.

Razmotrite sljedeću skriptu.

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

O objektne datoteke korištene za stvaranje vmlinuxa prvo se prevode u njihove ugrađene ugrađene datoteke .datoteke kao var KBUILD_VMLINUX_INIT, MAIN, LIBS. Oni su sastavljeni u vmlinuxu.

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

Zaključak

U ovom smo vodiču pogledali Kbuild i Kconfig sustave u sustavu gradnje jezgre i kako to funkcionira. Kao što smo spomenuli na početku udžbenika, teme o kojima se raspravlja široke su i ne mogu se pokriti ni u jednom udžbeniku.

Vodič za Shadow of the Tomb Raider za Linux
Shadow of the Tomb Raider dvanaesti je dodatak seriji Tomb Raider - franšizi u akcijsko-avanturističkoj igri koju je stvorio Eidos Montreal. I kritiča...
Kako pojačati FPS u Linuxu?
FPS je kratica Okviri u sekundi. Zadatak FPS-a je mjerenje broja sličica u reprodukcijama video zapisa ili igranim izvedbama. Jednostavnim riječima, b...
Najpopularnije laboratorijske igre Oculus App
Ako ste vlasnik slušalica Oculus, tada morate biti sigurni u bočno učitavanje. Bočno učitavanje postupak je instaliranja nehranjenog sadržaja na vaše ...