Linux-kärna

Linux Kernel Makefile förklaras

Linux Kernel Makefile förklaras
Vid mjukvaruutveckling kan processen att skapa och hantera stora kodförråd lätt bli mycket komplex.

För att hantera och minska denna komplexitet organiserar programutvecklare kod i små filer som länkar till specifika moduler. Utvecklare kan sammanställa var och en av dessa filer separat och sedan koppla ihop dem för att skapa en slutlig programkörbar körning.

Ett exempel på detta är C-projekt som består av källkodsfiler i .c tillägg och mjukvarugränssnitt i .h-tillägg. Varje källfil sammanställs tillsammans med rubrikfilerna för att skapa. o objekt länkade ihop med hjälp av bibliotek, vilket skapar körbara filer.

För att utföra denna process använder programvaruutvecklare verktyg som Make för att automatisera byggprocessen och nödvändiga filberoende. Make använder Makefiles för att hantera sammanställningsprocessen.

GNU Make-verktygen tillhandahåller en uppsättning regler och konventioner som används för att skapa Makefiles och minska komplexiteten för att förbättra effektiviteten.

I denna handledning diskuterar vi specifikt Linux Kernel Makefiles Kconfig och Kbuild.

Innan vi börjar är det bra att notera att den här artikeln inte låtsas lära allt om Kernel Build-systemet. Vi ger dock en högnivåöversikt över hur man bygger en vmlinux-avbildning och moduler.

Om du vill ha information utanför ramen för denna handledning rekommenderar vi följande resurs för bättre information:

https: // linkfy.till / goMakefilesDocs

https: // linkfy.till / gnuMake

Kernel Makefiles: En översikt

Kernel Build-systemet, även kallat konfigurationssystemet, är ett viktigt verktyg - för dem som behöver det - som har funnits ett tag. Men inte alla kommer att använda detta system; även drivrutiner och andra programutvecklare på låg nivå använder det sällan. Eftersom du läser detta betyder det att du vill veta mer om Kernel Build System.

Således kommer vi att diskutera hur Kärnan sammanställs och diskutera Kbuild och Kconfig-systemet så att du kan förstå dem bättre.

Kernel Makefile har fem kärnkomponenter:

  1. Makefile: Det här är den översta märkesfilen som finns i källroten.
  2. arch / $ (ARCH) Makefile: Detta är bågen Makefile; det fungerar som ett komplement till den bästa Makefile.
  3. .konfigurera: Detta är Kernel-konfigurationsfilen.
  4. Skript / Makefile.*: Detta definierar fastställda regler för alla kbuild Makefiles.
  5. Kbuild Makefiles: Det finns cirka 500 kbuild Makefiles, och de är inte så lätta att läsa. Tänk på en fil som:

https: // elixir.bootlin.com / linux / senaste / källa / skript / Kbuild.omfatta

Kconfig

Kconfig-filen innehåller moduler som hjälper till när du använder make * config. Det hjälper kärnan att göra selektiva konfigurationer, vilket skapar modularitet och anpassningsbarhet för Kernel-byggprocessen.

Det finns olika konfigurationsmål som anges av Kconfig-systemet. Du kan använda hjälp för att visa tillgängliga mål. Dessa mål bearbetas av olika program som tillhandahålls av kärnan under byggprocessen.

Några av Kconfigs mål inkluderar:

gör linux-windriver.gconfig
gör linux-windriver.xconfig

NOTERA: För att använda gconfig och xconfig bör du ha QT-utvecklingsverktygen installerade på värdsystemet.

Tänk på följande:

Defconfig-kod ögonblicksbild från följande resurs:

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

1. defconfig: $ (obj) / conf
2. ifneq ($ (jokertecken $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Standardkonfiguration baseras på '$ (KBUILD_DEFCONFIG)'"
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. annan
6. @ $ (kecho) "*** Standardkonfigurationen baseras på målet '$ (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 = $ (jokertecken $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (om $ (call configfiles) ,, $ (fel Det finns ingen konfiguration för detta mål i den här arkitekturen))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / skript / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Oldconfig kod ögonblicksbild från följande resurs:

https: // elixir.bootlin.com / linux / v5.9 / källa / skript / kconfig / conf.c # L694

1. fall olddefconfig:
2. standard:
3. ha sönder;
4.
5.
6. om (input_mode == sparadefconfig)
7. om (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Fel när defconfig sparades till:% s \ n \ n",
9. defconfig_file);
10. retur 1;
11.
12. annat om (input_mode != listnewconfig && input_mode != helpnewconfig)
13. om (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Fel vid skrivning av konfigurationen.\ n \ n ");
15. utgång (1);
16.
17.
18. / *
19. * Skapa auto.conf om det inte finns.
20. * Detta förhindrar GNU Make 4.1 eller äldre från att släppa ut
21. * "include / config / auto.conf: Ingen sådan fil eller katalog "
22. * i Makefile på toppnivå
23. *
24. * syncconfig skapar eller uppdaterar alltid automatiskt.conf eftersom det är
25. * används under byggnaden.
26. * /
27. om (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Fel under konfigurationen.\ n \ n ");
30. retur 1;
31.
32.
33. returnera 0;
34.

Det finns många mål i Kconfig-systemet. Några vanliga inkluderar config och menuconfig.

Som nämnts bearbetas målen av olika program i värdsystemen, antingen som en GUI eller en kommandorad. Du hittar Kconfig-verktyg i / scripts / Kconfig i kärnkällan.

https: // elixir.bootlin.com / linux / senaste / källa / skript / kconfig

https: // elixir.bootlin.com / linux / senaste / källa / skript / kconfig / Makefile

Den första processen är vanligtvis att läsa Kconfig-filen i rotkatalogen, som används för att bygga en initial konfigurationsdatabas. När processen fortsätter uppdateras databasen när du läser filer i följande ordning:

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

.config-filen släpps sedan till syncconfig, vilket accepterar .konfigurationsfil som inmatning. Den behandlar filen och matar ut filer, som sedan klassificeras i olika kategorier som:

Kbuild Files

Nästan alla Kernel-filer är Kbuild Makefiles som använder Kbuild-infrastrukturen, vilket är en rekursiv make-funktion. Rekursivt Make är ett sätt att använda verktyget Make som ett kommando i en Makefile. Rekursion är mycket användbart när man sammanställer ett stort projekt.

Kbuild fungerar genom att hänvisa till alla filer som vi nämnde i ovanstående avsnitt.

Kbuild-systemet bygger sina komponenter med den översta Makefile som innehåller arch Makefiles med namnet arch / $ (ARCH) / Makefile i konfigurationsfilerna. Det faller rekursivt ner i underkataloger som anropar Make på komponenterna med hjälp av rutinerna i skript / Makefile.*. Kbuild bygger sedan på det intilliggande objektet och länkar dem till objekt och skapar vmlinux.

Mer information om syntaxen som används i Kbuild Makefiles finns i dokumentationen.

Tänk på följande manus.

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

O-objektfilerna som används för att skapa vmlinux sammanställs först i respektive inbyggda .a filer som var KBUILD_VMLINUX_INIT, MAIN, LIBS. Dessa är sammansatta i vmlinux.

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

Slutsats

I den här guiden tittade vi på Kbuild- och Kconfig-system i Kernel-byggsystemet och hur det fungerar. Som vi nämnde i början av handledningen är de diskuterade ämnena breda och kan inte behandlas i en enda handledning.

Mus Topp 5 Ergonomiska datormusprodukter för Linux
Topp 5 Ergonomiska datormusprodukter för Linux
Ger långvarig datoranvändning smärta i handleden eller fingrarna? Lider du av styva leder och måste ständigt skaka hand? Känner du en brännande smärta...
Mus Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
De flesta Linux-distributioner levereras med "libinput" -bibliotek som standard för att hantera inmatningshändelser i ett system. Den kan bearbeta inm...
Mus Omforma dina musknappar på olika sätt för olika program med X-Mouse Button Control
Omforma dina musknappar på olika sätt för olika program med X-Mouse Button Control
Kanske behöver du ett verktyg som kan göra att musens kontroll ändras med alla applikationer som du använder. Om så är fallet kan du prova en ansökan ...