Lai pārvaldītu un samazinātu šo sarežģītību, programmatūras izstrādātāji organizē kodu mazos failos, kas saista ar noteiktiem moduļiem. Izstrādātāji var apkopot katru no šiem failiem atsevišķi un pēc tam tos sasaistīt, lai izveidotu galīgo programmatūras izpildāmo failu.
Piemērs tam ir C projekti, kas sastāv no pirmkodu failiem .c paplašinājumi un programmatūras saskarnes .h pagarinājumi. Katrs avota fails tiek apkopots kopā ar galvenes failiem, lai izveidotu. o objekti, kas sasaistīti, izmantojot bibliotēkas, tādējādi izveidojot izpildāmos failus.
Lai veiktu šo procesu, programmatūras izstrādātāji izmanto rīkus, piemēram, Make, lai automatizētu būvēšanas procesu un nepieciešamās failu atkarības. Make izmanto Makefiles, lai pārvaldītu kompilācijas procesa uzvedību.
GNU Make rīki nodrošina noteikumu un konvenciju kopumu, kas tiek izmantoti Makefiles izveidošanai un samazina efektivitātes uzlabošanas sarežģītību.
Šajā apmācībā mēs īpaši apspriedīsim Linux kodola Makefiles Kconfig un Kbuild.
Pirms mēs sākam, ir labi atzīmēt, ka šajā rakstā nav izlikšanās, ka mācītu visu par kodola veidošanas sistēmu. Tomēr mēs sniedzam augsta līmeņa pārskatu par vmlinux attēla un moduļu izveidi.
Ja vēlaties saņemt informāciju, kas nav šīs apmācības darbības joma, labākai informācijai iesakām šo resursu:
https: // linkfy.to / goMakefilesDocs
https: // linkfy.uz / gnuMake
Kodola Makefiles: pārskats
Kodola veidošanas sistēma, saukta arī par konfigurēšanas sistēmu, ir būtisks rīks tiem, kam tā nepieciešama, un tā ir bijusi jau kādu laiku. Tomēr ne visi izmantos šo sistēmu; pat draiveri un citi zema līmeņa programmatūras izstrādātāji to reti izmanto. Tā kā jūs to lasāt, tas nozīmē, ka vēlaties uzzināt vairāk par kodola veidošanas sistēmu.
Tādējādi mēs apspriedīsim, kā tiek apkopots kodols, un apspriedīsim Kbuild un Kconfig sistēmu, lai jūs varētu labāk tos saprast.
Kodola Makefile ir pieci galvenie komponenti:
- Makefile: Šis ir top make fails, kas atrodas avota saknē.
- arch / $ (ARCH) Makefile: Šī ir arka Makefile; tas darbojas kā top Makefile papildinājums.
- .config: Šis ir kodola konfigurācijas fails.
- Skripti / Makefile.*: Tas nosaka noteiktos noteikumus visiem kbuild Makefiles.
- Kbuild Makefiles: Makefiles ir aptuveni 500 kbuild, un tās nav ļoti viegli lasīt. Apsveriet failu, piemēram:
https: // eliksīrs.bootlin.com / linux / latest / source / scripts / Kbuild.iekļaut
Kconfig
Kconfig failā ir moduļi, kas palīdz izmantot make * config. Tas palīdz kodolam veikt selektīvas konfigurācijas, radot modularitāti un pielāgojamību kodola veidošanas procesam.
Kconfig sistēmā ir norādīti dažādi konfigurācijas mērķi. Lai skatītu pieejamos mērķus, varat izmantot palīdzību make. Šos mērķus apstrādā dažādas programmas, kuras būvniecības laikā nodrošina kodols.
Daži no Kconfig mērķiem ietver:
- Konfigurēt: To izmanto, lai atjauninātu kodola konfigurācijas failu, izmantojot līnijas programmu.
- Menuconfig: Šī ir Kconfig funkcija vai mehānisms, kas piedāvā uz izvēlnes balstītu piekļuvi kodola opcijām. Lai palaistu menuconfig un citas Kconfig funkcijas, jums jāatrodas platformas projekta direktorijā. Lai palaistu funkciju Kconfig menuconfig, varat izmantot sekojošo. Tomēr jūs varat arī palaist menuconfig ar citām GUI Linux kodola konfigurācijas funkcijām, piemēram, xconfig un gconfig. padarīt linux-windriver.menuconfig - izpilda menuconfig atsevišķā termināla sesijā.
- gconfig un xconfig: Gconfig aktivizē GUI balstītas Linux kodola funkcijas. Gconfig izmanto GTK vai uz X balstītu lietotāja interfeisu. No otras puses, Xconfig izmanto Qt balstītu lietotāja interfeisu. Izmantojiet šādas komandas, lai palaistu attiecīgi gconfig un xconfig:
padarīt linux-windriver.xconfig
PIEZĪME: Lai izmantotu gconfig un xconfig, resursdatora sistēmā jābūt instalētiem QT izstrādes rīkiem.
- Nconfig: Funkcija Nconfig palaiž pašreizējo konfigurāciju (Buildtools) un attiecas uz Ncurses izvēlnes vadīto programmu. Tas ļauj, veidojot kodolu, izvēlēties paketes, kuras veidot, piemēram, CPU, draiverus un failu sistēmu. Izmantojiet komandu: make nconfig.
- Oldconfig: Funkcija oldconfig ļauj piemērot jaunāku .konfigurācijas faili vecākiem kodola konfigurācijas failiem. Piemēram, vecs .konfigurācijas fails un jaunāks .config failā (jaunākā kodola versijā) būs atšķirības, kas nozīmē, ka pirms kodola izveidošanas jums jāatjaunina pašreizējā konfigurācija. Varat izmantot make oldconfig, lai interaktīvi atjauninātu veco konfigurāciju, piemērojot opcijas, kas trūkst vecajā konfigurācijas failā.
- Defconfig: Šī funkcija ļauj kodola uzbūves sistēmai pievienot jaunu konfigurāciju, ko piegādā defconfig .konfigurācijas fails. Precīzāk, Kbuild sistēma pārbauda visus Kconfig failus. Ja defconfig failā norāda opciju, sistēma Kbuild izmanto norādīto vērtību, lai opcijai pievienotu .konfigurēt. Ja defconfig opcija nav pieminēta, Kbuild izmanto noklusējuma vērtības .konfigurēt.
Apsveriet sekojošo:
Defconfig koda momentuzņēmums no šī resursa:
https: // eliksīrs.bootlin.com / linux / v5.9 / source / scripts / kconfig / Makefile # L98
1. defconfig: $ (obj) / conf2. ifneq ($ (aizstājējzīme $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Noklusējuma konfigurācija ir balstīta uz '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. cits
6. @ $ (kecho) "*** Noklusējuma konfigurācija ir balstīta uz mērķi '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. endif
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (aizstājējzīme $ (srctree) / kodols / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (ja $ (call configfiles) ,, $ (kļūda Šim mērķim šajā arhitektūrā nav konfigurācijas))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skripti / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig
Oldconfig koda momentuzņēmums no šī resursa:
https: // eliksīrs.bootlin.com / linux / v5.9 / source / scripts / kconfig / conf.c # L694
1. gadījums olddefconfig:2. noklusējums:
3. pārtraukums;
4.
5.
6. ja (input_mode == savedefconfig)
7. ja (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Kļūda saglabājot defconfig uz:% s \ n \ n",
9. defconfig_file);
10. atgriezties 1;
11.
12. else if (ievades_režīms != listnewconfig && input_mode != helpnewconfig)
13. ja (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Kļūda, rakstot konfigurāciju.\ n \ n ");
15. izeja (1);
16.
17.
18. / *
19. * Izveidot automātisko.konf, ja tāda nav.
20. * Tas novērš GNU Make 4.1 vai vecāki no izstarošanas
21. * "include / config / auto.conf: Nav šāda faila vai direktorija "
22. * augstākā līmeņa Makefile
23. *
24. * syncconfig vienmēr izveido vai atjaunina automātisko.konf, jo tā ir
25. * izmantots būvēšanas laikā.
26. * /
27. ja (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Kļūda konfigurācijas sinhronizācijas laikā.\ n \ n ");
30. atgriezties 1;
31.
32.
33. atgriešanās 0;
34.
- Savedefconfig: Šis noteikums ietaupa pašreizējo .konfigurēt ./ defconfig, kas tiek uzskatīts par minimālu konfigurācijas failu. Izmantojiet komandu: make savedefconfig
- Listnewconfig: To izmanto, lai uzskaitītu jaunas opcijas.
- Kvmconfig: Tas ļauj iespējot KVM atbalstu. Izmantojiet komandu: make kvm_guest.konfigurēt
- Allyesconfig: Tas izveido jaunu kodola konfigurācijas failu ar visām opcijām, kas iestatītas uz jā. Tas ir pretējs allnoconfig.
- Allmodconfig: Tas izveido jaunu kodola konfigurāciju, kurā moduļi ir iespējoti pēc noklusējuma.
- Randconfig: Tas izveido jaunu kodola konfigurācijas failu ar nejaušām atbildēm uz visām opcijām.
- Tinyconfig: Tas padara iespējami mazāko kodolu.
Kconfig sistēmā ir daudz mērķu. Dažas no tām ir config un menuconfig.
Kā jau minēts, mērķus apstrādā dažādas programmas resursdatora sistēmās, nodrošinot GUI vai komandrindu. Kconfig rīkus var atrast kodola avotā mapē / scripts / Kconfig.
https: // eliksīrs.bootlin.com / linux / latest / source / scripts / kconfig
https: // eliksīrs.bootlin.com / linux / latest / source / scripts / kconfig / Makefile
Pirmais process parasti ir Kconfig faila nolasīšana saknes direktorijā, kas tiek izmantots sākotnējās konfigurācijas datu bāzes izveidošanai. Turpinot procesu, datu bāze tiek atjaunināta, lasot failus šādā secībā:
.konfigurēt/ lib / moduļi / $ (apvalks, uname-r) /.konfigurēt
/ etc / kernel-config
/ boot / config - $ (apvalks, uname-r)
ARCH_DEFCONFIG
arch / $ (ARCH) / defconfig
.konfigurācijas fails tiek nomests uz syncconfig, kas akceptē .konfigurācijas fails kā ievade. Tas apstrādā failu un izvada failus, kurus pēc tam klasificē dažādās kategorijās, piemēram:
- autoconf.h: To izmanto C valodas avota failiem.
- auto.konf un tristate.konf: Tie tiek izmantoti Makefile teksta apstrādei.
- / ietver / config: Tie ir tukši galvenes faili, kurus izmanto atkarības izsekošanā.
Kbuild faili
Gandrīz visi kodola faili ir Kbuild Makefiles, kas izmanto Kbuild infrastruktūru, kas ir rekursīva veidošanas funkcija. Rekursīvā Make ir veids, kā Makefile izmantot komandu Make kā komandu. Rekursija ir ļoti noderīga, sastādot lielu projektu.
Kbuild darbojas, atsaucoties uz visiem failiem, kurus mēs pieminējām iepriekšējā sadaļā.
Kbuild sistēma veido komponentus, izmantojot augšējo Makefile failu, kas konfigurācijas failos iekļauj arhīvu Makefiles ar nosaukumu arch / $ (ARCH) / Makefile. Rekursīvi nolaižas apakšdirektorijās, izsaucot komponentu Make, izmantojot skriptu rutīnas / Makefile.*. Pēc tam Kbuild balstās uz blakus esošo objektu un sasaista tos objektos, izveidojot vmlinux.
Lai uzzinātu vairāk par Kbuild Makefiles izmantoto sintaksi, skatiet dokumentāciju.
Apsveriet šādu skriptu.
https: // github.com / torvalds / linux / blob / master / scripts / link-vmlinux.sh
O objekta faili, ko izmanto vmlinux izveidošanai, vispirms tiek apkopoti attiecīgajā iebūvētajā failā .faili kā var KBUILD_VMLINUX_INIT, MAIN, LIBS. Tie ir komponēti vmlinux.
https: // github.com / torvalds / linux / blob / master / scripts / Makefile.būvēt
Secinājums
Šajā ceļvedī mēs apskatījām Kbuild un Kconfig sistēmas kodola būvēšanas sistēmā un kā tā darbojas. Kā mēs minējām apmācības sākumā, apspriestās tēmas ir plašas un tās nevar aplūkot vienā apmācībā.