Bevezetés
Ebben a cikksorozatban a buildroot disztribúciós összeállítási rendszert szeretném áttekinteni, és megosztani tapasztalataimat a testreszabásával kapcsolatban. Gyakorlati tapasztalat lesz egy grafikus felülettel és minimális funkcionalitással rendelkező kis operációs rendszer létrehozásában.
Először is nem szabad összekeverni a build rendszert és a disztribúciót. A Buildroot fel tud építeni egy rendszert a számára felajánlott csomagokból. A Buildroot makefile-ekre épül, ezért hatalmas testreszabási lehetőségekkel rendelkezik. Csomag cseréje másik verzióra, saját csomag hozzáadása, csomagépítési szabályok módosítása, fájlrendszer testreszabása az összes csomag telepítése után? A buildroot mindezt meg tudja tenni.
Oroszországban a buildrootot használják, de véleményem szerint kevés az orosz nyelvű információ a kezdőknek.
A munka célja egy terjesztési készlet összeállítása élő letöltéssel, icewm felülettel és böngészővel. A célplatform a virtualbox.
Miért építsd fel saját disztribúciódat? Gyakran korlátozott funkcionalitásra van szükség korlátozott erőforrásokkal. Az automatizálásban még gyakrabban kell firmware-t létrehozni. Egy általános célú disztribúció adaptálása a szükségtelen csomagok eltávolításával és firmware-ré alakításával munkaigényesebb, mint egy új disztribúció felépítése. A Gentoo használatának is megvannak a maga korlátai.
A Buildroot rendszer nagyon erős, de nem tesz semmit. Csak az összeszerelési folyamatot képes engedélyezni és automatizálni.
Az alternatív összeállítási rendszereket (yocto, nyílt építésű rendszer és mások) nem veszik figyelembe és nem hasonlítják össze.
Hol lehet beszerezni és hogyan kezdjem el
Projekt honlapja -
A Buildroot defconfigokat működtet a build céltábláján. A Defconfig egy konfigurációs fájl, amely csak azokat a beállításokat tárolja, amelyeknek nincs alapértelmezett értéke. Ő határozza meg, hogy mit és hogyan kell begyűjteni. Ebben az esetben külön beállíthatjuk a busybox, linux-kernel, uglibc, u-boot és barebox rendszerbetöltő konfigurációit, de mindegyik a céltáblához lesz kötve.
A letöltött archívum kicsomagolása vagy git-ből történő klónozása után egy használatra kész buildrootot kapunk. A könyvtárszerkezetről bővebben a kézikönyvben olvashat, a legfontosabbakról elmondom:
bizottság — egy könyvtár az egyes táblákhoz tartozó fájlokkal. Ezek lehetnek rendszerképek (iso, sdcart, cpio és mások) létrehozására szolgáló parancsfájlok, átfedő könyvtár, kernel konfigurációja stb.
konfigurációk — a tábla tényleges defconfigja. A Defconfig egy hiányos kártyakonfiguráció. Csak azokat a paramétereket tárolja, amelyek eltérnek az alapértelmezett beállításoktól
dl — könyvtár a letöltött forráskódokkal/fájlokkal az összeállításhoz
kimenet/cél — az eredményül kapott operációs rendszer összeállított fájlrendszere. Ezt követően képek készülnek róla letöltéshez/telepítéshez
kimenet/gazda - host segédprogramok az összeszereléshez
kimenet/építés - összeállított csomagok
Az összeállítás a KConfig segítségével állítható be. Ugyanezt a rendszert használják a Linux kernel felépítéséhez. A leggyakrabban használt parancsok listája (végrehajtás a buildroot könyvtárban):
- make menuconfig - hívja meg a build konfigurációt. Használhatja a grafikus felületet is (make nconfig, make xconfig, make gconfig)
- make linux-menuconfig - hívja meg a kernel konfigurációját.
- make clean - Tisztítsa meg az összeállítási eredményeket (minden, ami a kimenetben tárolt)
- készítsünk – építsünk rendszert. Ez nem állítja újra össze a már összeállított folyamatokat.
- make defconfig_name - a konfiguráció váltása egy adott defconfig-ra
- make list-defconfigs – a defconfig-ok listájának megjelenítése
- make source – csak töltse le a telepítő fájlokat, építés nélkül.
- make help - felsorolja a lehetséges parancsokat
Fontos megjegyzések és hasznos tippek
A Buildroot nem építi újra a már felépített csomagokat! Ezért előállhat olyan helyzet, amikor teljes újraszerelésre van szükség.
A paranccsal külön csomagot építhet újra make packagename-rebuild. Például újraépítheti a Linux kernelt:
make linux-rebuild
A Buildroot eltárolja bármely csomag állapotát azáltal, hogy .stamp fájlokat hoz létre az output/build/$packagename könyvtárban:
Ezért újraépítheti a root-fs-eket és a képeket a csomagok újraépítése nélkül:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
Hasznos változók
A buildroot változókészlettel rendelkezik az egyszerű beállítás érdekében
- $TOPDIR - buildroot könyvtár
- $BASEDIR - OUTPUT könyvtár
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR – gazdagép fs, állomásozó fs, cél fs build könyvtárak.
- $BUILD_DIR - könyvtár kicsomagolt és beépített csomagokkal
Megjelenítés
A buildroot vizualizációs funkcióval rendelkezik. A végső rendszerben összeállíthat egy függőségi diagramot, egy felépítési időgrafikont és egy csomagméret-grafikont. Az eredmények pdf fájlok formájában (svn, png közül választhat) a kimeneti/grafikon könyvtárban.
Példák vizualizációs parancsokra:
make graph-depends
függőségi fát építmake <pkg>-graph-depends
függőségi fát készít egy adott csomaghozBR2_GRAPH_OUT=png make graph-build
telek felépítési ideje PNG kimenettelmake graph-size
ábrázolja a csomagméretet
Hasznos szkriptek
A buildroot könyvtárban van egy alkönyvtár hasznos hasznos szkriptekkel. Például van egy szkript, amely ellenőrzi a csomagleírások helyességét. Ez hasznos lehet saját csomagok hozzáadásakor (később megteszem). Az utils/readme.txt fájl tartalmazza ezeknek a szkripteknek a leírását.
Építsünk részvényeloszlást
Fontos megjegyezni, hogy minden műveletet egy normál felhasználó, nem a root nevében hajtanak végre.
Minden parancs végrehajtódik a buildrootban. A buildroot csomag már tartalmaz konfigurációkészletet számos gyakori kártya és virtualizáció számára.
Nézzük a konfigurációk listáját:
Váltson a qemu_x86_64_defconfig konfigurációra
make qemu_x86_64_defconfig
És elkezdjük az összeszerelést
make
Az építés sikeresen befejeződött, nézze meg az eredményeket:
A Buildroot olyan képeket állított össze, amelyeket futtathat a Qemu-ban, és ellenőrizheti, hogy működnek-e.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
Az eredmény egy qemu-ban futó rendszer:
Saját tábla konfiguráció létrehozása
Táblafájlok hozzáadása
Nézzük a konfigurációk listáját:
A listában a pc_x86_64_efi_defconfig fájlt látjuk. Létrehozzuk saját táblánkat úgy, hogy kimásoljuk a konfigurációból:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
Azonnal hozzunk létre egy táblakönyvtárat a szkriptjeink, a rootfs-overlay és egyéb szükséges fájlok tárolására:
mkdir board/my_x86_board
Váltás erre a defconfigra:
make my_x86_board_defconfig
Így most a build konfigurációja (a buildroot könyvtár gyökérkönyvtárában található .config fájlban) megfelel az x86-64 legacy(bios) rendszerindító célgépnek.
Másoljuk a linux-kernel konfigurációt (később hasznos):
cp board/pc/linux.config board/my_x86_board/
Összeállítási paraméterek beállítása a KConfig segítségével
Kezdjük a beállítással:
make menuconfig
Megnyílik a KConfig ablak. Lehetőség van grafikus felülettel konfigurálni (make nconfig, make xconfig, make gconfig):
Belépünk az első szakaszba Célbeállítások. Itt választhatja ki azt a célarchitektúrát, amelyre a build végrehajtásra kerül.
Beépítési lehetőségek – itt különféle összeállítási beállítások állnak rendelkezésre. Megadhatja a forráskódokat tartalmazó könyvtárakat, a felépítési szálak számát, a forráskódok letöltéséhez szükséges tükröket és egyéb beállításokat. Hagyjuk a beállításokat alapértelmezetten.
Eszközlánc – maguk az építőeszközök itt vannak konfigurálva. Olvass tovább róla.
Szerszámlánc típusa – a használt szerszámlánc típusa. Ez lehet buildroot-ba beépített eszközlánc vagy külső (megadhatja a könyvtárat a már beépítetttel vagy az url-t a letöltéshez). A különböző architektúrákhoz további lehetőségek is vannak. Például karhoz egyszerűen kiválaszthatja a külső szerszámlánc Linaro verzióját.
C könyvtár – a C könyvtár kiválasztása, ettől függ a teljes rendszer működése. Általában a glibc-t használják, amely minden lehetséges funkciót támogat. De lehet, hogy túl nagy egy beágyazott rendszerhez, ezért gyakran az uglibc-t vagy a musl-t választják. A glibc-t választjuk (erre később szükség lesz a systemd használatához).
Kernelfejlécek és egyéni kernelfejlécek sorozatok – meg kell egyeznie az összeállított rendszerben lévő kernel verziójával. A kernelfejlécekhez megadhatja a tarball vagy git tárhely elérési útját is.
GCC COMPILER VERSIONS – válassza ki az összeállításhoz használandó fordítóverziót
C++-támogatás engedélyezése – válassza ki, ha a rendszerben lévő C++-könyvtárakat támogatja. Ez hasznos lesz számunkra a jövőben.
További gcc-beállítások – további fordítóbeállításokat adhat meg. Egyelőre nincs rá szükségünk.
A rendszerkonfiguráció lehetővé teszi a létrehozott rendszer jövőbeli paramétereinek beállítását:
A legtöbb pont a címből kiderül. Figyeljünk a következő pontokra:
Útvonal a felhasználói táblákhoz - táblázat a létrehozandó felhasználókkal (
Példafájl. A felhasználói felhasználó az admin jelszóval jön létre, automatikusan gid/uid, /bin/sh shell, alapértelmezett csoportfelhasználó, csoporttag gyökér, megjegyzés Foo felhasználó
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
Gyökér fájlrendszer átfedő könyvtárak - az összeállított target-fs tetejére átfedő könyvtár. Új fájlokat ad hozzá, és lecseréli a meglévőket.
Egyéni szkriptek, amelyeket a fájlrendszerképek létrehozása előtt kell futtatni – A parancsfájlok közvetlenül a fájlrendszer képekké való összehajtása előtt futnak le. A forgatókönyvet egyelőre hagyjuk üresen.
Menjünk a Kernel részhez
Itt állíthatja be a kernel beállításait. Maga a kernel a make linux-menuconfig segítségével állítható be.
A kernel verzióját többféleképpen állíthatja be: válasszon a felajánlottak közül, adja meg manuálisan a verziót, adjon meg egy tárolót vagy egy kész tarballt.
Kernel konfiguráció — a kernel konfigurációjának elérési útja. Kiválaszthatja az alapértelmezett konfigurációt a kiválasztott architektúrához vagy a defocnfig-hez Linuxról. A Linux-forrás egy sor defconfig-ot tartalmaz a különböző célrendszerekhez. Megtalálhatja azt, amelyikre szüksége van
A Célcsomagok szakaszban kiválaszthatja, hogy mely csomagok legyenek telepítve a készülő rendszerre. Hagyjuk egyelőre változatlanul. Csomagjainkat később adjuk hozzá ehhez a listához.
Fájlrendszerképek – az összegyűjtött fájlrendszerképek listája. Adjon hozzá egy iso képet
Bootloaderek – a begyűjtendő rendszerbetöltők kiválasztása. Válasszuk az isolinixet
A Systemd konfigurálása
A Systemd a Linux egyik pillérévé válik, a kernel és a glibc mellett. Ezért a beállítását áthelyeztem egy külön elemre.
A make menuconfig, majd a Target packages → System tools → systemd segítségével állítható be. Itt adhatja meg, hogy a rendszer indításakor mely systemd szolgáltatások legyenek telepítve és elindulva.
Rendszerkonfiguráció mentése
Ezt a konfigurációt a KConfig segítségével mentjük.
Ezután mentse el a defconfigunkat:
make savedefconfig
Linux kernel konfiguráció
A Linux kernel konfigurációja a következő paranccsal hívható meg:
make linux-menuconfig
Adjunk hozzá támogatást a Virtualbox videokártyához
Adjuk hozzá a Virtualbox Guest integrációs támogatást
Mentés és kilépés. FONTOS: a konfiguráció mentésre kerül az output/build/linux-$version/config mappába, de nem a board/my_x86_board/linux.config mappába
Ezért manuálisan át kell másolnia a konfigurációt egy tárolóhelyre:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Ezt követően elvégezzük a teljes rendszer teljes összeszerelését. A buildroot nem építi újra a már felépítettet, manuálisan kell megadni az újraépítéshez szükséges csomagokat. Az idő és az idegek elvesztése érdekében könnyebb egy kis rendszert teljesen újjáépíteni):
make clean;make
A felépítés befejezése után indítsa el a VirtualBoxot (5.2-es és 6.0-s verziókon tesztelve) a CD-ről történő indítással. Rendszerparaméterek:
Az összeállított iso-ból futva:
Felhasznált anyagok listája
- Buildroot kézikönyv
Forrás: will.com