Buildroot — part 2. Creating a configuration for your board; using external tree, rootfs-overlay, post-build scripts.

V tejto časti sa zaoberám niektorými možnosťami prispôsobenia, ktoré som potreboval. Toto nie je úplný zoznam toho, čo ponúka buildroot, ale sú to plne funkčné možnosti, ktoré nevyžadujú zásah do samotných súborov buildroot.

Používanie EXTERNAL mechanizmu na prispôsobenie

V predchádzajúcom článku Bola zohľadnená jednoduchá ukážka pridania vlastnej konfigurácie tak, že sa defconfig doska a potrebné súbory jednoducho pridajú do adresára Buildroot.

Ale tento spôsob nie je veľmi pohodlný, najmä pri aktualizácii buildroot. Na vyriešenie tohto problému existuje mechanizmus external tree. Ide v podstate o to, že v samostatnom adresári je možné uchovávať adresáre board, configs, packages a ďalšie (napríklad ja používam adresár patches na aplikovanie patchov na balíky, podrobnejšie v osobnej sekcii) a buildroot ich sám pridá k tým existujúcim vo svojom adresári.

Poznámka: možno aplikovať viacero external tree naraz, príklad je v príručke buildroot

Vytvoríme adresár my_tree, ktorý sa nachádza vedľa adresára buildroot a prenesieme tam našu konfiguráciu. Na výstupe by sme mali dostať nasledujúcu štruktúru súborov:

[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 adresárov, 7 súborov

Ako je vidno, celková štruktúra opakuje štruktúru buildroot.

Adresár board obsahuje súbory, ktoré sú špecifické pre každú dosku v našom prípade:

  • bef_cr_fs_img.sh — skript, ktorý sa vykoná po zostavení cieľového súborového systému, ale pred zabalením do obrazov. Neskôr ho budeme používať
  • linux.config — konfigurácia jadra
  • rootfs_overlay — adresár na prekrývanie nad cieľovým súborovým systémom
  • users.txt — súbor s popisom vytváraných používateľov

Adresár configs obsahuje defconfigy našich dosiek. V našom prípade je len jeden.

Balíček — adresár s našimi balíkmi. Spočiatku buildroot obsahuje popisy a pravidlá zostavenia obmedzeného počtu balíkov. Neskôr sem pridáme správcu okien icewm a správcu grafického prihlásenia Slim.
Patches — umožňuje pohodlne uchovávať svoje patche pre rôzne balíky. Podrobnejšie v osobnej sekcii neskôr.
Teraz je potrebné pridať súbory popisu nášho external-tree. Na to sú zodpovedné 3 súbory: external.desc, Config.in, external.mk.

external.desc obsahuje vlastne popis:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: Môj jednoduchý external-tree pre článok

Prvý riadok — názov. Následne vytvorte premennú buildroot $(BR2_EXTERNAL_MY_TREE_PATH), ktorú je potrebné použiť pri konfigurácii zostavenia. Napríklad, cestu k súboru s používateľmi môžeme určiť nasledujúcim spôsobom:

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

Druhý riadok — krátky, zrozumiteľný popis.

Config.in, external.mk — súbory na popis pridaných balíkov. Ak nepridávate vlastné balíky, tieto súbory môžu byť prázdne. Zatiaľ to takto urobíme.
Teraz máme pripravené naše external-tree, ktoré obsahuje defconfig našej dosky a potrebné súbory. Prejdime do adresára buildroot, uvedieme, aby sme použili external-tree:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# konfigurácia zapísaná do /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

V prvej príkaze používame argument BR2_EXTERNAL=../my_tree/, ktorý určuje používanie external tree. Môžete nastaviť niekoľko external-trees na používanie naraz, stačí to urobiť len raz, po čom sa vytvorí súbor output/.br-external.mk, ktorý uchováva informácie o používanom external-tree:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
#
# Automaticky generovaný súbor; NEEDITUJTE.
#

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 = Môj jednoduchý external-tree pre článok

Dôležité! V tomto súbore budú cesty absolútne!

V menu sa objavil bod External options:

Buildroot — part 2. Creating a configuration for your board; using external tree, rootfs-overlay, post-build scripts.

V tomto podmenu budú obsahovať naše balíky z nášho external-tree. Momentálne je táto sekcia prázdna.

Teraz je pre nás dôležité prepísať potrebné cesty na používanie external-tree.

Všimnite si, že v sekcii Build options → Location to save buildroot config bude absolútna cesta k uloženému defconfigu. Formuje sa v momente, keď sa určuje používanie external_tree.

Taktiež v sekcii System configuration opravíme cesty. Pre tabuľku s vytváranými používateľmi:

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

V sekcii Kernel zmeníme cestu k konfigurácii jadra:

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

Teraz pri zostavení budú používané naše súbory z nášho external-tree. Pri prenose do iného adresára alebo pri aktualizácii buildroot budeme mať minimum problémov.

Pridanie root fs overlay:

Tento mechanizmus umožňuje jednoducho pridávať/nahrádzať súbory v cieľovom súborovom systéme.
Ak súbor existuje v root fs overlay, ale nie v target, bude pridaný.
Ak je súbor v root fs overlay a v target, bude nahradený.
Najprv nastavíme cestu k adresáru root fs overlay. To sa robí v sekcii Konfigurácia systému → Adresáre overlay koreňového súborového systému:

$(BR2_EXTERNAL_my_tree_PATH)\/board\/my_x86_board\/rootfs_overlay\/

Teraz vytvoríme dva súbory.

[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 
Toto je nový súbor z overlay

Prvý súbor (my_tree\/board\/my_x86_board\/rootfs_overlay\/etc\/hosts) nahradí súbor \/etc\/hosts v hotovom systéme. Druhý súbor (cat my_tree\/board\/my_x86_board\/rootfs_overlay\/new_file.txt) sa pridá.

Skladáme a kontrolujeme:

Buildroot — part 2. Creating a configuration for your board; using external tree, rootfs-overlay, post-build scripts.

Vykonávanie prispôsobovacích skriptov v rôznych fázach zostavovania systému

Často je potrebné vykonať niektoré akcie vo vnútri target-úložného systému predtým, ako bude zabalený do obrazov.

To sa dá urobiť v sekcii Konfigurácia systému:

Buildroot — part 2. Creating a configuration for your board; using external tree, rootfs-overlay, post-build scripts.

Prvé dva skripty sa vykonávajú po zostavení target-úložného systému, ale pred jeho zabalením do obrazov. Rozdiel je v tom, že fakeroot-skript sa vykonáva v kontexte fakeroot, teda imituje prácu od používateľa root.

Posledný skript sa vykonáva už po vytvorení obrazov systému. V ňom môžete vykonávať ďalšie akcie, napríklad kopírovať potrebné súbory na nfs-server alebo vytvoriť obraz svojej firme.

Ako príklad vytvorím skript, ktorý bude zapisovať verziu a dátum zostavenia do \/etc\.
Najprv uvediem cestu k tomuto súboru vo svojom external-tree:

Buildroot — part 2. Creating a configuration for your board; using external tree, rootfs-overlay, post-build scripts.

A teraz 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 zostavení je možné tento súbor v systéme vidieť.

V praxi môže skript narásť. Preto som v reálnom projekte zvolil pokročilejší prístup:

  1. Vytvoril som adresár (my_tree\/board_my_x86_board\/inside_fakeroot_scripts), v ktorom sú skripty na vykonanie s poradovými číslami. Napríklad, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Napísal som skript (my_tree\/board_my_x86_board\/run_inside_fakeroot.sh), ktorý prechádza týmto adresárom a postupne vykonáva skripty, ktoré v ňom sú
  3. Tento skript som uviedol v nastaveniach dosky v sekcii Konfigurácia systému → Vlastné skripty na vykonanie vo vnútri prostredia fakeroot ($(BR2_EXTERNAL_my_tree_PATH)\/board\/my_x86_board\/run_inside_fakeroot.sh)

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster