Linux kernel

A Linux kernel makefile magyarázata

A Linux kernel makefile magyarázata
A szoftverfejlesztésben a nagy kódtárak létrehozásának és kezelésének folyamata könnyen bonyolulttá válhat.

Ennek a bonyolultságnak a kezelése és csökkentése érdekében a szoftverfejlesztők kis fájlokban rendezik a kódot, amelyek meghatározott modulokra mutatnak. A fejlesztők külön-külön összeállíthatják ezeket a fájlokat, majd összekapcsolhatják őket egy végső szoftver futtatható fájl létrehozásához.

Erre példa a forráskód fájlokból álló C projekt .c kiterjesztések és szoftverinterfészek .h kiterjesztések. Minden forrásfájlt összeállítunk a létrehozandó fejlécfájlokkal együtt. o objektumok könyvtárak segítségével összekapcsolva, ezzel futtatható fájlokat hozva létre.

Ennek a folyamatnak a végrehajtásához a szoftverfejlesztők olyan eszközöket használnak, mint például a Make, hogy automatizálják a készítési folyamatot és a szükséges fájlfüggőségeket. A Make a Makefiles programot használja az összeállítási folyamat viselkedésének kezelésére.

A GNU Make eszközök olyan szabályokat és konvenciókat tartalmaznak, amelyeket a Makefiles létrehozásához használnak, és csökkentik a hatékonyság növelésének összetettségét.

Ebben az oktatóanyagban konkrétan a Linux Kernel Makefile fájlokat tárgyaljuk Kconfig és Kbuild.

Mielőtt elkezdenénk, jó megjegyezni, hogy ez a cikk nem úgy tesz, mintha mindent megtanítana a Kernel Build rendszerről. Magas szintű áttekintést nyújtunk azonban a vmlinux kép és modulok felépítéséről.

Ha olyan információkat szeretne, amelyek meghaladják az oktatóanyag alkalmazási körét, a jobb információ érdekében a következő forrást javasoljuk:

https: // linkfy.to / goMakefilesDocs

https: // linkfy.to / gnuMake

Kernel Makefiles: Áttekintés

A Kernel Build System, más néven konfigurációs rendszer, elengedhetetlen eszköz azok számára, akiknek szüksége van rá - ez már egy ideje létezik. Ezt a rendszert azonban nem mindenki fogja használni; még az illesztőprogramok és más alacsony szintű szoftverfejlesztők is ritkán használják. Mivel ezt olvassa, ez azt jelenti, hogy többet szeretne megtudni a Kernel Build Rendszerről.

Így megvitatjuk, hogyan állítja össze a kernel, és megbeszéljük a Kbuild és a Kconfig rendszert, hogy jobban megértsd őket.

A Kernel Makefile öt fő összetevőből áll:

  1. Makefile: Ez a legfelső make fájl, amely a forrásgyökérben található.
  2. arch / $ (ARCH) Makefile: Ez a Makefile ív; a top Makefile kiegészítéseként működik.
  3. .config: Ez a Kernel konfigurációs fájl.
  4. Szkriptek / Makefile.*: Ez meghatározza az összes kbuild Makefile fájlra vonatkozó szabályokat.
  5. Kbuild Makefiles: Körülbelül 500 kbuild Makefile van, és ezeket nem túl könnyű elolvasni. Vegyünk egy olyan fájlt, mint például:

https: // elixír.bootlin.com / linux / latest / source / scripts / Kbuild.tartalmazza

Kconfig

A Kconfig fájl olyan modulokat tartalmaz, amelyek segítséget nyújtanak a make * config használatakor. Segít a kernelnek a szelektív konfigurációkban, modularitást és testreszabhatóságot teremtve a kernel felépítési folyamatához.

Különböző konfigurációs célokat határoz meg a Kconfig rendszer. A make help segítségével megtekintheti az elérhető célokat. Ezeket a célokat a kernel által biztosított különféle programok dolgozzák fel az összeállítás során.

Néhány Kconfig célpont a következőket tartalmazza:

hogy linux-windriver.gconfig
hogy linux-windriver.xconfig

JEGYZET: A gconfig és az xconfig használatához telepíteni kell a QT fejlesztőeszközöket a gazdagépre.

Tekintsük a következő:

Defconfig kód pillanatkép a következő erőforrásból:

https: // elixír.bootlin.com / linux / v5.9 / forrás / szkriptek / kconfig / Makefile # L98

1. defconfig: $ (obj) / conf
2. ifneq ($ (helyettesítő karakter $ (srctree) / arch / $ (SRCARCH) / configs / $ (KBUILD_DEFCONFIG)),)
3. @ $ (kecho) "*** Az alapértelmezett konfiguráció '$ (KBUILD_DEFCONFIG)' 'alapú
4. $ (Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
5. más
6. @ $ (kecho) "*** Az alapértelmezett konfiguráció a" $ (KBUILD_DEFCONFIG) "célon alapul
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 = $ (helyettesítő karakter $ (srctree) / kernel / configs / $ @ $ (srctree) / arch / $ (SRCARCH) / configs / $ @)
14.
15. %.config: $ (obj) / conf
16. $ (ha $ (call configfiles) ,, $ (hiba Nincs konfiguráció ehhez a célhoz ezen az architektúrán))
17. $ (Q) $ (CONFIG_SHELL) $ (srctree) / scripts / kconfig / merge_config.sh -m .config $ (configfiles)
18. $ (Q) $ (MAKE) -f $ (srctree) / Makefile olddefconfig

Oldconfig kód pillanatkép a következő erőforrásból:

https: // elixír.bootlin.com / linux / v5.9 / forrás / szkriptek / kconfig / konf.c # L694

1. case olddefconfig:
2. alapértelmezett:
3. szünet;
4.
5.
6. if (input_mode == savedefconfig)
7. if (conf_write_defconfig (defconfig_file))
8. fprintf (stderr, "n *** Hiba a defconfig mentésekor:% s \ n \ n",
9. defconfig_file);
10. return 1;
11.
12. else if (input_mode != listnewconfig && input_mode != helpnewconfig)
13. ha (!no_conf_write && conf_write (NULL))
14. fprintf (stderr, "\ n *** Hiba a konfiguráció írása közben.\ n \ n ");
15. kilépés (1);
16.
17.
18. / *
19. * Automatikus létrehozás.konf, ha nem létezik.
20. * Ez megakadályozza a GNU Make 4-et.1 vagy annál idősebb a kibocsátástól
21. * "include / config / auto.conf: Nincs ilyen fájl vagy könyvtár "
22. * a legfelső szintű Makefile-ben
23. *
24. * A syncconfig mindig létrehoz vagy frissít automatikus.konf, mert az
25. * az építés során használt.
26. * /
27. if (conf_write_autoconf (sync_kconfig) && sync_kconfig)
28. fprintf (stderr,
29. "\ n *** Hiba a konfiguráció szinkronizálása közben.\ n \ n ");
30. visszatér 1;
31.
32.
33. visszatér 0;
34.

Nagyon sok célpont van a Kconfig rendszerben. Néhány gyakori a config és a menuconfig.

Mint említettük, a célokat a gazda rendszerek különféle programjai dolgozzák fel, akár GUI-t, akár parancssort biztosítva. A Kconfig eszközök a / scripts / Kconfig könyvtárban találhatók a kernelforrásban.

https: // elixír.bootlin.com / linux / latest / source / scripts / kconfig

https: // elixír.bootlin.com / linux / latest / source / scripts / kconfig / Makefile

Az első folyamat általában a gyökérkönyvtárban található Kconfig fájl beolvasása, amelyet egy kezdeti konfigurációs adatbázis létrehozására használnak. A folyamat folytatásával az adatbázis a fájlok olvasása során a következő sorrendben frissül:

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

.A config fájl ekkor a syncconfig fájlra esik, amely elfogadja a .config fájl bemenetként. Feldolgozza a fájlt és kimeneti fájlokat, amelyeket aztán különféle kategóriákba sorolnak, például:

Kbuild Files

Szinte az összes Kernel fájl Kbuild Makefile, amely a Kbuild infrastruktúrát használja, amely egy rekurzív gyártási funkció. A Rekurzív Make segítségével a Make eszközt parancsként használhatjuk a Makefile-ban. A rekurzió nagyon hasznos egy nagy projekt összeállításakor.

A Kbuild úgy működik, hogy hivatkozik az összes fájlra, amelyet a fenti szakaszban említettünk.

A Kbuild rendszer az összetevőket a legfelső Makefile segítségével építi fel, amely tartalmazza a Makefiles archot az arch / $ (ARCH) / Makefile névvel a konfigurációs fájlokban. Rekurzívan leszáll az alkönyvtárakba, a szkriptek / Makefile rutinok használatával a komponensek Make-ját hívva meg.*. Ezután a Kbuild a szomszédos objektumra épít, és objektumokhoz kapcsolja őket, létrehozva a vmlinuxot.

Ha többet szeretne megtudni a Kbuild Makefiles szintaxisáról, olvassa el a dokumentációt.

Vegye figyelembe a következő szkriptet.

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

A vmlinux létrehozásához használt o objektum fájlokat először a saját beépített fájljukban fordítják le .a fájlok a KBUILD_VMLINUX_INIT, MAIN, LIBS változóként. Ezeket vmlinux-ban állítják össze.

https: // github.com / torvalds / linux / blob / master / scripts / Makefile.épít

Következtetés

Ebben az útmutatóban megvizsgáltuk a Kbuel és a Kconfig rendszereket a Kernel build rendszerben, és hogyan működnek. Amint azt az oktatóanyag elején említettük, a megvitatott témák tágak és nem fedhetők le egyetlen oktatóanyagban.

Az egér és az érintőpadok görgetési irányának megfordítása a Windows 10 rendszerben
Egér és Érintőpads nemcsak a számítást könnyűvé, de hatékonyabbá és kevésbé időigényessé is teszi. Nem tudunk elképzelni egy életet ezek nélkül az esz...
Az egérmutató és a kurzor méretének, színének és sémájának módosítása a Windows 10 rendszeren
Az egérmutató és a kurzor a Windows 10 operációs rendszerben nagyon fontos szempont. Ez elmondható más operációs rendszerekről is, tehát valójában eze...
Ingyenes és nyílt forráskódú játékmotorok a Linux játékok fejlesztéséhez
Ez a cikk felsorolja azokat az ingyenes és nyílt forráskódú játékmotorokat, amelyek felhasználhatók 2D és 3D játékok fejlesztésére Linuxon. Számos ily...