Linux-kerne

Linux Kernel Makefile forklaret

Linux Kernel Makefile forklaret
I softwareudvikling kan processen med at oprette og administrere store kodelager nemt blive meget kompleks.

For at administrere og reducere denne kompleksitet organiserer softwareudviklere kode i små filer, der linker til bestemte moduler. Udviklere kan kompilere hver af disse filer separat og derefter linke dem sammen for at oprette en endelig softwarekørsel.

Et eksempel på dette er C-projekter, der består af kildekodefiler i .c udvidelser og softwaregrænseflader i .h udvidelser. Hver kildefil bliver samlet sammen med de headerfiler, der skal oprettes. o objekter, der er knyttet sammen ved hjælp af biblioteker, hvorved eksekverbare filer oprettes.

For at udføre denne proces bruger softwareudviklere værktøjer, såsom Make, til at automatisere byggeprocessen og krævede filafhængigheder. Make bruger Makefiles til at styre opførelsen af ​​kompileringsprocessen.

GNU Make-værktøjerne indeholder et sæt regler og konventioner, der bruges til at oprette Makefiles og reducere kompleksiteten i forbedring af effektiviteten.

I denne vejledning vil vi specifikt diskutere Linux Kernel Makefiles Kconfig og Kbuild.

Før vi begynder, er det godt at bemærke, at denne artikel ikke foregiver at lære alt om Kernel Build-systemet. Vi giver dog et overblik på højt niveau af opbygning af et vmlinux-billede og moduler.

Hvis du ønsker oplysninger, der ligger uden for omfanget af denne tutorial, anbefaler vi følgende ressource for bedre information:

https: // linkfy.til / goMakefilesDocs

https: // linkfy.til / gnuMake

Kernel Makefiles: En oversigt

Kernel Build System, også kaldet konfigurationssystemet, er et vigtigt værktøj - for dem der har brug for det - der har eksisteret i et stykke tid. Imidlertid vil ikke alle bruge dette system; selv drivere og andre softwareudviklere på lavt niveau bruger det sjældent. Da du læser dette, betyder det, at du vil vide mere om Kernel Build System.

Således diskuterer vi, hvordan kernen bliver kompileret, og diskuterer Kbuild og Kconfig-systemet, så du kan forstå dem bedre.

Kernel Makefile har fem kernekomponenter:

  1. Makefile: Dette er den øverste fabrikatfil, der er placeret i kildens rod.
  2. arch / $ (ARCH) Makefile: Dette er buen Makefile; det fungerer som et supplement til den øverste Makefile.
  3. .config: Dette er kernekonfigurationsfilen.
  4. Scripts / Makefile.*: Dette definerer fastsatte regler for alle kbuild Makefiles.
  5. Kbuild Makefiles: Der er omkring 500 kbuild Makefiles, og de er ikke særlig lette at læse. Overvej en fil som:

https: // eliksir.bootlin.com / linux / seneste / kilde / scripts / Kbuild.omfatte

Kconfig

Kconfig-filen indeholder moduler, der hjælper med at bruge make * config. Det hjælper kernen med at lave selektive konfigurationer, hvilket skaber modularitet og tilpasning til kerneprocessen.

Der er forskellige konfigurationsmål specificeret af Kconfig-systemet. Du kan bruge hjælp til at se de tilgængelige mål. Disse mål behandles af forskellige programmer leveret af kernen under byggeprocessen.

Nogle af Kconfig-målene inkluderer:

lav linux-windriver.gconfig
lav linux-windriver.xconfig

BEMÆRK: For at bruge gconfig og xconfig skal du have QT-udviklingsværktøjerne installeret på værtssystemet.

Overvej følgende:

Defconfig kode snapshot fra følgende ressource:

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

1. defconfig: $ (obj) / conf
2. ifneq ($ (wildcard $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Standardkonfiguration er baseret på '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. andet
6. @ $ (kecho) "*** Standardkonfiguration er baseret på målet '$ (KBUILD_DEFCONFIG)'"
7. $ (Q) $ (MAKE) -f $ (srctree) / Makefile $ (KBUILD_DEFCONFIG)
8. Afslut Hvis
9.
10. % _defconfig: $ (obj) / conf
11. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
12.
13. configfiles = $ (wildcard $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (hvis $ (call configfiles) ,, $ (fejl Der findes ingen konfiguration for dette mål på denne arkitektur))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Oldconfig kode snapshot fra følgende ressource:

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

1. sag olddefconfig:
2. Standard:
3. pause;
4.
5.
6. hvis (input_mode == gemtefconfig)
7. hvis (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Fejl under lagring af defconfig til:% s \ n \ n",
9. defconfig_file);
10. returnere 1;
11.
12. ellers hvis (input_mode != listnewconfig && input_mode != helpnewconfig)
13. hvis (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Fejl under skrivning af konfigurationen.\ n \ n ");
15. udgang (1);
16.
17.
18. / *
19. * Opret automatisk.conf, hvis den ikke findes.
20. * Dette forhindrer GNU Make 4.1 eller ældre fra at udsende
21. * "inkluderer / config / auto.conf: Ingen sådan fil eller katalog "
22. * i Makefile på øverste niveau
23. *
24. * syncconfig opretter eller opdaterer altid automatisk.conf fordi det er
25. * brugt under build.
26. * /
27. hvis (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Fejl under synkronisering af konfigurationen.\ n \ n ");
30. returnere 1;
31.
32.
33. returnere 0;
34.

Der er mange mål i Kconfig-systemet. Nogle almindelige inkluderer config og menuconfig.

Som nævnt behandles målene af forskellige programmer i værtssystemerne, enten med en GUI eller kommandolinje. Du kan finde Kconfig-værktøjer i / scripts / Kconfig i kernekilden.

https: // eliksir.bootlin.com / linux / seneste / kilde / scripts / kconfig

https: // eliksir.bootlin.com / linux / nyeste / source / scripts / kconfig / Makefile

Den første proces er normalt at læse Kconfig-filen i rodmappen, som bruges til at oprette en indledende konfigurationsdatabase. Efterhånden som processen fortsætter, opdateres databasen, når filer læses i følgende rækkefølge:

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

.config-fil droppes derefter til syncconfig, som accepterer .konfigurationsfil som input. Det behandler filen og output filer, som derefter klassificeres i forskellige kategorier såsom:

Kbuild Files

Næsten alle Kernel-filer er Kbuild Makefiles, der bruger Kbuild-infrastrukturen, som er en rekursiv make-funktion. Rekursivt Make er en måde at bruge Make-værktøjet på som en kommando i en Makefile. Rekursion er meget nyttig ved kompilering af et stort projekt.

Kbuild fungerer ved at henvise til alle de filer, vi nævnte i ovenstående afsnit.

Kbuild-systemet bygger sine komponenter ved hjælp af den øverste Makefile, der inkluderer buen Makefiles med navnet arch / $ (ARCH) / Makefile i konfigurationsfilerne. Det falder rekursivt ned i underkataloger, der påberåber sig Make på komponenterne ved hjælp af rutinerne i scripts / Makefile.*. Kbuild bygger derefter på det tilstødende objekt og forbinder dem til objekter, hvilket skaber vmlinux.

For at lære mere om syntaksen, der bruges i Kbuild Makefiles, henvises til dokumentationen.

Overvej følgende script.

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

O-objektfiler, der bruges til at oprette vmlinux, kompileres først i deres respektive indbyggede .a filer som var KBUILD_VMLINUX_INIT, MAIN, LIBS. Disse er sammensat i vmlinux.

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

Konklusion

I denne vejledning kiggede vi på Kbuild- og Kconfig-systemer i Kernel-byggesystemet, og hvordan det fungerer. Som vi nævnte i begyndelsen af ​​tutorialen, er de diskuterede emner brede og kan ikke dækkes i en enkelt tutorial.

Mus Styr og administrer musebevægelse mellem flere skærme i Windows 10
Styr og administrer musebevægelse mellem flere skærme i Windows 10
Dual Display Mouse Manager lader dig kontrollere og konfigurere musebevægelse mellem flere skærme ved at bremse dens bevægelser nær grænsen. Windows 1...
Mus WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
Hvis du vil forbedre standardfunktionerne for din musemarkør, skal du bruge freeware WinMouse. Det tilføjer flere funktioner, der hjælper dig med at f...
Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...