Buildroot - časť 2. Vytvorenie konfigurácie dosky; pomocou externého stromu, rootfs-overlay, post-build skriptov

V tejto časti sa pozriem na niektoré možnosti prispôsobenia, ktoré som potreboval. Toto nie je úplný zoznam toho, čo buildroot ponúka, ale sú celkom funkčné a nevyžadujú zásah do súborov samotného buildroot.

Použitie EXTERNÉHO mechanizmu na prispôsobenie

V predchádzajúcom článku Pozreli sme sa na jednoduchý príklad pridania vlastnej konfigurácie pridaním defconfig dosky a potrebných súborov priamo do adresára Buildroot.

Ale táto metóda nie je príliš pohodlná, najmä pri aktualizácii buildroot. Existuje mechanizmus na vyriešenie tohto problému vonkajší strom. Jeho podstatou je, že dosku, konfigurácie, balíky a ďalšie adresáre môžete ukladať do samostatného adresára (ja napríklad používam adresár patches na aplikáciu záplat na balíky, viac podrobností v samostatnej sekcii) a samotný buildroot ich pridá k tým v jeho adresár.

Poznámka: môžete prekryť niekoľko externých stromov naraz, príklad je v príručke buildroot

Vytvorme adresár my_tree, ktorý sa nachádza vedľa adresára buildroot a prenesieme tam našu konfiguráciu. Výstupom by mala byť nasledujúca štruktúra súboru:

[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

Ako môžete vidieť, vo všeobecnosti štruktúra opakuje štruktúru buildroot.

adresár doska obsahuje súbory špecifické pre každú dosku v našom prípade:

  • bef_cr_fs_img.sh je skript, ktorý sa spustí po vytvorení cieľového súborového systému, ale pred jeho zabalením do obrázkov. V budúcnosti to využijeme
  • linux.config - konfigurácia jadra
  • rootfs_overlay - adresár na prekrytie nad cieľovým súborovým systémom
  • users.txt - súbor popisujúci užívateľov, ktorí majú byť vytvorení

adresár configs obsahuje defconfig našich dosiek. Máme len jeden.

Balíček - katalóg s našimi balíkmi. Na začiatku obsahuje buildroot popisy a pravidlá pre zostavovanie obmedzeného počtu balíkov. Neskôr sem pridáme správcu okien icewm a správcu grafického prihlásenia Slim.
Patche — umožňuje vám pohodlne ukladať záplaty pre rôzne balíčky. Viac podrobností v samostatnej časti nižšie.
Teraz musíme pridať popisné súbory pre náš externý strom. Sú za to zodpovedné 3 súbory: external.desc, Config.in, external.mk.

externý.desc obsahuje skutočný popis:

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

Prvý riadok je názov. V budúcom buildroot vytvorte premennú $(BR2_EXTERNAL_MY_TREE_PATH), ktorý by sa mal použiť pri konfigurácii zostavy. Napríklad cestu k súboru používateľa je možné nastaviť takto:

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

Druhý riadok je krátky, ľudsky čitateľný popis.

Config.in, external.mk — súbory na popis pridaných balíkov. Ak nepridáte svoje vlastné balíčky, tieto súbory môžu zostať prázdne. Zatiaľ to tak urobíme.
Teraz máme pripravený náš externý strom, ktorý obsahuje defconfig našej dosky a súbory, ktoré potrebuje. Poďme do adresára buildroot a špecifikujeme použitie 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 prvom príkaze použijeme argument BR2_EXTERNAL=../môj_strom/, čo naznačuje použitie externého stromu. Môžete určiť niekoľko externých stromov, ktoré sa majú použiť súčasne. V tomto prípade to stačí urobiť raz, potom sa vytvorí súbor output/.br-external.mk, ktorý ukladá informácie o použitom externom strome:

[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 súbore budú absolútne!

V ponuke sa objavila položka Externé možnosti:

Buildroot - časť 2. Vytvorenie konfigurácie dosky; pomocou externého stromu, rootfs-overlay, post-build skriptov

Toto podmenu bude obsahovať naše balíčky z nášho externého stromu. Táto sekcia je momentálne prázdna.

Teraz je pre nás dôležitejšie prepísať potrebné cesty na použitie externého stromu.

Všimnite si prosím, že v sekcii Build options → Location to save buildroot config bude absolútna cesta k uloženému defconfig. Vytvára sa v momente špecifikácie použitia extgernal_tree.

Opravíme aj cesty v časti Konfigurácia systému. Pre tabuľku s vytvorenými používateľmi:

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

V časti Kernel zmeňte cestu ku konfigurácii jadra:

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

Teraz sa pri montáži použijú naše súbory z nášho externého stromu. Pri presune do iného adresára alebo aktualizácii buildroot budeme mať minimum problémov.

Pridanie koreňového prekrytia fs:

Tento mechanizmus vám umožňuje jednoducho pridávať/nahrádzať súbory v cieľovom súborovom systéme.
Ak je súbor v koreňovom prekrytí fs, ale nie v cieľovom, bude pridaný
Ak je súbor v koreňovom prekrytí fs a v cieli, bude nahradený.
Najprv nastavíme cestu ku koreňovému adresáru fs overlay dir. Urobíte to v časti Konfigurácia systému → Prekryvné adresáre 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 
This is new file from overlay

Prvý súbor (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) nahradí súbor /etc/hosts na hotovom systéme. Druhý súbor (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) bude pridaný.

Zhromažďujeme a kontrolujeme:

Buildroot - časť 2. Vytvorenie konfigurácie dosky; pomocou externého stromu, rootfs-overlay, post-build skriptov

Vykonávanie skriptov prispôsobenia v rôznych fázach zostavovania systému

Často musíte vykonať nejakú prácu v cieľovom súborovom systéme predtým, ako sa zabalí do obrázkov.

Môžete to urobiť v časti Konfigurácia systému:

Buildroot - časť 2. Vytvorenie konfigurácie dosky; pomocou externého stromu, rootfs-overlay, post-build skriptov

Prvé dva skripty sa vykonajú po vytvorení cieľového súborového systému, ale pred jeho zabalením do obrázkov. Rozdiel je v tom, že fakeroot skript sa vykonáva v kontexte fakeroot, ktorý simuluje prácu ako root.

Posledný skript sa vykoná po vytvorení obrazov systému. Môžete v ňom vykonávať ďalšie akcie, napríklad skopírovať potrebné súbory na server NFS alebo vytvoriť obraz firmvéru zariadenia.

Ako príklad vytvorím skript, ktorý zapíše verziu a dátum zostavenia do /etc/.
Najprv uvediem cestu k tomuto súboru v mojom externom strome:

Buildroot - časť 2. Vytvorenie konfigurácie dosky; pomocou externého stromu, rootfs-overlay, post-build skriptov

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í môžete tento súbor vidieť v systéme.

V praxi sa môže skript zväčšiť. Preto som v skutočnom projekte zvolil pokročilejšiu cestu:

  1. Vytvoril som adresár (my_tree/board_my_x86_board/inside_fakeroot_scripts), v ktorom sú skripty na spustenie, so sériový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 spúšťa skripty v ňom obsiahnuté
  3. Tento skript ste špecifikovali v nastaveniach dosky v časti Konfigurácia systému -> Vlastné skripty na spustenie v prostredí fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Zdroj: hab.com

Pridať komentár