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:
- Makefile: Ovo je gornja datoteka izrade koja se nalazi u izvornom korijenu.
- Arch / $ (ARCH) Makefile: Ovo je lučni Makefile; djeluje kao dodatak vrhunskom Makefileu.
- .config: Ovo je konfiguracijska datoteka kernela.
- Skripte / Makefile.*: Ovo definira postavljena pravila za sve kbuild make datoteke.
- 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:
- Konfiguracija: To se koristi za ažuriranje datoteke konfiguracije jezgre pomoću linijskog programa.
- Konfiguracija izbornika: Ovo je Kconfig značajka ili mehanizam koji nudi pristup Kernel opcijama na temelju izbornika. Da biste pokrenuli menuconfig i ostale značajke Kconfig, trebali biste biti unutar direktorija projekta platforme. Možete koristiti sljedeće za pokretanje značajke Kconfig menuconfig. Međutim, menuconfig možete pokrenuti i s drugim značajkama konfiguracije jezgre GUI Linuxa, kao što su xconfig i gconfig. izraditi linux-windriver.menuconfig - izvršava menuconfig u zasebnoj terminalskoj sesiji.
- gconfig i xconfig: Gconfig aktivira značajke Linux kernela temeljene na GUI-u. Gconfig zapošljava korisničko sučelje temeljeno na GTK ili (na temelju X). S druge strane, Xconfig koristi sučelje temeljeno na Qt. Upotrijebite sljedeće naredbe za pokretanje gconfig, odnosno xconfig:
izraditi linux-windriver.xconfig
BILJEŠKA: Da biste koristili gconfig i xconfig, trebali biste imati instalirane QT alate za razvoj na glavnom sustavu.
- Nconfig: Značajka Nconfig pokreće trenutnu konfiguraciju (Buildtools) i odnosi se na program vođen izbornikom Ncurses. To vam omogućuje odabir paketa za izgradnju, poput CPU-a, upravljačkih programa i datotečnog sustava prilikom izrade jezgre. Koristite naredbu: make nconfig.
- Oldconfig: Značajka oldconfig omogućuje vam primjenu novijih .konfiguracijske datoteke u starije konfiguracijske datoteke jezgre. Na primjer, stari .config datoteku i noviju .Datoteka config (novija verzija jezgre) imat će razlike, što znači da morate ažurirati trenutnu konfiguraciju prije gradnje kernela. Možete koristiti make oldconfig za interaktivno ažuriranje stare konfiguracije primjenom opcija koje nedostaju u staroj konfiguracijskoj datoteci.
- Defconfig: Ova značajka omogućuje sustavu gradnje jezgre da doda novu konfiguraciju koju nudi defconfig u .konfiguracijska datoteka. Točnije, sustav Kbuild provjerava sve datoteke Kconfig. Ako defconfig navede opciju u datoteci, sustav Kbuild koristi navedenu vrijednost za dodavanje opcije u .konfiguracija. Ako defconfig ne spominje opciju, Kbuild koristi zadane vrijednosti u .konfiguracija.
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) / conf2. 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.
- Savedefconfig: Ovo pravilo sprema trenutnu .konfiguracija u obliku ./ defconfig, koja se smatra minimalnom konfiguracijskom datotekom. Upotrijebite naredbu: make savedefconfig
- Listnewconfig: To se koristi za popis novih opcija.
- Kvmconfig: To omogućuje opcije za KVM podršku. Upotrijebite naredbu: make kvm_guest.konfiguracija
- Allyesconfig: Ovo gradi novu datoteku konfiguracije jezgre sa svim opcijama postavljenim na da. Suprotno je od allnoconfig.
- Allmodconfig: Ovo gradi novu konfiguraciju jezgre s kojom su moduli omogućeni prema zadanim postavkama.
- Randconfig: Ovo gradi novu datoteku konfiguracije jezgre sa slučajnim odgovorima na sve opcije.
- Tinyconfig: To čini najmanju moguću jezgru.
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:
- autoconf.h: Ovo se koristi za izvorne datoteke na jeziku C.
- auto.conf i tristate.conf: Oni se koriste za obradu teksta Makefile.
- / uključuje / konfiguraciju: To su prazne datoteke zaglavlja koje se koriste za praćenje ovisnosti.
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.