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:
- Makefile: Ez a legfelső make fájl, amely a forrásgyökérben található.
- arch / $ (ARCH) Makefile: Ez a Makefile ív; a top Makefile kiegészítéseként működik.
- .config: Ez a Kernel konfigurációs fájl.
- Szkriptek / Makefile.*: Ez meghatározza az összes kbuild Makefile fájlra vonatkozó szabályokat.
- 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:
- Konfig: Ez a kernel konfigurációs fájljának frissítésére szolgál a sorprogram segítségével.
- Menuconfig: Ez egy Kconfig szolgáltatás vagy mechanizmus, amely menüalapú hozzáférést kínál a Kernel opcióihoz. A menuconfig és más Kconfig szolgáltatások elindításához a platform projektkönyvtárában kell tartózkodnia. Az alábbiak segítségével indíthatja el a Kconfig menuconfig szolgáltatást. Ugyanakkor elindíthatja a menuconfig más GUI Linux Kernel konfigurációs szolgáltatásokkal is, például az xconfig és a gconfig. hogy linux-windriver.menuconfig - A menuconfig végrehajtása egy külön terminál munkamenetben.
- gconfig és xconfig: A Gconfig aktiválja a GUI-alapú Linux kernel funkciókat. A Gconfig a GTK vagy (X alapú) alapú felhasználói felületet használja. Másrészt az Xconfig Qt-alapú felhasználói felületet használ. Használja a következő parancsokat a gconfig és az xconfig elindításához:
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.
- Nconfig: Az Nconfig szolgáltatás futtatja az aktuális konfigurációt (Buildtools), és az Ncurses menü által vezérelt programra vonatkozik. Ez lehetővé teszi, hogy kiválassza a felépítendő csomagokat, például a CPU-t, az illesztőprogramokat és a fájlrendszert a kernel felépítésekor. Használja a következő parancsot: make nconfig.
- Oldconfig: A oldconfig szolgáltatás lehetővé teszi újabbak alkalmazását .konfigurációs fájlok régebbi kern konfigurációs fájlok. Például egy régi .config fájlt és egy újabbat .A config fájlnak (újabb kernelváltozat) eltérései lesznek, vagyis a kernel felépítése előtt frissítenie kell az aktuális konfigurációt. A make oldconfig segítségével frissítheti a régi konfigurációt interaktív módon a régi config fájlból hiányzó opciók alkalmazásával.
- Defconfig: Ez a szolgáltatás lehetővé teszi, hogy a kernel build rendszere a defconfig által biztosított új konfigurációt hozzáadja a .konfigurációs fájl. Pontosabban: a Kbuild rendszer ellenőrzi az összes Kconfig fájlt. Ha a defconfig megad egy beállítást a fájlban, a Kbuild rendszer a megadott értéket használja az opció hozzáadásához a fájlba .konfig. Ha a defconfig nem említi az opciót, akkor a Kbuild az alapértelmezett értékeket használja .konfig.
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) / conf2. 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.
- Savedefconfig: Ez a szabály menti az áramot .config formájában ./ defconfig, amelyet minimális konfigurációs fájlnak tekintenek. Használja a következő parancsot: make savedefconfig
- Listnewconfig: Ez az új opciók felsorolására szolgál.
- Kvmconfig: Ez lehetővé teszi a KVM támogatás lehetőségeit. Használja a következő parancsot: make kvm_guest.konfig
- Allyesconfig: Ez egy új kernel konfigurációs fájlt készít, az összes opcióval igen. Ez az ellentéte az allnoconfig-nek.
- Allmodconfig: Ez egy új kernel-konfigurációt hoz létre, amellyel a modulok alapértelmezés szerint engedélyezve vannak.
- Randconfig: Ez egy új kern konfigurációs fájlt épít, amely véletlenszerű válaszokat ad az összes lehetőségre.
- Tinyconfig: Ez teszi a lehető legkisebb kernelt.
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:
- autoconf.h: Ezt a C nyelvű forrásfájlokhoz használják.
- auto.konf és trisztál.konf: Ezeket a Makefile szövegfeldolgozására használják.
- / tartalmazza / config: Ezek az üres fejlécfájlok, amelyeket a függőség követésében használnak.
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.