Tämän monimutkaisuuden hallitsemiseksi ja vähentämiseksi ohjelmistokehittäjät järjestävät koodin pieniin tiedostoihin, jotka linkittävät tiettyihin moduuleihin. Kehittäjät voivat koota nämä tiedostot erikseen ja linkittää ne sitten yhteen lopullisen ohjelmiston suoritustiedoston luomiseksi.
Esimerkki tästä on C-projektit, jotka koostuvat lähdekooditiedostoista .c laajennukset ja ohjelmistoliittymät .h laajennukset. Jokainen lähdetiedosto kootaan yhdessä luotavien otsikkotiedostojen kanssa. o objektit on linkitetty toisiinsa kirjastojen avulla, mikä luo suoritettavia tiedostoja.
Tämän prosessin suorittamiseksi ohjelmistokehittäjät käyttävät työkaluja, kuten Make, automatisoimaan rakennusprosessin ja vaaditut tiedostiriippuvuudet. Make käyttää Makefileitä kokoamisprosessin käyttäytymisen hallintaan.
GNU Make -työkalut tarjoavat joukon sääntöjä ja käytäntöjä, joita käytetään Makefileiden luomiseen ja vähentävät tehokkuuden parantamisen monimutkaisuutta.
Tässä opetusohjelmassa keskustelemme erityisesti Linux-ytimen Makefileistä Kconfig ja Kbuild.
Ennen kuin aloitamme, on hyvä huomata, että tässä artikkelissa ei teeskennellä opettavan kaikkea Kernel Build -järjestelmää. Tarjoamme kuitenkin korkean tason yleiskuvan vmlinux-kuvan ja moduulien rakentamisesta.
Jos haluat lisätietoja tämän opetusohjelman ulkopuolelta, suosittelemme seuraavaa lähdettä parempien tietojen saamiseksi:
https: // linkfy.to / goMakefilesDocs
https: // linkfy./ gnuMake
Kernel Makefiles: Yleiskatsaus
Kernel Build System, jota kutsutaan myös config-järjestelmäksi, on tärkeä työkalu niille, jotka sitä tarvitsevat - joka on ollut käytössä jonkin aikaa. Kaikki eivät kuitenkaan käytä tätä järjestelmää; jopa ohjaimet ja muut matalan tason ohjelmistokehittäjät käyttävät sitä harvoin. Koska luet tätä, se tarkoittaa, että haluat tietää enemmän ytimen koontijärjestelmästä.
Keskustelemme siis siitä, kuinka ydin käännetään, ja keskustelemme Kbuild- ja Kconfig-järjestelmistä, jotta voit ymmärtää niitä paremmin.
Kernel Makefile sisältää viisi ydinkomponenttia:
- Makefile: Tämä on lähdejuuressa oleva ylin make-tiedosto.
- arch / $ (ARCH) Makefile: Tämä on kaari Makefile; se toimii täydennyksenä Makefile-alkuun.
- .config: Tämä on ytimen kokoonpanotiedosto.
- Komentosarjat / Makefile.*: Tämä määrittelee asetetut säännöt kaikille kbuild Makefileille.
- Kbuild Makefiles: Makefileitä on noin 500 kbuildia, eikä niitä ole kovin helppo lukea. Harkitse esimerkiksi seuraavaa tiedostoa:
https: // eliksiiri.bootlin.fi / linux / latest / source / scripts / Kbuild.sisältää
Kconfig
Kconfig-tiedosto sisältää moduuleja, jotka auttavat make * config -sovelluksen käytössä. Se auttaa ydintä tekemään valikoivia kokoonpanoja luomalla modulaarisuuden ja mukautettavuuden ytimen koontimenettelyyn.
Kconfig-järjestelmä on määrittänyt useita määrityskohteita. Voit käyttää make-ohjetta nähdäksesi käytettävissä olevat kohteet. Nämä tavoitteet käsitellään useilla ytimen toimittamissa ohjelmissa rakennusprosessin aikana.
Joitakin Kconfig-kohteista ovat:
- Määritä: Tätä käytetään päivittämään ytimen asetustiedosto linjaohjelmalla.
- Valikkokonfig: Tämä on Kconfig-ominaisuus tai -mekanismi, joka tarjoaa valikkopohjaisen pääsyn ytimen asetuksiin. Käynnistäksesi menuconfig ja muut Kconfig-ominaisuudet, sinun pitäisi olla alustan projektihakemistossa. Voit käyttää seuraavaa käynnistääksesi Kconfig-valikonmäärityksen. Voit kuitenkin käynnistää valikkokonfigin myös muilla GUI Linux Kernel -määritysominaisuuksilla, kuten xconfig ja gconfig. tehdä linux-windriver.menuconfig - Suorittaa menuconfig erillisessä pääteistunnossa.
- gconfig ja xconfig: Gconfig aktivoi GUI-pohjaiset Linux-ytimen ominaisuudet. Gconfig käyttää GTK- tai (X-pohjaista) käyttöliittymää. Toisaalta Xconfig käyttää Qt-pohjaista käyttöliittymää. Käynnistä gconfig ja xconfig seuraavien komentojen avulla:
tehdä linux-windriver.xconfig
MERKINTÄ: Jos haluat käyttää gconfigia ja xconfigia, QT-kehitystyökalut on asennettava isäntäjärjestelmään.
- Nconfig: Nconfig-ominaisuus suorittaa nykyisen kokoonpanon (Buildtools) ja koskee Ncurses-valikkopohjaista ohjelmaa. Tämän avulla voit valita rakennettavat paketit, kuten suorittimen, ohjaimet ja tiedostojärjestelmän ydintä rakennettaessa. Käytä komentoa: make nconfig.
- Oldconfig: Oldconfig-ominaisuuden avulla voit käyttää uudempia .config-tiedostot vanhempiin ytimen config-tiedostoihin. Esimerkiksi vanha .config-tiedosto ja uudempi .config-tiedostolla (uudempi ytimen versio) on eroja, mikä tarkoittaa, että sinun on päivitettävä nykyinen config ennen ytimen koontia. Voit päivittää vanhan kokoonpanon vuorovaikutteisesti käyttämällä make oldconfig -sovellusta soveltamalla vanhasta määritystiedostosta puuttuvia asetuksia.
- Defconfig: Tämän ominaisuuden avulla ytimen koontijärjestelmä voi lisätä defconfigin toimittaman uuden kokoonpanon .config-tiedosto. Tarkemmin sanottuna Kbuild-järjestelmä tarkistaa kaikki Kconfig-tiedostot. Jos defconfig määrittää tiedoston vaihtoehdon, Kbuild-järjestelmä käyttää määritettyä arvoa lisäämällä vaihtoehdon tiedostoon .konfig. Jos defconfig ei mainitse vaihtoehtoa, Kbuild käyttää oletusarvoja .konfig.
Harkitse seuraavaa:
Defconfig-koodinäkymä seuraavasta resurssista:
https: // eliksiiri.bootlin.fi / linux / v5.9 / source / scripts / kconfig / Makefile # L98
1. defconfig: $ (obj) / conf2. ifneq ($ (jokerimerkki $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Oletuskokoonpano perustuu" $ (KBUILD_DEFCONFIG) ""
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. muu
6. @ $ (kecho) "*** Oletuskokoonpano perustuu kohteeseen '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. loppu Jos
9.
10. % _defconfig: $ (obj) / konf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (jokerimerkki $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (jos $ (call configfiles) ,, $ (virhe Tälle kohteelle ei ole määritystä tässä arkkitehtuurissa))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.sh-m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig
Oldconfig-koodikatsaus seuraavasta resurssista:
https: // eliksiiri.bootlin.fi / linux / v5.9 / source / scripts / kconfig / conf.c # L694
1. tapaus olddefconfig:2. oletus:
3. tauko;
4.
5.
6. jos (input_mode == savedefconfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Virhe tallennettaessa defconfig-tiedostoa kohteeseen:% s \ n \ n",
9. defconfig_file);
10. paluu 1;
11.
12. else if (syöttötapa != listnewconfig && input_mode != helpnewconfig)
13. jos (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Virhe kokoonpanoa kirjoitettaessa.\ n \ n ");
15. poistuminen (1);
16.
17.
18. / *
19. * Luo automaattinen.conf, jos sitä ei ole olemassa.
20. * Tämä estää GNU Make 4: n.1 tai vanhempi päästöistä
21. * "include / config / auto.conf: Ei tällaista tiedostoa tai hakemistoa "
22. * ylätason Makefile-tiedostossa
23. *
24. * syncconfig luo tai päivittää aina automaattisen.conf, koska se on
25. * käytetty rakennuksen aikana.
26. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Virhe kokoonpanon synkronoinnissa.\ n \ n ");
30. paluu 1;
31.
32.
33. paluu 0;
34.
- Tallennettuefconfig: Tämä sääntö tallentaa nykyisen .config muodossa ./ defconfig, jota pidetään vähäisenä määritystiedostona. Käytä komentoa: make savedefconfig
- Listnewconfig: Tätä käytetään uusien vaihtoehtojen luetteloon.
- Kvmconfig: Tämä mahdollistaa vaihtoehdot KVM-tuelle. Käytä komentoa: make kvm_guest.konfig
- Allyesconfig: Tämä rakentaa uuden ytimen määritystiedoston, jonka kaikki asetukset on asetettu kyllä. Se on päinvastoin kuin allnoconfig.
- Allmodconfig: Tämä rakentaa uuden ytimen kokoonpanon, jossa moduulit ovat oletusarvoisesti käytössä.
- Randconfig: Tämä rakentaa uuden ytimen kokoonpanotiedoston, joka sisältää satunnaiset vastaukset kaikkiin vaihtoehtoihin.
- Tinyconfig: Tämä tekee pienimmän mahdollisen ytimen.
Kconfig-järjestelmässä on paljon kohteita. Joitakin yleisimpiä ovat config ja menuconfig.
Kuten mainittiin, kohteet käsitellään isäntäjärjestelmien erilaisissa ohjelmissa joko tarjoamalla graafisen käyttöliittymän tai komentorivin. Löydät Kconfig-työkalut ytimen lähteestä hakemistosta / scripts / Kconfig.
https: // eliksiiri.bootlin.fi / linux / latest / source / scripts / kconfig
https: // eliksiiri.bootlin.fi / linux / latest / source / scripts / kconfig / Makefile
Ensimmäinen prosessi on yleensä Kconfig-tiedoston lukeminen juurihakemistosta, jota käytetään alkuperäisen määritystietokannan rakentamiseen. Kun prosessi jatkuu, tietokanta päivitetään, kun tiedostoja luetaan seuraavassa järjestyksessä:
.konfig/ lib / modules / $ (shell, uname-r) /.konfig
/ etc / kernel-config
/ boot / config - $ (shell, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig
.config-tiedosto pudotetaan sitten syncconfig-tiedostoon, joka hyväksyy .config-tiedosto syötteenä. Se käsittelee tiedostoa ja tuottaa tiedostot, jotka luokitellaan sitten eri luokkiin, kuten:
- autokonf.h: Tätä käytetään C-kielen lähdetiedostoihin.
- auto.conf ja tristate.conf: Näitä käytetään Makefile-tekstinkäsittelyssä.
- / sisältää / config: Nämä ovat tyhjiä otsikkotiedostoja, joita käytetään riippuvuuden seurannassa.
Kbuild-tiedostot
Lähes kaikki Kernel-tiedostot ovat Kbuild Makefile-tiedostoja, jotka käyttävät Kbuild-infrastruktuuria, joka on rekursiivinen make-ominaisuus. Rekursiivinen Make on tapa käyttää Make-työkalua komentona Makefile-tiedostossa. Rekursio on erittäin hyödyllinen koottaessa suurta projektia.
Kbuild toimii viittaamalla kaikkiin tiedostoihin, jotka mainitsimme edellisessä osassa.
Kbuild-järjestelmä rakentaa komponentit käyttämällä ylintä Makefile-tiedostoa, joka sisältää arch Makefiles-tiedoston nimellä arch / $ (ARCH) / Makefile asetustiedostoihin. Se laskeutuu rekursiivisesti alihakemistoihin, joissa käytetään komponenttien Make-komentoa komentosarjojen / Makefile-ohjelman rutiinien avulla.*. Sitten Kbuild rakentaa viereisen objektin päälle ja linkittää ne esineisiin luoden vmlinux.
Lisätietoja Kbuild Makefiles -sovelluksessa käytetystä syntaksista on dokumentaatiossa.
Harkitse seuraavaa komentosarjaa.
https: // github.fi / torvalds / linux / blob / master / scripts / link-vmlinux.sh
O-objektitiedostot, joita käytetään vmlinuxin luomiseen, kootaan ensin niiden sisäänrakennetuissa tiedostoissa .tiedostot var KBUILD_VMLINUX_INIT, MAIN, LIBS. Nämä ovat sommiteltu vmlinux.
https: // github.fi / torvalds / linux / blob / master / scripts / Makefile.rakentaa
Johtopäätös
Tässä oppaassa tarkasteltiin Kbuild- ja Kconfig-järjestelmiä ytimen koontijärjestelmässä ja miten se toimii. Kuten mainitsimme opetusohjelman alussa, keskustellut aiheet ovat laajoja, eikä niitä voida käsitellä yhdessä opetusohjelmassa.