Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Predstavitev

V tej seriji člankov si želim ogledati gradbeni sistem distribucije buildroot in deliti svoje izkušnje pri njegovem prilagajanju. Praktične izkušnje bodo pri ustvarjanju majhnega OS z grafičnim vmesnikom in minimalno funkcionalnostjo.

Najprej ne smete zamenjevati sistema gradnje in distribucije. Buildroot lahko zgradi sistem iz niza paketov, ki so mu ponujeni. Buildroot je zgrajen na make datotekah in ima zato ogromno možnosti prilagajanja. Zamenjati paket z drugo različico, dodati svoj paket, spremeniti pravila za gradnjo paketa, prilagoditi datotečni sistem po namestitvi vseh paketov? buildroot zmore vse to.

V Rusiji se uporablja buildroot, vendar je po mojem mnenju malo informacij v ruskem jeziku za začetnike.

Cilj dela je sestaviti distribucijski komplet s prenosom v živo, vmesnikom icewm in brskalnikom. Ciljna platforma je virtualbox.

Zakaj zgraditi lastno distribucijo? Pogosto je potrebna omejena funkcionalnost z omejenimi viri. Še pogosteje pri avtomatizaciji morate ustvariti vdelano programsko opremo. Prilagajanje splošne distribucije s čiščenjem nepotrebnih paketov in spreminjanjem v vdelano programsko opremo je bolj delovno intenzivno kot izgradnja nove distribucije. Uporaba Gentooja ima tudi svoje omejitve.

Sistem Buildroot je zelo močan, vendar vam ne bo naredil ničesar. Omogoči in avtomatizira lahko le proces montaže.

Alternativni gradbeni sistemi (yocto, odprti sistem gradnje in drugi) niso upoštevani in primerjani.

Kje ga dobiti in kako začeti

Spletna stran projekta - buildroot.org. Tukaj lahko prenesete trenutno različico in preberete priročnik. Tam se lahko obrnete na skupnost, na voljo je sledilnik hroščev, poštni seznami in kanal irc.

Buildroot upravlja defconfigs za ciljno ploščo gradnje. Defconfig je konfiguracijska datoteka, ki shranjuje samo možnosti, ki nimajo privzetih vrednosti. On je tisti, ki določa, kaj se bo zbiralo in kako. V tem primeru lahko ločeno konfigurirate konfiguracije zagonskih nalagalnikov busybox, linux-kernel, uglibc, u-boot in barebox, vendar bodo vsi povezani s ciljno ploščo.
Po razpakiranju prenesenega arhiva ali kloniranju iz gita dobimo za uporabo pripravljen buildroot. Več o strukturi imenika si lahko preberete v priročniku; povedal vam bom o najpomembnejših:

svet — imenik z datotekami, značilnimi za vsako ploščo. To so lahko skripti za oblikovanje sistemskih slik (iso, sdcart, cpio in drugi), prekrivni imenik, konfiguracija jedra itd.
konfiguracije — dejanska defconfig plošče. Defconfig je nepopolna konfiguracija plošče. Shranjuje samo parametre, ki se razlikujejo od privzetih nastavitev
dl — imenik s prenesenimi izvornimi kodami/datotekami za sestavljanje
izhod/cilj — sestavljen datotečni sistem nastalega OS. Nato se iz njega ustvarijo slike za prenos/namestitev
izhod/gostitelj - gostiteljski pripomočki za sestavljanje
izhod/gradnja - sestavljeni paketi

Sklop je konfiguriran prek KConfig. Isti sistem se uporablja za izdelavo jedra Linuxa. Seznam najpogosteje uporabljenih ukazov (izvedite v imeniku buildroot):

  • make menuconfig - pokličite konfiguracijo gradnje. Uporabite lahko tudi grafični vmesnik (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - pokličite konfiguracijo jedra.
  • make clean - očisti rezultate gradnje (vse, kar je shranjeno v izhodu)
  • narediti - zgraditi sistem. S tem se že sestavljeni procesi ne sestavijo znova.
  • make defconfig_name - preklopite konfiguracijo na določeno defconfig
  • make list-defconfigs - prikaži seznam defconfigs
  • make source - samo prenesite namestitvene datoteke, brez gradnje.
  • make help - seznam možnih ukazov

Pomembne opombe in koristni nasveti

Buildroot ne obnovi paketov, ki so že bili zgrajeni! Zato lahko pride do situacije, ko je potrebna popolna ponovna sestava.

Z ukazom lahko znova sestavite ločen paket make packagename-rebuild. Na primer, lahko obnovite jedro Linuxa:

make linux-rebuild

Buildroot shrani stanje katerega koli paketa tako, da ustvari datoteke .stamp v imeniku output/build/$packagename:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Zato lahko znova zgradite root-fs in slike brez ponovne gradnje paketov:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Uporabne spremenljivke

buildroot ima nabor spremenljivk za enostavno konfiguracijo

  • $TOPDIR - imenik buildroot
  • $BASEDIR - IZHODNI imenik
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — imeniki za gradnjo gostiteljskih fs, uprizoritvenih fs, ciljnih fs.
  • $BUILD_DIR - imenik z nepakiranimi in zgrajenimi paketi

Vizualizacija

buildroot ima funkcijo vizualizacije.Lahko zgradite diagram odvisnosti, graf časa gradnje in graf velikosti paketov v končnem sistemu. Rezultati so v obliki datotek pdf (izbirate lahko med svn,png) v imeniku output/graph.

Primeri ukazov za vizualizacijo:

  • make graph-depends zgradi drevo odvisnosti
  • make <pkg>-graph-depends zgraditi drevo odvisnosti za določen paket
  • BR2_GRAPH_OUT=png make graph-build čas izgradnje ploskve z izhodom PNG
  • make graph-size velikost paketa

Uporabne skripte

V imeniku buildroot je podimenik pripomočki z uporabnimi skripti. Na primer, obstaja skripta, ki preverja pravilnost opisov paketov. To je lahko koristno pri dodajanju lastnih paketov (to bom naredil pozneje). Datoteka utils/readme.txt vsebuje opis teh skriptov.

Zgradimo distribucijo delnic

Pomembno si je zapomniti, da se vse operacije izvajajo v imenu običajnega uporabnika, ne root.
Vsi ukazi se izvajajo v buildroot. Paket buildroot že vključuje nabor konfiguracij za številne običajne plošče in virtualizacijo.

Poglejmo seznam konfiguracij:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Preklopite na konfiguracijo qemu_x86_64_defconfig

make qemu_x86_64_defconfig

In začnemo z montažo

make

Gradnja je uspešno končana, poglejte rezultate:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Buildroot je sestavil slike, ki jih lahko zaženete v Qemu in preverite, ali delujejo.

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

Rezultat je sistem, ki deluje v qemu:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Ustvarjanje lastne konfiguracije plošče

Dodajanje datotek plošče

Poglejmo seznam konfiguracij:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Na seznamu vidimo pc_x86_64_efi_defconfig. Svojo tablo bomo ustvarili tako, da jo kopiramo iz konfiguracije:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Takoj ustvarimo imenik plošče za shranjevanje naših skriptov, rootfs-overlay in drugih potrebnih datotek:

mkdir board/my_x86_board

Preklopite na to defconfig:

make my_x86_board_defconfig

Tako zdaj konfiguracija gradnje (shranjena v .config v korenu imenika buildroot) ustreza ciljnemu zagonskemu stroju x86-64 legacy (bios).

Kopirajmo konfiguracijo jedra linux (uporabno pozneje):

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

Nastavitev gradbenih parametrov prek KConfig

Začnimo z namestitvijo:

make menuconfig 

Odpre se okno KConfig. Možna je konfiguracija z grafičnim vmesnikom (make nconfig, make xconfig, make gconfig):

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Vstopimo v prvi razdelek Ciljne možnosti. Tukaj lahko izberete ciljno arhitekturo, za katero bo izvedena gradnja.

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Možnosti gradnje - tukaj so različne nastavitve gradnje. Določite lahko imenike z izvornimi kodami, število gradbenih niti, zrcala za prenos izvornih kod in druge nastavitve. Pustimo nastavitve privzete.

Toolchain – tukaj so konfigurirana sama orodja za gradnjo. Preberite več o njem.

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Vrsta orodne verige – vrsta uporabljene orodne verige. To je lahko orodna veriga, vgrajena v buildroot, ali zunanja (lahko določite imenik z že zgrajenim ali url za prenos). Obstajajo dodatne možnosti za različne arhitekture. Na primer, za roko lahko preprosto izberete različico Linaro zunanje verige orodij.

Knjižnica C – izbira knjižnice C. Od tega je odvisno delovanje celotnega sistema. Običajno se uporablja glibc, ki podpira vse možne funkcionalnosti. Lahko pa je prevelik za vgrajen sistem, zato se pogosto izbereta uglibc ali musl. Izbrali bomo glibc (to bo potrebno pozneje za uporabo systemd).

Serije glav jedra in glave jedra po meri – se morajo ujemati z različico jedra, ki bo v sestavljenem sistemu. Za glave jedra lahko podate tudi pot do repozitorija tarball ali git.

RAZLIČICE PREVAJALNIKA GCC – izberite različico prevajalnika, ki bo uporabljena za gradnjo
Omogoči podporo za C++ – izberite gradnjo s podporo za knjižnice C++ v sistemu. To nam bo koristilo v prihodnosti.

Dodatne možnosti gcc – nastavite lahko dodatne možnosti prevajalnika. Zaenkrat ga ne potrebujemo.

Konfiguracija sistema vam omogoča nastavitev prihodnjih parametrov ustvarjenega sistema:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Večina točk je razvidnih iz naslova. Bodimo pozorni na naslednje točke:
Pot do tabel uporabnikov - tabela z uporabniki, ki jih je treba ustvariti (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Primer datoteke. Uporabniški uporabnik bo ustvarjen z geslom admin, samodejno gid/uid, /bin/sh shell, privzeti uporabnik skupine, član skupine root, komentar Foo uporabnik

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

Prekrivni imeniki korenskega datotečnega sistema - imenik prekrit na vrhu sestavljenih ciljnih fs. Dodaja nove datoteke in zamenja obstoječe.

Skripti po meri za zagon pred ustvarjanjem slik datotečnega sistema - skripti, ki se izvedejo tik pred zlaganjem datotečnega sistema v slike. Pustimo skript zaenkrat prazen.

Pojdimo na razdelek Kernel

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Tu se nastavijo nastavitve jedra. Samo jedro je konfigurirano prek make linux-menuconfig.
Različico jedra lahko nastavite na različne načine: izberite med ponujenimi, ročno vnesite različico, določite repozitorij ali že pripravljen arhiv.

Konfiguracija jedra — pot do konfiguracije jedra. Izberete lahko privzeto konfiguracijo za izbrano arhitekturo ali defocnfig iz Linuxa. Vir Linuxa vsebuje nabor defconfigs za različne ciljne sisteme. Lahko najdete tistega, ki ga potrebujete z neposrednim ogledom virov tukaj. Na primer, za črno tablo beagle bone lahko izberite konfig.

Razdelek Ciljni paketi vam omogoča, da izberete, kateri paketi bodo nameščeni v sistemu, ki se gradi. Pustimo zaenkrat nespremenjeno. Svoje pakete bomo na ta seznam dodali pozneje.
Slike datotečnega sistema - seznam slik datotečnega sistema, ki bodo zbrane. Dodajte iso sliko

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Zagonski nalagalniki - izbor zagonskih nalagalnikov za zbiranje. Izberimo izoliniks

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Konfiguriranje Systemd

Systemd postaja eden od stebrov Linuxa, skupaj z jedrom in glibc. Zato sem njegovo nastavitev premaknil v ločen element.

Konfigurirano prek make menuconfig, nato Target packages → System tools → systemd. Tukaj lahko določite, katere sistemske storitve bodo nameščene in zagnane ob zagonu sistema.

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Shranjevanje sistemske konfiguracije

To konfiguracijo shranimo prek KConfig.

Nato shranite našo defconfig:

make savedefconfig

Konfiguracija jedra Linuxa

Konfiguracija jedra Linuxa se prikliče z naslednjim ukazom:

make linux-menuconfig

Dodajmo podporo za video kartico Virtualbox

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Dodajmo podporo za integracijo Virtualbox Guest

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Shrani in zapusti. POMEMBNO: konfiguracija bo shranjena v output/build/linux-$version/config, ne pa v board/my_x86_board/linux.config

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Zato morate ročno kopirati konfiguracijo na lokacijo za shranjevanje:

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

Po tem bomo izvedli popolno ponovno montažo celotnega sistema. buildroot ne obnovi že zgrajenega, morate ročno določiti pakete za ponovno gradnjo. Da ne bi izgubljali časa in živcev, je lažje v celoti obnoviti majhen sistem):

make clean;make

Po končani gradnji zaženite VirtualBox (preizkušeno na različicah 5.2 in 6.0), ki se zažene s CD-ja.

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Zagon iz sestavljenega iso:

Buildroot - 1. del. Splošne informacije, sestavljanje minimalnega sistema, konfiguracija prek menija

Seznam uporabljenih materialov

  1. Priročnik za Buildroot

Vir: www.habr.com

Dodaj komentar