Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Bevezetés

Ebben a cikk sorozatban a buildroot disztribúció összeállítórendszert szeretném megvizsgálni, és elmondani a testreszabás tapasztalataimat. Itt gyakorlati tapasztalatokat osztok meg egy kis grafikus felülettel és minimális funkcióval rendelkező operációs rendszer létrehozásáról.

Először is, nem szabad összekeverni az összeállítórendszert és a disztribúciót. A Buildroot egy csomagokból álló rendszert képes összeállítani, amelyeket javasoltak neki. A Buildroot make fájlokon alapul, ezért hatalmas testreszabási lehetőségekkel rendelkezik. Csomag verziójának lecserélése, saját csomag hozzáadása, csomag összeállítási szabályainak módosítása, fájlrendszer testreszabása az összes csomag telepítése után? A Buildroot mindezt tudja.

Oroszországban a buildroot használatban van, de véleményem szerint kevés orosz nyelvű információ áll rendelkezésre a kezdők számára.

A munka célja — egy live boot disztribúció összeállítása, icewm felülettel és böngészővel. A célplatform — virtualbox.

Miért van szükség saját disztribúció összeállítására? Gyakran korlátozott funkciókra van szükség korlátozott erőforrások mellett. Még gyakrabban az automatizálás során kell firmware-t létrehozni. A disztribúciók, amelyek általános célra készültek, tisztítása a felesleges csomagoktól és a firmware-be való átalakítás sokkal időigényesebb, mint új disztribúciót készíteni. A Gentoo használatának is vannak korlátai.

A Buildroot egy nagyon erőteljes rendszer, de semmit sem tesz meg helyetted. Csak lehetőségeket ad és automatizálja az összeállítási folyamatot.

Alternatív összeállítórendszerek (yocto, open build system és mások) nem kerülnek figyelembe és nem hasonlítanak össze.

Hol található és hogyan kezdjük el

A projekt weboldala — buildroot.org. Itt letöltheted a legfrissebb verziót és elolvashatod a kézikönyvet. Ott a közösséghez is fordulhatsz, van hibakövető, levelezési lista és IRC csatorna.

A Buildroot a célhardverhez tartozó defconfig fájlokkal működik. A Defconfig egy konfigurációs fájl, amely csak az alapértelmezett értékekkel nem rendelkező opciókat tartalmazza. Ez határozza meg, hogy mi és hogyan lesz összeállítva. Emellett külön beállíthatod a busybox, linux-kernel, uClibc, u-boot és barebox konfigurációkat, de mind ezek a célhardverhez lesznek kötve.
A letöltött archívum kicsomagolása vagy a gitből való klónozás után egy működésre kész buildroot-ot kapunk. A mappa struktúrájáról részletesen a kézikönyvben lehet olvasni, most a legfontosabbakról beszélek:

board — fájlok katalógusa, amely minden lemezhez specifikus. Ezek lehetnek a rendszer képek (iso, sdcart, cpio stb.) elkészítési szkriptjei, overlay katalógus, kernel konfigurációk és egyebek.
configs — a lemez alapdefiníciója. Az alapdefiníció nem teljes lemezkonfiguráció. Csak a gyári beállításokhoz képest eltérő paramétereket tárol.
dl — letöltött forráskódok/fájlok katalógusa a fordításhoz.
output/target — a kapott operációs rendszer fájlrendszere. Ebből később képek készülnek a telepítéshez/indításhoz.
output/host — host segédprogramok a fordításhoz.
output/build — elkészített csomagok.

A fordítás konfigurációja a KConfig segítségével történik. Ugyanez a rendszer használatos a Linux kernel fordításához. A leggyakrabban használt parancsok listája (a buildroot könyvtárban kell végrehajtani):

  • make menuconfig — a fordítási beállítások hívása. Grafikus felhasználói felülettel is lehetséges (make nconfig, make xconfig, make gconfig).
  • make linux-menuconfig — a kernel konfigurációjának hívása.
  • make clean — törölni az összes fordítási eredményt (minden, ami az output mappában található).
  • make — a rendszer összeszerelése. Ez nem vonja maga után az már elkészített folyamatok újrafordítását.
  • make defconfig_name — a konfiguráció átváltása egy adott defconfig-ra.
  • make list-defconfigs — a defconfig-ok listájának megjelenítése.
  • make source — csak letölteni az installációs fájlokat, fordítás nélkül.
  • make help — a lehetséges parancsok listája.

Fontos megjegyzések és hasznos tippek.

A Buildroot nem fordítja újra a már elkészített csomagokat! Ezért kialakulhat olyan helyzet, amikor teljes újrafordításra van szükség.

Egy adott csomag újrafordítása a következő parancs segítségével történhet: make packagename-rebuild. Például, újrafordíthatjuk a Linux kernelt:

make linux-rebuild

A Buildroot a csomagok állapotát a .stamp fájlok létrehozásával tárolja az output/build/$packagename könyvtárban:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Következésképpen a root-fs és a képek újrafordítása anélkül történhet, hogy a csomagokat újra kellene fordítani:

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 Buildrootban egy sor változó áll rendelkezésre a kényelmes konfiguráláshoz.

  • $TOPDIR — a Buildroot gyökérkönyvtára.
  • $BASEDIR — az OUTPUT könyvtár.
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — a host fs, staging fs, target fs fordítási könyvtárai.
  • $BUILD_DIR — a kibővített és fordított csomagok könyvtára.

Vizualizáció.

A Buildroot lehetőséget biztosít vizualizációra. Felépíthető a függőségek diagramja, a fordítási idő grafikája, a csomagok méretének grafikája a végső rendszerben. Az eredmények pdf fájlokban (választás szerint svn vagy png) találhatók az output/graph könyvtárban.

A megjelenítés parancsainak példái:

  • make graph-depends függőségi fa létrehozása
  • make <pkg>-graph-depends a megadott csomag függőségi fájának létrehozása
  • BR2_GRAPH_OUT=png make graph-build a build időgrafikon létrehozása PNG kimenettel
  • make graph-size csomagok méretét ábrázoló grafikon létrehozása

Hasznos szkriptek

A buildroot könyvtárban található egy almappa utils hasznos szkriptekkel. Például van egy szkript, ami ellenőrzi a csomagok leírásának helyességét. Ez hasznos lehet, ha saját csomagokat adunk hozzá (ezt később meg fogom tenni). A utils/readme.txt fájl tartalmazza ezeknek a szkripteknek a leírását.

Létrehozzuk a stock disztribúciót

Fontos megjegyezni, hogy minden műveletet egy normál felhasználó nevében hajtunk végre, nem root.
Minden parancsot a buildroot gyökerében hajtanak végre. A buildroot szállítmány már tartalmaz egy sor konfigurációt sok elterjedt lapka és virtualizáció számára.

Nézzük meg a konfigurációk listáját:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Váltunk a qemu_x86_64_defconfig konfigurációra

make qemu_x86_64_defconfig

És elindítjuk a buildet

make

A build sikeresen befejeződik, nézzük meg az eredményeket:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

A Buildroot elkészítette azokat a képeket, amelyeket elindíthatunk Qemu-ban, és megbizonyosodhatunk arról, hogy működnek.

qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Az eredmény — Qemu-ban futó rendszer:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Saját lap konfigurálásának létrehozása

Lap fájljainak hozzáadása

Nézzük meg a konfigurációk listáját:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

A listában látjuk a pc_x86_64_efi_defconfig-et. Létrehozunk egy saját lapot, amelyet a konfiguráció másolásával készítünk:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Azonnal létrehozzuk a lap könyvtárát, ahol a saját szkripteinket, rootfs overlay-t és egyéb szükséges fájlokat tárolunk:

mkdir board/my_x86_board

Váltunk erre a defconfig-ra:

make my_x86_board_defconfig

Így most a build konfiguráció (a buildroot gyökerében található .config fájlban tárolva) megfelel a célszámítógép x86-64 legacy (bios) indításának.

Másoljuk a linux-kernel konfigurációt (később hasznos lesz):

cp board/pc/linux.config board/my_x86_board/

Build paraméterek beállítása a KConfig segítségével

Indítsuk el a beállítást:

make menuconfig 

Megnyílik a KConfig ablaka. Lehetőség van grafikus interfésszel konfigurálni (make nconfig, make xconfig, make gconfig):

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Belépünk az első szakaszba, a Target Options-ba. Itt kiválasztható az a célarhitektúra, amelyre a build folyik.

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

A Build options — itt különféle build beállítások találhatók. Megadhatja a forráskódok könyvtárait, a build szálak számát, a forráskódok letöltésére szolgáló tükörszervereket és egyéb beállításokat. Hagyjuk az alapértelmezett beállításokat.

Toolchain – itt állítható be a build eszközkészlete. Erről bővebben.

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Toolchain type – a használt eszközkészlet típusa. Ez lehet beépített buildroot vagy külső eszközkészlet (megadható a már összeállított könyvtár vagy letöltési url). Különböző architektúrákhoz további lehetőségek állnak rendelkezésre. Például az arm esetében egyszerűen választhat egy külső Linaro eszközkészlet verziót.

C library – a C könyvtár kiválasztása. Ez meghatározza a rendszer működését. Általában a glibc-t használják, amely támogatja a teljes funkcionalitást. De túl nagynak bizonyulhat beágyazott rendszerekhez, ezért gyakran választják az uClibc-t vagy a musl-t. Mi a glibc-t választjuk (ez később szükséges lesz a systemd használatához).

Kernel Headers és Custom Kernel Headers series – meg kell egyeznie az összeállított rendszerben lévő kernel verziójával. A kernel header-hez ugyanúgy megadhatja a tarball vagy git-repozitórium útját.

GCC COMPILER VERSIONS – a használandó fordítóverzió választása a fordításhoz.
Enable C++ support – válasszuk a C++ könyvtárak támogatásával történő fordítást a rendszerben. Később hasznos lesz.

Additional gcc options – további fordítóopciók adhatók meg. Jelenleg nincs rá szükségünk.

System configuration lehetővé teszi a létrehozandó rendszer jövőbeli paramétereinek megadását:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

A legtöbb pont neve alapján érthető. Figyeljünk a következő pontokra:
Path to the users tables — a létrehozandó felhasználók táblázata (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Példa fájl. Létrejön a user felhasználó admin jelszóval, automatikus gid/uid, /bin/sh shell, alapértelmezett csoport user, root csoport tag, Foo user megjegyzés.

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Root filesystem overlay directories — könyvtár, amely a létrehozott target-fs fölé kerül. Új fájlokat ad hozzá, és felülírja a meglévőket.

Custom scripts to run before creating filesystem images — A fájlrendszer képek létrehozása előtt végrehajtandó szkriptek. A szkriptet egyelőre üresen hagyjuk.

Lépjünk a Kernel szekcióba.

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Itt állíthatók be a kernel beállításai. Maga a kernel a make linux-menuconfig paranccsal konfigurálható.
A kernel verziójának megadása többféleképpen lehetséges: válasszon a felkínáltak közül, adja meg a verziót manuálisan, adja meg a repót vagy a kész tarball-t.

Kernel configuration — a kernel konfigurációs fájlja. Választhat alapértelmezett konfigurációt a választott architektúrához vagy defconfig-et a Linux-ból. A Linux forrásaiban védett defconfig-ok állnak rendelkezésre különböző célrendszerekhez. A szükséges megtalálható, közvetlenül a forráskódokba nézve itt. Például a beagle bone black lap számára lehet válassza ki a konfigurációt.

A Target packages szakaszban választható, hogy mely csomagok kerülnek telepítésre az összeszerelendő rendszerbe. Ezt egyelőre hagyjuk változatlanul. Később saját csomagjainkat hozzáadjuk majd ehhez a listához.
Filesystem images — az összeszerelendő fájlrendszer képek listája. Hozzáadunk egy iso-képet

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Bootloaders — az összeszerelt betöltők kiválasztása. Válasszuk az isolinix-t

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Systemd konfigurálása

A Systemd a linux egyik pillére, a kernel és a glibc mellett. Ezért vittem a konfigurálását külön pontra.

A make menuconfig segítségével állítható be, majd Target packages → System tools → systemd. Itt megadható, hogy mely systemd szolgáltatások kerülnek telepítésre és indításra a rendszer indulásakor.

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

A rendszer konfigurációjának mentése

Mentjük ezt a konfigurációt a KConfig segítségével.

Ezután mentjük a defconfig-unkat:

make savedefconfig

A Linux kernel konfigurálása

A linux kernel konfigurációját a következő parancs indítja:

make linux-menuconfig

Hozzáadjuk a Virtualbox videokártya támogatását

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Hozzáadjuk 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, menübeállítás

Mentjük és kilépünk. FONTOS: a konfiguráció az output/build/linux-$version/config mappába mentésre kerül, 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, menübeállítás

Ezért manuálisan kell átmásolni a konfigurációt a tárolási helyre:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Ezután teljes újraépítjük az egész rendszert. Mivel a buildroot nem építi újra az már összeszerelt csomagokat, manuálisan kell megadni a csomagokat az újraépítéshez. Hogy ne pazaroljunk időt és energiát, egy kisebb rendszert egyszerűbb teljesen újraépíteni):

make clean;make

Az építés befejeztével elindítjuk a VirtualBox-ot (5.2-es és 6.0-s verzióval ellenőrizve), boot a cd-lemezről. A rendszer paraméterei:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Indítás az összeszerelt iso-ból:

Buildroot — 1. rész. Általános információk, minimális rendszer összeállítása, menübeállítás

Felhasznált anyagok listája

  1. Buildroot kézikönyv

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster