ú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 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:
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íčkuBR2_GRAPH_OUT=png make graph-build
vykreslete graf doby sestavení s výstupem PNGmake 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í:
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 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:
Vytvořte si vlastní konfiguraci desky
Přidávání souborů desky
Podívejte se na seznam konfigurací:
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):
Vstupujeme do první sekce Target Options. Zde můžete vybrat cílovou architekturu, pro kterou bude montáž provedena.
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.
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:
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 (
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
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
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
Bootloadery - výběr shromážděných bootloaderů. Vyberte isolinix
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.
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
Přidejte podporu integrace hosta Virtualbox
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
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.
Počínaje vytvořeným iso:
Seznam použitých materiálů
- Buildroot manuál
Zdroj: www.habr.com