Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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 - buildroot.org. Itt letöltheti az aktuális verziót és elolvashatja a kézikönyvet. Ott felveheted a kapcsolatot a közösséggel, van hibakövető, levelezőlisták és irc csatorna.

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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ít
  • make <pkg>-graph-depends függőségi fát készít egy adott csomaghoz
  • BR2_GRAPH_OUT=png make graph-build telek felépítési ideje PNG kimenettel
  • make 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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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):

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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.

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztü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.

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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 (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

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

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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 közvetlenül az itteni forrásokat nézve. Például egy beagle csont fekete táblához megteheti válassza ki a konfigurációt.

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

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

Bootloaderek – a begyűjtendő rendszerbetöltők kiválasztása. Válasszuk az isolinixet

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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.

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

Adjuk hozzá a Virtualbox Guest integrációs támogatást

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

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:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

Az összeállított iso-ból futva:

Buildroot - 1. rész. Általános információk, minimális rendszer összeállítása, konfiguráció a menün keresztül

Felhasznált anyagok listája

  1. Buildroot kézikönyv

Forrás: will.com

Hozzászólás