Buildroot – část 2. Vytvoření konfigurace vaší desky; pomocí externího stromu, rootfs-overlay, post-build skriptů

V této části se podívám na některé možnosti přizpůsobení, které jsem potřeboval. Toto není úplný seznam toho, co buildroot nabízí, ale jsou docela funkční a nevyžadují zásah do souborů samotného buildroot.

Použití mechanismu EXTERNAL pro přizpůsobení

V předchozím článku Podívali jsme se na jednoduchý příklad přidání vlastní konfigurace přidáním defconfig desky a potřebných souborů přímo do adresáře Buildroot.

Ale tato metoda není příliš pohodlná, zejména při aktualizaci buildroot. Existuje mechanismus, jak tento problém vyřešit vnější strom. Jeho podstatou je, že můžete ukládat board, configs, packages a další adresáře do samostatného adresáře (například já používám adresář patches pro aplikování patchů na balíčky, více podrobností v samostatné sekci) a buildroot je sám přidá k těm v jeho adresář.

Poznámka: můžete překrýt několik externích stromů najednou, příklad je v manuálu buildroot

Vytvořme adresář my_tree, který se nachází vedle adresáře buildroot a přeneseme tam naši konfiguraci. Výstupem by měla být následující struktura souboru:

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Jak můžete vidět, obecně struktura opakuje strukturu buildroot.

Adresář deska obsahuje soubory specifické pro každou desku v našem případě:

  • bef_cr_fs_img.sh je skript, který bude spuštěn po vytvoření cílového souborového systému, ale před jeho zabalením do obrázků. V budoucnu jej využijeme
  • linux.config - konfigurace jádra
  • rootfs_overlay - adresář pro překrytí nad cílovým souborovým systémem
  • users.txt – soubor popisující uživatele, kteří mají být vytvořeni

Adresář configs obsahuje defconfig našich desek. Máme jen jeden.

Balíček - katalog s našimi balíčky. Zpočátku buildroot obsahuje popisy a pravidla pro sestavení omezeného počtu balíčků. Později sem přidáme správce oken icewm a správce grafického přihlášení Slim.
Patche — umožňuje pohodlně ukládat záplaty pro různé balíčky. Více podrobností v samostatné sekci níže.
Nyní musíme přidat soubory popisu pro náš externí strom. Jsou za to zodpovědné 3 soubory: external.desc, Config.in, external.mk.

externí.desc obsahuje skutečný popis:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

První řádek je nadpis. V budoucím buildrootu vytvořte proměnnou $(BR2_EXTERNAL_MY_TREE_PATH), který by měl být použit při konfiguraci sestavy. Například cestu k souboru uživatele lze nastavit takto:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Druhý řádek je krátký, člověku čitelný popis.

Config.in, external.mk — soubory popisující přidané balíčky. Pokud nepřidáte své vlastní balíčky, můžete tyto soubory ponechat prázdné. Zatím to uděláme.
Nyní máme připravený náš externí strom obsahující defconfig naší desky a soubory, které potřebuje. Pojďme do adresáře buildroot a zadejte použití externího stromu:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

V prvním příkazu použijeme argument BR2_EXTERNAL=../muj_strom/, označující použití externího stromu. Můžete zadat několik externích stromů pro použití současně. V tomto případě to stačí udělat pouze jednou a poté se vytvoří soubor output/.br-external.mk, který ukládá informace o použitém externím stromu:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Důležité! Cesty v tomto souboru budou absolutní!

V nabídce se objevila položka Externí možnosti:

Buildroot – část 2. Vytvoření konfigurace vaší desky; pomocí externího stromu, rootfs-overlay, post-build skriptů

Toto podmenu bude obsahovat naše balíčky z našeho externího stromu. Tato sekce je momentálně prázdná.

Nyní je pro nás důležitější přepsat potřebné cesty pro použití externího stromu.

Všimněte si prosím, že v sekci Build options → Location to save buildroot config bude absolutní cesta k uloženému defconfig. Tvoří se v okamžiku určení použití extgernal_tree.

Opravíme také cesty v sekci Konfigurace systému. Pro tabulku s vytvořenými uživateli:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

V části Kernel změňte cestu ke konfiguraci jádra:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

Nyní budou při montáži použity naše soubory z našeho externího stromu. Při přesunu do jiného adresáře nebo aktualizaci buildrootu budeme mít minimum problémů.

Přidání překrytí root fs:

Tento mechanismus vám umožňuje snadno přidávat/nahrazovat soubory v cílovém systému souborů.
Pokud je soubor v překrytí root fs, ale není v cíli, bude přidán
Pokud je soubor v překrytí root fs a v cíli, bude nahrazen.
Nejprve nastavíme cestu ke kořenovému adresáři fs overlay dir. To se provádí v sekci Konfigurace systému → Překryvné adresáře kořenového souborového systému:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nyní vytvoříme dva soubory.

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

První soubor (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) nahradí soubor /etc/hosts na hotovém systému. Druhý soubor (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) bude přidán.

Sbíráme a kontrolujeme:

Buildroot – část 2. Vytvoření konfigurace vaší desky; pomocí externího stromu, rootfs-overlay, post-build skriptů

Spouštění skriptů přizpůsobení v různých fázích sestavování systému

Často je potřeba provést nějakou práci uvnitř cílového souborového systému před jeho zabalením do obrazů.

To lze provést v části Konfigurace systému:

Buildroot – část 2. Vytvoření konfigurace vaší desky; pomocí externího stromu, rootfs-overlay, post-build skriptů

První dva skripty se spouštějí po vytvoření cílového souborového systému, ale před jeho zabalením do obrázků. Rozdíl je v tom, že skript fakeroot se spouští v kontextu fakeroot, který simuluje práci uživatele root.

Poslední skript se provede po vytvoření obrazů systému. Můžete v něm provádět další akce, například zkopírovat potřebné soubory na server NFS nebo vytvořit image firmwaru vašeho zařízení.

Jako příklad vytvořím skript, který zapíše verzi a datum sestavení do /etc/.
Nejprve uvedu cestu k tomuto souboru v mém externím stromu:

Buildroot – část 2. Vytvoření konfigurace vaší desky; pomocí externího stromu, rootfs-overlay, post-build skriptů

A nyní samotný skript:

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Po sestavení můžete tento soubor vidět v systému.

V praxi se může skript zvětšit. Proto jsem ve skutečném projektu zvolil pokročilejší cestu:

  1. Vytvořil jsem adresář (my_tree/board_my_x86_board/inside_fakeroot_scripts), ve kterém jsou skripty ke spuštění se sériovými čísly. Například 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Napsal jsem skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh), který prochází tímto adresářem a postupně spouští skripty v něm obsažené
  3. Tento skript byl zadán v nastavení desky v části Konfigurace systému -> Vlastní skripty pro spouštění v prostředí fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Zdroj: www.habr.com

Přidat komentář