Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

úvod

V této sérii článků chci zkontrolovat systém sestavení distribuce buildroot a podělit se o své zkušenosti s jeho přizpůsobením. Budou zde praktické zkušenosti s tvorbou malého OS s grafickým rozhraním a minimální funkčností.

Především si nepleťte systém sestavení s distribucí. Buildroot dokáže sestavit systém ze sady balíčků, které jsou mu nabízeny. Buildroot je postaven na makefiles, a proto má spoustu možností přizpůsobení. Nahradit balíček jinou verzí, přidat vlastní balíček, změnit pravidla pro sestavování balíčku, přizpůsobit souborový systém po instalaci všech balíčků? To vše může být kořenem.

V Rusku se používá buildroot, ale podle mého názoru je tam málo ruskojazyčných informací pro začátečníky.

Účelem práce je sestavení distribuční sady s živým stahováním, rozhraním icewm a prohlížečem. Cílovou platformou je virtualbox.

Proč budovat vlastní distribuci? Často potřebujete omezenou funkčnost s omezenými zdroji. Častěji v automatizaci musíte vytvořit firmware. Přizpůsobení obecné distribuce odstraněním nadbytečných balíčků a jejich převedením na firmware je časově náročnější způsob než sestavování nové distribuce. Používání Gentoo má také svá omezení.

Systém Buildroot je velmi výkonný, ale nic za vás neudělá. Může pouze povolit a automatizovat proces montáže.

Alternativní systémy sestavení (yocto, otevřený systém sestavení atd.) se neberou v úvahu a ani je nesrovnávají.

Kde získat a jak začít

Web projektu - buildroot.org. Zde si můžete stáhnout nejnovější verzi a přečíst si příručku. Tam můžete také kontaktovat komunitu, je tam bug tracker, mail-listy a irc-channel.

Buildroot pracuje s defconfigs pro cílovou sestavovací desku. Defconfig je konfigurační soubor, který obsahuje pouze možnosti, které nemají výchozí hodnotu. Je to on, kdo určuje, co a jak se bude sbírat. V tomto případě můžete samostatně nakonfigurovat konfigurace busybox, linux-kernel, uglibc, u-boot a barebox bootloader, ale všechny budou vázány na cílovou desku.
Po rozbalení staženého archivu nebo klonování z git získáme buildroot připravený k práci. Více o adresářové struktuře si můžete přečíst v manuálu, já vám řeknu ty nejdůležitější:

deska — adresář se soubory specifickými pro každou desku. Mohou to být skripty pro zobrazování obrazů systému (iso, sdcart, cpio a další), překryvný adresář, konfigurace jádra atd.
configs - aktuální defconfig desky. Defconfig je neúplná konfigurace desky. Ukládá pouze parametry jiné než výchozí nastavení.
dl - adresář se staženými zdrojovými kódy / soubory pro sestavení
výstup/cíl - sestavený souborový systém přijatého OS. V budoucnu se z něj vytvoří obrázky ke stažení / instalaci
výstup/hostitel - hostitelské nástroje pro montáž
výstup/sestavení - sestavené balíčky

Konfigurace sestavy se provádí pomocí KConfig. Stejný systém se používá k sestavení linuxového jádra. Seznam nejčastěji používaných příkazů (spouštět v adresáři buildroot):

  • make menuconfig - vyvolá konfiguraci sestavení. Můžete také použít GUI (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - volání konfigurace jádra.
  • make clean - čisté výsledky sestavení (vše, co je uloženo ve výstupu)
  • make - budovat systém. Tím se neobnoví již vytvořené procesy.
  • make defconfig_name - přepnutí konfigurace na konkrétní defconfig
  • make list-defconfigs - zobrazí seznam defconfigů
  • make source - pouze stáhnout instalační soubory, žádné sestavení.
  • make help - zobrazení seznamu možných příkazů

Důležité poznámky a užitečné rady

Buildroot nepřestavuje již vytvořené balíčky! Proto může nastat situace, kdy je potřeba kompletní zpětná montáž.

Pomocí příkazu můžete znovu sestavit jeden balíček make packagename-rebuild. Můžete například znovu sestavit linuxové jádro:

make linux-rebuild

Buildroot ukládá stav libovolného balíčku vytvořením souborů .stamp v adresáři output/build/$packagename:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Proto je možné znovu sestavit root-fs a obrazy bez přestavby balíčků:

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

Užitečné proměnné

buildroot má sadu proměnných pro snadnou konfiguraci

  • $TOPDIR - kořenový adresář buildroot
  • $BASEDIR - adresář OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - hostitelské fs, staging fs, cílové fs sestavení adresáře.
  • $BUILD_DIR - adresář s rozbalenými a sestavenými balíčky

Vizualizace

buildroot má schopnost vizualizace. V konečném systému můžete vytvořit diagram závislosti, graf doby sestavení, graf velikosti balíčku. Výsledky jako soubory pdf (můžete si vybrat z svn,png) v adresáři output/graph.

Příklady renderovacích příkazů:

  • make graph-depends vytvořit strom závislostí
  • make <pkg>-graph-depends vytvořit strom závislostí konkrétního balíčku
  • BR2_GRAPH_OUT=png make graph-build vykreslete graf doby sestavení s výstupem PNG
  • make graph-size vykreslete velikost paketu

Užitečné skripty

Adresář buildroot má podadresář utils s užitečnými skripty. Existuje například skript, který kontroluje správnost popisů balíčků. To může být užitečné při přidávání vlastních balíčků (udělám to později). Soubor utils/readme.txt obsahuje popis těchto skriptů.

Vytvořme distribuci akcií

Je důležité připomenout, že všechny operace jsou prováděny jménem běžného uživatele, nikoli root.
Všechny příkazy jsou prováděny v buildroot. Distribuce buildroot již má sadu konfigurací pro mnoho běžných desek a virtualizace.

Podívejte se na seznam konfigurací:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Přepněte na konfiguraci qemu_x86_64_defconfig

make qemu_x86_64_defconfig

A začněte stavět

make

Sestavení je úspěšně dokončeno, podívejte se na výsledky:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Buildroot dal dohromady obrázky, které můžete spustit v Qemu a zjistit, zda fungují.

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

Výsledkem je systém běžící v qemu:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Vytvořte si vlastní konfiguraci desky

Přidávání souborů desky

Podívejte se na seznam konfigurací:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

V seznamu vidíme pc_x86_64_efi_defconfig. Naši desku vytvoříme zkopírováním z konfigurace:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Okamžitě vytvořte adresář desky pro uložení našich skriptů, rootfs-overlay a dalších potřebných souborů:

mkdir board/my_x86_board

Přepněte na tento defconfig:

make my_x86_board_defconfig

Takže nyní konfigurace sestavení (uložená v .config v kořenovém adresáři buildroot) odpovídá cílovému počítači x86-64 legacy (bios) při spuštění.

Zkopírujte konfiguraci linux-kernel (užitečné později):

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

Konfigurace možností sestavení pomocí KConfig

Začneme nastavením:

make menuconfig 

Otevře se okno KConfig. Je možné konfigurovat pomocí grafického rozhraní (make nconfig, make xconfig, make gconfig):

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Vstupujeme do první sekce Target Options. Zde můžete vybrat cílovou architekturu, pro kterou bude montáž provedena.

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Možnosti sestavení – zde jsou různé možnosti sestavení. Můžete zadat adresáře se zdrojovými kódy, počet vláken sestavení, zrcadla pro stahování zdrojových kódů a další nastavení. Ponechme výchozí nastavení.

Toolchain – zde se konfiguruje samotná sada nástrojů pro sestavení. Více o něm.

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Toolchain type – typ použitého toolchainu. To lze zabudovat do kořenového adresáře sestavení nebo externího toolchainu (můžete zadat adresář s již vytvořeným adresářem nebo adresu URL pro stažení). Existují další možnosti pro různé architektury. Například pro rameno můžete jednoduše vybrat verzi externího toolchainu Linaro.

Knihovna C - výběr knihovny C. Na tom závisí chod celého systému. Obvykle se používá glibc, který podporuje všechny možné funkce. Ale pro vestavěný systém může být příliš velký, takže se často volí uglibc nebo musl. Zvolíme glibc (to bude později vyžadováno pro použití systemd).

Série Kernel Headers a Custom Kernel Headers – musí odpovídat verzi jádra, které bude v budovaném systému. U hlaviček jádra můžete také zadat cestu k tarballu nebo k úložišti git.

VERZE PŘEKLADAČE GCC - vyberte verzi kompilátoru, která bude použita pro sestavení
Povolit podporu C++ – vyberte sestavení s podporou knihoven C++ v systému. Budeme to potřebovat později.

Další možnosti gcc – můžete nastavit další možnosti kompilátoru. Zatím to nepotřebujeme.

Konfigurace systému umožňuje nastavit budoucí parametry vytvářeného systému:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Většina bodů je jasná z názvu. Věnujme pozornost následujícím bodům:
Cesta k tabulkám uživatelů - tabulka s vytvořenými uživateli (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Příklad souboru. Uživatel uživatel bude vytvořen s heslem admin, automaticky gid/uid, /bin/sh shell, výchozí uživatel skupiny, člen root skupiny, komentář 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

Překryvné adresáře kořenového souborového systému – adresář, který je překryt nad zkompilovaným target-fs. Přidává nové soubory a nahrazuje stávající.

Vlastní skripty ke spuštění před vytvořením obrazů souborového systému Nechte skript zatím prázdný.

Pojďme do sekce Kernel

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Zde se nastavují nastavení jádra. Samotné jádro se konfiguruje pomocí make linux-menuconfig.
Verzi jádra můžete nastavit různými způsoby: vybrat si z nabízených, zadat verzi ručně, určit úložiště nebo hotový tarball.

Konfigurace jádra - cesta ke konfiguraci jádra. Můžete si vybrat výchozí konfiguraci pro vybranou architekturu nebo defocnfig z Linuxu. Zdroje Linuxu mají sadu defconfigů pro různé cílové systémy. Můžete najít ten, který potřebujete podíváme se přímo na zdroj zde. Například pro černou desku bíglích kostí můžete vyberte config.

Sekce Cílové balíčky vám umožňuje vybrat, které balíčky budou nainstalovány na cílový systém. Nechme to zatím beze změny. Později do tohoto seznamu přidáme naše balíčky.
Obrazy souborového systému – seznam obrazů souborového systému, které mají být vytvořeny. Přidejte obrázek iso

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Bootloadery - výběr shromážděných bootloaderů. Vyberte isolinix

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Konfigurace Systemd

Systemd se spolu s jádrem a glibc stává jedním z pilířů linuxu. Proto jsem jeho nastavení vyňal v samostatném odstavci.

Konfiguruje se přes make menuconfig, poté Cílové balíčky → Systémové nástroje → systemd. Zde můžete určit, které služby systemd se nainstalují a spustí při startu systému.

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Uložení konfigurace systému

Tuto konfiguraci uložíme přes KConfig.

Poté uložíme naši defconfig:

make savedefconfig

Konfigurace linuxového jádra

Konfigurace linuxového jádra se vyvolá následujícím příkazem:

make linux-menuconfig

Přidejte podporu pro grafickou kartu Virtualbox

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Přidejte podporu integrace hosta Virtualbox

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Uložíme a odejdeme. DŮLEŽITÉ: konfigurace se uloží do output/build/linux-$version/config, ale ne do board/my_x86_board/linux.config

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Proto musíte ručně zkopírovat konfiguraci do umístění úložiště:

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

Poté provedeme kompletní zpětnou montáž celého systému. buildroot nepřestavuje to, co již bylo sestaveno, musíte ručně zadat balíčky, které chcete znovu sestavit. Abychom neztráceli čas a nervy, je jednodušší přestavět malý systém jako celek):

make clean;make

Po dokončení montáže spustíme VirtualBox (testováno na verzích 5.2 a 6.0) s bootováním z cd-disku.

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Počínaje vytvořeným iso:

Buildroot – Část 1 – Přehled, Minimální sestavení systému, Nastavení nabídky

Seznam použitých materiálů

  1. Buildroot manuál

Zdroj: www.habr.com

Přidat komentář