Linux-kjernen

Linux Kernel Makefile forklart

Linux Kernel Makefile forklart
I programvareutvikling kan prosessen med å opprette og administrere store kodelager bli veldig komplisert.

For å administrere og redusere denne kompleksiteten organiserer programvareutviklere kode i små filer som lenker til bestemte moduler. Utviklere kan kompilere hver av disse filene hver for seg og deretter koble dem sammen for å lage en endelig programvare kjørbar.

Et eksempel på dette er C-prosjekter som består av kildekodefiler i .c utvidelser og programvaregrensesnitt i .h utvidelser. Hver kildefil blir samlet sammen med headerfilene som skal opprettes. o objekter koblet sammen ved hjelp av biblioteker, og derved skaper kjørbare filer.

For å utføre denne prosessen bruker programvareutviklere verktøy, for eksempel Make, for å automatisere byggeprosessen og nødvendige filavhengigheter. Make bruker Makefiles for å styre oppførselen til kompileringsprosessen.

GNU Make-verktøyene gir et sett med regler og konvensjoner som brukes til å lage Makefiles og reduserer kompleksiteten i å forbedre effektiviteten.

I denne opplæringen vil vi diskutere Linux Kernel Makefiles, spesielt Kconfig og Kbuild.

Før vi begynner, er det godt å merke seg at denne artikkelen ikke later til å lære alt om Kernel Build-systemet. Imidlertid gir vi en oversikt på høyt nivå om å bygge et vmlinux-bilde og moduler.

Hvis du vil ha informasjon utenfor omfanget av denne opplæringen, anbefaler vi følgende ressurs for bedre informasjon:

https: // linkfy.til / goMakefilesDocs

https: // linkfy.til / gnuMake

Kernel Makefiles: En oversikt

Kernel Build System, også kalt config-systemet, er et viktig verktøy - for de som trenger det - som har eksistert en stund. Imidlertid vil ikke alle bruke dette systemet; selv drivere og andre programvareutviklere på lavt nivå bruker det sjelden. Siden du leser dette, betyr det at du vil vite mer om Kernel Build System.

Dermed vil vi diskutere hvordan kjernen blir samlet og diskutere Kbuild og Kconfig-systemet slik at du kan forstå dem bedre.

Kernel Makefile har fem kjernekomponenter:

  1. Makefile: Dette er den øverste merkefilen som ligger i kilderoten.
  2. arch / $ (ARCH) Makefile: Dette er buen Makefile; det fungerer som et supplement til toppen Makefile.
  3. .config: Dette er kjernekonfigurasjonsfilen.
  4. Skript / Makefile.*: Dette definerer fastsatte regler for alle kbuild Makefiles.
  5. Kbuild Makefiles: Det er omtrent 500 kbuild Makefiles, og de er ikke veldig enkle å lese. Vurder en fil som:

https: // eliksir.bootlin.no / linux / siste / kilde / skript / Kbuild.inkludere

Kconfig

Kconfig-filen inneholder moduler som hjelper når du bruker make * config. Det hjelper kjernen med å lage selektive konfigurasjoner, og skaper modularitet og tilpassbarhet for byggeprosessen til kjernen.

Det er forskjellige konfigurasjonsmål spesifisert av Kconfig-systemet. Du kan bruke hjelpen til å vise tilgjengelige mål. Disse målene behandles av forskjellige programmer levert av kjernen under byggeprosessen.

Noen av Kconfig-målene inkluderer:

lage linux-windriver.gconfig
lage linux-windriver.xconfig

MERK: For å bruke gconfig og xconfig, bør du ha QT-utviklingsverktøyene installert på vertssystemet.

Vurder følgende:

Defconfig kode øyeblikksbilde fra følgende ressurs:

https: // eliksir.bootlin.no / linux / v5.9 / kilde / skript / kconfig / Makefile # L98

1. defconfig: $ (obj) / conf
2. ifneq ($ (jokertegn $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Standardkonfigurasjon er basert på '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. ellers
6. @ $ (kecho) "*** Standardkonfigurasjon er basert på målet '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. slutt om
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
1. 3. configfiles = $ (jokertegn $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (hvis $ (call configfiles) ,, $ (feil Ingen konfigurasjon eksisterer for dette målet på denne arkitekturen))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skript / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Oldconfig kode øyeblikksbilde fra følgende ressurs:

https: // eliksir.bootlin.com / linux / v5.9 / kilde / skript / kconfig / conf.c # L694

1. sak olddefconfig:
2. misligholde:
3. gå i stykker;
4.
5.
6. hvis (input_mode == savedefconfig)
7. hvis (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Feil under lagring av defconfig til:% s \ n \ n",
9. defconfig_file);
10. retur 1;
11.
12. ellers hvis (input_mode != listnewconfig && input_mode != helpnewconfig)
1. 3. hvis (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Feil under skriving av konfigurasjonen.\ n \ n ");
15. utgang (1);
16.
17.
18. / *
19. * Opprett auto.conf hvis den ikke eksisterer.
20. * Dette forhindrer GNU Make 4.1 eller eldre fra å sende ut
21. * "inkluderer / config / auto.conf: Ingen slik fil eller katalog "
22. * i Makefile på toppnivå
23. *
24. * syncconfig oppretter eller oppdaterer alltid automatisk.conf fordi det er
25. * brukt under byggingen.
26. * /
27. hvis (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Feil under synkronisering av konfigurasjonen.\ n \ n ");
30. retur 1;
31.
32.
33. retur 0;
34.

Det er mange mål i Kconfig-systemet. Noen vanlige inkluderer config og menuconfig.

Som nevnt behandles målene av forskjellige programmer i vertssystemene, enten med en GUI eller kommandolinje. Du finner Kconfig-verktøy i / scripts / Kconfig i kjernekilden.

https: // eliksir.bootlin.no / linux / siste / kilde / skript / kconfig

https: // eliksir.bootlin.no / linux / siste / kilde / skript / kconfig / Makefile

Den første prosessen er vanligvis å lese Kconfig-filen i rotkatalogen, som brukes til å bygge en innledende konfigurasjonsdatabase. Etter hvert som prosessen fortsetter, oppdateres databasen når du leser filer i følgende rekkefølge:

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

.config-filen slippes deretter til syncconfig, som godtar .konfigurasjonsfil som inndata. Den behandler filen og sender ut filer, som deretter klassifiseres i forskjellige kategorier som:

Kbuild Files

Nesten alle kjernefiler er Kbuild Makefiles som bruker Kbuild-infrastrukturen, som er en rekursiv merkefunksjon. Recursive Make er en måte å bruke Make-verktøyet som en kommando i en Makefile. Rekursjon er veldig nyttig når du kompilerer et stort prosjekt.

Kbuild fungerer ved å referere til alle filene vi nevnte i avsnittet ovenfor.

Kbuild-systemet bygger komponentene ved hjelp av den øverste Makefile som inkluderer buen Makefiles med navnet arch / $ (ARCH) / Makefile i konfigurasjonsfilene. Den faller rekursivt ned i underkataloger som påkaller Make på komponentene ved hjelp av rutinene i skript / Makefile.*. Kbuild bygger deretter på det tilstøtende objektet og kobler dem til objekter, og skaper vmlinux.

For å lære mer om syntaksen som brukes i Kbuild Makefiles, se dokumentasjonen.

Tenk på følgende manus.

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

O-objektfilene som brukes til å lage vmlinux, blir først samlet i deres respektive innebygde .en filer som var KBUILD_VMLINUX_INIT, MAIN, LIBS. Disse er komponert i vmlinux.

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

Konklusjon

I denne guiden tok vi en titt på Kbuild- og Kconfig-systemene i Kernel-byggesystemet og hvordan det fungerer. Som vi nevnte i begynnelsen av opplæringen, er emnene som er diskutert brede og kan ikke dekkes i en enkelt opplæring.

Gratis og åpen kildekode-spillmotorer for utvikling av Linux-spill
Denne artikkelen vil dekke en liste over gratis og open source-spillmotorer som kan brukes til å utvikle 2D- og 3D-spill på Linux. Det er mange slike ...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...
Hvordan øke FPS i Linux?
FPS står for Bilder per sekund. FPSs oppgave er å måle bildefrekvensen i videoavspilling eller spillprestasjoner. Med enkle ord betegnes antall uavbru...