Linuxi tuum

Linuxi tuuma Makefile selgitus

Linuxi tuuma Makefile selgitus
Tarkvaraarenduses võib suurte koodihoidlate loomise ja haldamise protsess muutuda lihtsalt väga keeruliseks.

Selle keerukuse haldamiseks ja vähendamiseks korraldavad tarkvaraarendajad koodi väikestes failides, mis viitavad konkreetsetele moodulitele. Arendajad saavad kõik need failid eraldi kompileerida ja seejärel linkida, et luua lõplik tarkvara käivitatav fail.

Selle näiteks on C-i lähtekoodifailidest koosnevad C-projektid .c laiendused ja tarkvaraliidesed .h pikendused. Iga lähtefail kompileeritakse koos loodavate päisefailidega. o objektid, mis on lingitud teekide abil, luues seeläbi käivitatavad failid.

Selle protsessi teostamiseks kasutavad tarkvaraarendajad tööriistu, näiteks Make, et automatiseerida koostamisprotsessi ja nõutavaid failisõltuvusi. Make kasutab kompileerimisprotsessi käitumise haldamiseks Makefileesi.

Tööriistad GNU Make pakuvad Makefileesi loomisel kasutatavaid reegleid ja tavasid ning vähendavad tõhususe parandamise keerukust.

Selles õpetuses käsitleme konkreetselt Linuxi tuuma Makefileesi Kconfig ja Kbuild.

Enne alustamist on hea märkida, et see artikkel ei pretendeeri kõigele, mis õpetaks kernelikonstruktsioonide süsteemi. Pakume siiski kõrgetasemelist ülevaadet vmlinuxi pildi ja moodulite ehitamisest.

Kui soovite teavet selle õpetuse raamest väljaspool, soovitame parema teabe saamiseks järgmist ressurssi:

https: // linkfy.to / goMakefilesDocs

https: // linkfy.to / gnuMake

Kernel Makefiles: ülevaade

Kerneli loomise süsteem, mida nimetatakse ka konfiguratsioonisüsteemiks, on hädavajalik tööriist neile, kes seda vajavad, mis on juba mõnda aega olnud. Kõik ei kasuta seda süsteemi; isegi draiverid ja muud madala taseme tarkvaraarendajad kasutavad seda harva. Kuna loete seda, tähendab see, et soovite rohkem teada saada kerneli loomise süsteemist.

Seega arutame, kuidas kernel kompileeritakse, ja arutame süsteemi Kbuild ja Kconfig, et saaksite neist paremini aru saada.

Kernel Makefile'il on viis põhikomponenti:

  1. Makefile: See on top make fail, mis asub lähtejuuris.
  2. arch / $ (ARCH) Makefile: See on võlv Makefile; see toimib Makefile'i tippu täiendusena.
  3. .config: See on kerneli konfiguratsioonifail.
  4. Skriptid / Makefile.*: See määratleb kõigi kbuild Makefile'i seaded.
  5. Kbuild Makefiles: Makefileid on umbes 500 kbuildi ja neid pole eriti lihtne lugeda. Mõelge näiteks järgmisele failile:

https: // eliksiir.bootlin.com / linux / latest / source / scripts / Kbuild.hõlmama

Kconfig

Kconfigi fail sisaldab mooduleid, mis on abiks make * config kasutamisel. See aitab kernelil teha valikulisi konfiguratsioone, luues tuuma loomisprotsessi jaoks modulaarsuse ja kohandatavuse.

Kconfigi süsteem on määranud mitu konfiguratsiooni sihtmärki. Saadaolevate sihtmärkide kuvamiseks võite kasutada abi make. Neid sihtmärke töödeldakse mitmesuguste programmide abil, mille tuum pakkus ehitamise ajal.

Mõned Kconfigi sihtmärgid hõlmavad järgmist

teha linux-windriver.gconfig
teha linux-windriver.xconfig

MÄRGE: Gconfigi ja xconfigi kasutamiseks peaksid hostisüsteemi olema installitud QT arendustööriistad.

Mõelge järgmisele:

Defconfig koodipilt järgmisest ressursist:

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

1. defconfig: $ (obj) / conf
2. ifneq ($ (metamärk $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Vaikekonfiguratsioon põhineb '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. muud
6. @ $ (kecho) "*** Vaikekonfiguratsioon põhineb eesmärgil '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / konf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (metamärk $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (kui $ (call configfiles) ,, $ (tõrge Selles arhitektuuris pole selle sihtmärgi jaoks konfiguratsiooni))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skriptid / kconfig / merge_config.sh-m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Oldconfigi koodi hetktõmmis järgmisest ressursist:

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

1. juhtum olddefconfig:
2. vaikimisi:
3. murda;
4.
5.
6. if (sisend_režiim == salvestatudkonfig)
7. kui (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Viga defconfig salvestamisel asukohta:% s \ n \ n",
9. defconfig_file);
10. tagastus 1;
11.
12. else if (sisend_režiim != listnewconfig && input_mode != helpnewconfig)
13. kui (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Viga konfiguratsiooni kirjutamisel.\ n \ n ");
15. väljapääs (1);
16.
17.
18. / *
19. * Loo automaatne.konf, kui seda pole olemas.
20. * See takistab GNU Make 4-d.1 või vanem kiirgamisest
21. * "include / config / auto.conf: pole sellist faili ega kataloogi "
22. * tipptasemel Makefile'is
23. *
24. * syncconfig loob või uuendab alati automaatselt.konf, sest see on
25. * kasutatud ehitamise ajal.
26. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Viga konfiguratsiooni sünkroonimisel.\ n \ n ");
30. tagastus 1;
31.
32.
33. tagastama 0;
34.

Kconfigi süsteemis on palju sihtmärke. Mõned levinumad on config ja menuconfig.

Nagu mainitud, töötlevad sihtmärke hostisüsteemide erinevad programmid, pakkudes kas GUI või käsurida. Kconfigi tööriistad leiate kerneli allikast kataloogist / scripts / Kconfig.

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

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

Esimene protsess on tavaliselt juurkataloogis oleva Kconfigi faili lugemine, mida kasutatakse esialgse konfiguratsiooni andmebaasi loomiseks. Protsessi jätkudes värskendatakse andmebaasi failide lugemisel järgmises järjekorras:

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

.konfigureerimisfail kukutatakse seejärel failile syncconfig, mis aktsepteerib .konfiguratsioonifail sisendina. See töötleb faili ja väljastab failid, mis seejärel liigitatakse erinevatesse kategooriatesse, näiteks:

Kbuildi failid

Peaaegu kõik kerneli failid on Kbuild Makefiles, mis kasutavad Kbuildi infrastruktuuri, mis on rekursiivne make-funktsioon. Rekursiivne Make on viis tööriista Make kasutamiseks Makefile'is käsuna. Rekursioon on suure projekti koostamisel väga kasulik.

Kbuild töötab viidates kõigile ülalnimetatud failides mainitud failidele.

Kbuildi süsteem ehitab oma komponendid ülemise Makefile'i abil, mis sisaldab konfiguratsioonifailides arhi Makefileid nimega arch / $ (ARCH) / Makefile. See laskub rekursiivselt alamkataloogidesse, kutsudes komponentidele Make-i, kasutades skripte / Makefile'i rutiini.*. Seejärel ehitab Kbuild külgneva objekti ja seob need objektideks, luues vmlinuxi.

Lisateavet Kbuild Makefilesis kasutatava süntaksi kohta leiate dokumentatsioonist.

Mõelge järgmisele skriptile.

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

Vmlinuxi loomiseks kasutatud o-objektifailid kompileeritakse kõigepealt nende vastavasse sisseehitatud .failid var KBUILD_VMLINUX_INIT, MAIN, LIBS. Need on koostatud vmlinuxis.

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

Järeldus

Selles juhendis vaatasime Kerneli ehitussüsteemi Kbuildi ja Kconfigi süsteeme ning kuidas see töötab. Nagu me õpetuse alguses mainisime, on käsitletud teemad laialdased ja neid ei saa käsitleda ühes õpetuses.

HD Remastered Games Linuxile, millel pole kunagi varem Linuxi väljalaset olnud
Paljud mängude arendajad ja kirjastajad pakuvad frantsiisi eluea pikendamiseks välja vanade mängude HD-remasteri. Palun fännid, kes soovivad ühilduvus...
Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...
Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...