Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Úvod

V tejto sérii článkov sa chcem pozrieť na zostavovací systém distribúcie buildroot a podeliť sa o svoje skúsenosti s jeho prispôsobením. K dispozícii budú praktické skúsenosti s tvorbou malého OS s grafickým rozhraním a minimálnou funkčnosťou.

V prvom rade si nezamieňajte systém zostavovania s distribúciou. Buildroot dokáže zostaviť systém zo sady balíkov, ktoré sú mu ponúkané. Buildroot je postavený na makefiles, a preto má veľa možností prispôsobenia. Nahradiť balík inou verziou, pridať vlastný balík, zmeniť pravidlá zostavovania balíka, prispôsobiť súborový systém po nainštalovaní všetkých balíkov? To všetko môže zakoreniť.

V Rusku sa používa buildroot, ale podľa mňa je málo informácií v ruskom jazyku pre začiatočníkov.

Účelom práce je zostaviť distribučný kit s live downloadom, icewm rozhraním a prehliadačom. Cieľovou platformou je virtualbox.

Prečo si vybudovať vlastnú distribúciu? Často je potrebná obmedzená funkčnosť s obmedzenými zdrojmi. Ešte častejšie v automatizácii musíte vytvoriť firmvér. Prispôsobenie univerzálnej distribúcie vyčistením nepotrebných balíkov a ich premenou na firmvér je náročnejšie na prácu ako vytvorenie novej distribúcie. Používanie Gentoo má tiež svoje obmedzenia.

Systém Buildroot je veľmi výkonný, ale nič za vás neurobí. Môže iba povoliť a automatizovať proces montáže.

Alternatívne zostavovacie systémy (yocto, open build system a iné) sa nezohľadňujú ani neporovnávajú.

Kde ho získať a ako začať

Webová stránka projektu - buildroot.org. Tu si môžete stiahnuť najnovšiu verziu a prečítať si príručku. Tam môžete kontaktovať aj komunitu, je tam bug tracker, mail-listy a irc-channel.

Buildroot prevádzkuje defconfigy pre cieľovú dosku zostavy. Defconfig je konfiguračný súbor, ktorý ukladá iba voľby, ktoré nemajú predvolené hodnoty. Je to on, kto určuje, čo sa bude zbierať a ako. V tomto prípade môžete samostatne nakonfigurovať konfigurácie bootloaderov busybox, linux-kernel, uglibc, u-boot a barebox, ale všetky budú viazané na cieľovú dosku.
Po rozbalení stiahnutého archívu alebo naklonovaní z git získame buildroot pripravený na použitie. Viac o štruktúre adresárov si môžete prečítať v príručke, poviem vám o tých najdôležitejších:

doska — adresár so súbormi špecifickými pre každú dosku. Môžu to byť skripty na vytváranie systémových obrazov (iso, sdcart, cpio a iné), prekryvný adresár, konfigurácia jadra atď.
configs - aktuálna defconfig dosky. Defconfig je neúplná konfigurácia dosky. Ukladá iba parametre iné ako predvolené nastavenia.
dl - adresár so stiahnutými zdrojovými kódmi / súbormi na zostavenie
výstup/cieľ — zostavený súborový systém výsledného OS. Následne sa z neho vytvoria obrázky na stiahnutie/inštaláciu
výstup/hostiteľ - hostiteľské nástroje na montáž
výstup/vybudovanie - zostavené balíky

Konfigurácia zostavy sa vykonáva cez KConfig. Rovnaký systém sa používa na zostavenie linuxového jadra. Zoznam najčastejšie používaných príkazov (spúšťajte v adresári buildroot):

  • make menuconfig - zavolajte konfiguráciu zostavy. Môžete tiež použiť GUI (make nconfig,make xconfig,make gconfig)
  • make linux-menuconfig - zavolajte konfiguráciu jadra.
  • make clean - vyčistiť výsledky zostavenia (všetko uložené vo výstupe)
  • make - build system. Tým sa neprestavujú už vytvorené procesy.
  • make defconfig_name - prepnite konfiguráciu na konkrétny defconfig
  • make list-defconfigs - zobrazí zoznam defconfigov
  • make source - iba stiahnite inštalačné súbory, bez zostavovania.
  • make help - zoznam možných príkazov

Dôležité poznámky a užitočné rady

Buildroot neprestavuje už vytvorené balíčky! Preto môže nastať situácia, keď je potrebná kompletná opätovná montáž.

Pomocou príkazu môžete prebudovať jeden balík make packagename-rebuild. Môžete napríklad prebudovať linuxové jadro:

make linux-rebuild

Buildroot ukladá stav akéhokoľvek balíka vytvorením súborov .stamp v adresári output/build/$packagename:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Preto je možné prebudovať root-fs a obrazy bez prestavby balíkov:

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

Užitočné premenné

buildroot má sadu premenných pre jednoduchú konfiguráciu

  • $TOPDIR - adresár buildroot
  • $BASEDIR - OUTPUT adresár
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - hostiteľské fs, prípravné fs, cieľové fs zostavovacie adresáre.
  • $BUILD_DIR - adresár s rozbalenými a zostavenými balíkmi

Vizualizácia

buildroot má schopnosť vizualizácie. Môžete vytvoriť diagram závislosti, graf času zostavenia, graf veľkosti balíka v konečnom systéme. Výsledky ako súbory pdf (môžete si vybrať svn,png) v adresári output/graph.

Príklady príkazov na vykreslenie:

  • make graph-depends vytvoriť strom závislostí
  • make <pkg>-graph-depends vytvoriť strom závislostí konkrétneho balíka
  • BR2_GRAPH_OUT=png make graph-build vykresliť čas zostavenia s výstupom PNG
  • make graph-size nakreslite veľkosť balíka

Užitočné skripty

Adresár buildroot má podadresár náradie s užitočnými skriptami. Existuje napríklad skript, ktorý kontroluje správnosť popisov balíkov. To môže byť užitočné pri pridávaní vlastných balíkov (urobím to neskôr). Súbor utils/readme.txt obsahuje popis týchto skriptov.

Vytvorme distribúciu akcií

Je dôležité pripomenúť, že všetky operácie sa vykonávajú v mene bežného používateľa, nie root.
Všetky príkazy sa vykonávajú v buildroot. Balík buildroot už obsahuje sadu konfigurácií pre mnohé bežné dosky a virtualizáciu.

Pozrime sa na zoznam konfigurácií:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Prepnite na konfiguráciu qemu_x86_64_defconfig

make qemu_x86_64_defconfig

A začnite stavať

make

Zostavenie je úspešne dokončené, pozrite sa na výsledky:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Buildroot dal dokopy obrázky, ktoré môžete spustiť v Qemu a zistiť, či fungujú.

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

Výsledkom je systém spustený v qemu:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Vytvorte si vlastnú konfiguráciu dosky

Pridávanie súborov dosky

Pozrime sa na zoznam konfigurácií:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

V zozname vidíme pc_x86_64_efi_defconfig. Našu dosku vytvoríme skopírovaním z konfigurácie:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Okamžite si vytvoríme adresár dosky na uloženie našich skriptov, rootfs-overlay a ďalších potrebných súborov:

mkdir board/my_x86_board

Prepnite na tento defconfig:

make my_x86_board_defconfig

Teraz teda zostava konfigurácie (uložená v .config v koreňovom adresári buildroot) zodpovedá x86-64 legacy(bios) cieľovému bootovaciemu počítaču.

Skopírujte konfiguráciu linux-kernel (užitočné neskôr):

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

Konfigurácia možností zostavenia cez KConfig

Začnime s nastavením:

make menuconfig 

Otvorí sa okno KConfig. Je možné konfigurovať pomocou grafického rozhrania (make nconfig, make xconfig, make gconfig):

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Vstupujeme do prvej sekcie Target Options. Tu môžete vybrať cieľovú architektúru, pre ktorú sa bude zostavovať.

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Možnosti zostavenia – tu sú rôzne možnosti zostavenia. Môžete určiť adresáre so zdrojovými kódmi, počet vlákien zostavenia, zrkadlá na sťahovanie zdrojových kódov a ďalšie nastavenia. Nechajme predvolené nastavenia.

Toolchain – tu sa konfiguruje samotná súprava nástrojov na zostavovanie. Viac o ňom.

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Toolchain type – typ použitého toolchainu. Toto môže byť zabudované do buildroot alebo externého toolchainu (môžete zadať adresár s už vytvoreným adresárom alebo url na stiahnutie). Existujú ďalšie možnosti pre rôzne architektúry. Napríklad pre rameno si môžete jednoducho vybrať verziu externého súboru nástrojov Linaro.

Knižnica C – výber knižnice C. Od toho závisí chod celého systému. Typicky sa používa glibc, ktorý podporuje všetky možné funkcie. Ale môže byť príliš veľký pre vstavaný systém, takže sa často volí uglibc alebo musl. Vyberieme glibc (toto bude neskôr potrebné na použitie systemd).

Séria hlavičiek jadra a vlastných hlavičiek jadra – sa musia zhodovať s verziou jadra, ktoré bude v zostavenom systéme. Pre hlavičky jadra môžete zadať aj cestu k úložisku tarball alebo git.

VERZIE PREkladača GCC - vyberte verziu kompilátora, ktorá sa použije na zostavenie
Povoliť podporu C++ – vyberte, či chcete zostaviť s podporou knižníc c++ v systéme. Budeme to potrebovať neskôr.

Ďalšie možnosti gcc – môžete nastaviť ďalšie možnosti kompilátora. Zatiaľ to nepotrebujeme.

Konfigurácia systému vám umožňuje nastaviť budúce parametre vytvoreného systému:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Väčšina bodov je jasná z názvu. Venujme pozornosť nasledujúcim bodom:
Cesta k tabuľkám používateľov - tabuľka s vytvorenými používateľmi (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Príklad súboru. Používateľ používateľ bude vytvorený s heslom admin, automaticky gid/uid, /bin/sh shell, predvolený používateľ skupiny, člen root skupiny, komentár Foo user

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

Prekryvné adresáre koreňového súborového systému – adresár, ktorý je prekrytý nad skompilovaným target-fs. Pridáva nové súbory a nahrádza existujúce.

Vlastné skripty, ktoré sa majú spustiť pred vytvorením obrazov súborového systému Nechajte skript zatiaľ prázdny.

Poďme do sekcie Kernel

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Tu sa nastavujú nastavenia jadra. Samotné jadro sa konfiguruje cez make linux-menuconfig.
Verziu jadra môžete nastaviť rôznymi spôsobmi: vyberte si z ponúkaných, zadajte verziu manuálne, zadajte úložisko alebo hotový tarball.

Konfigurácia jadra – cesta ku konfigurácii jadra. Môžete si vybrať predvolenú konfiguráciu pre zvolenú architektúru alebo defocnfig z Linuxu. Zdroje Linuxu majú sadu defconfigov pre rôzne cieľové systémy. Môžete nájsť ten, ktorý potrebujete pri pohľade priamo na zdroj tu. Napríklad pre čiernu dosku bíglovej kosti môžete vyberte konfiguráciu.

Časť Cieľové balíky vám umožňuje vybrať, ktoré balíky sa nainštalujú na zostavovaný systém. Nechajme to zatiaľ nezmenené. Naše balíčky pridáme do tohto zoznamu neskôr.
Obrazy súborového systému – zoznam obrazov súborových systémov, ktoré sa majú zostaviť. Pridajte obrázok iso

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Bootloaders - výber zozbieraných bootloaderov. Vyberme si isolinix

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Konfigurácia Systemd

Systemd sa stáva jedným z pilierov linuxu spolu s jadrom a glibc. Preto som jeho nastavenie vytiahol v samostatnom odseku.

Konfiguruje sa cez make menuconfig, potom Target packages → System tools → systemd. Tu môžete určiť, ktoré služby systemd sa nainštalujú a spustia pri spustení systému.

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Ukladanie konfigurácie systému

Túto konfiguráciu uložíme cez KConfig.

Potom uložíme náš defconfig:

make savedefconfig

Konfigurácia jadra Linuxu

Konfigurácia jadra Linuxu sa vyvolá nasledujúcim príkazom:

make linux-menuconfig

Pridajte podporu pre grafickú kartu Virtualbox

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Pridajme podporu integrácie Virtualbox Guest

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Uložiť a ukončiť. DÔLEŽITÉ: konfigurácia sa uloží do output/build/linux-$version/config, ale nie do board/my_x86_board/linux.config

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Preto musíte manuálne skopírovať konfiguráciu do umiestnenia úložiska:

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

Potom vykonáme kompletnú opätovnú montáž celého systému. buildroot neprestavuje to, čo už bolo vytvorené, musíte manuálne zadať balíčky na prestavbu. Aby ste nestrácali čas a nervy, je jednoduchšie úplne prebudovať malý systém):

make clean;make

Po dokončení montáže spustíme VirtualBox (testované na verziách 5.2 a 6.0) s bootovaním z cd-disku Parametre systému:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Počnúc vytvoreným iso:

Buildroot - časť 1. Všeobecné informácie, zostavenie minimálneho systému, konfigurácia cez menu

Zoznam použitých materiálov

  1. Buildroot manuál

Zdroj: hab.com

Pridať komentár