Linux-ydin

Linux Kernel Makefile selitetty

Linux Kernel Makefile selitetty
Ohjelmistokehityksessä suurten koodivarastojen luominen ja hallinta voi tulla helposti monimutkaiseksi.

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:

  1. Makefile: Tämä on lähdejuuressa oleva ylin make-tiedosto.
  2. arch / $ (ARCH) Makefile: Tämä on kaari Makefile; se toimii täydennyksenä Makefile-alkuun.
  3. .config: Tämä on ytimen kokoonpanotiedosto.
  4. Komentosarjat / Makefile.*: Tämä määrittelee asetetut säännöt kaikille kbuild Makefileille.
  5. 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:

tehdä linux-windriver.gconfig
tehdä linux-windriver.xconfig

MERKINTÄ: Jos haluat käyttää gconfigia ja xconfigia, QT-kehitystyökalut on asennettava isäntäjärjestelmään.

Harkitse seuraavaa:

Defconfig-koodinäkymä seuraavasta resurssista:

https: // eliksiiri.bootlin.fi / linux / v5.9 / source / scripts / kconfig / Makefile # L98

1. defconfig: $ (obj) / conf
2. 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.

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:

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.

Kuinka käyttää GameConqueror-huijausmoottoria Linuxissa
Artikkelissa on opas GameConqueror-huijausmoottorin käytöstä Linuxissa. Monet Windows-pelejä pelaavat käyttäjät käyttävät "Cheat Engine" -sovellusta m...
Parhaat pelikonsoliemulaattorit Linuxille
Tässä artikkelissa luetellaan suositut pelikonsolin emulointiohjelmistot, jotka ovat saatavana Linuxille. Emulointi on ohjelmistojen yhteensopivuusker...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...