Buildroot – 2. rész. A tábla konfigurációjának létrehozása; külső fa, rootfs-overlay, post-build szkriptek használatával

Ebben a részben áttekintek néhány testreszabási lehetőséget, amelyekre szükségem volt. Ez nem egy teljes lista a buildroot kínálatáról, de ezek meglehetősen funkcionálisak, és nem igényelnek beavatkozást magának a buildroot fájljainak.

A KÜLSŐ mechanizmus használata a testreszabáshoz

Egy korábbi cikkben Megnéztünk egy egyszerű példát a saját konfiguráció hozzáadására úgy, hogy a tábla defconfig-ját és a szükséges fájlokat közvetlenül a Buildroot könyvtárba adjuk.

De ez a módszer nem túl kényelmes, különösen a buildroot frissítésekor. Van egy mechanizmus a probléma megoldására külső fa. Lényege, hogy külön könyvtárban tárolhatod a táblát, a konfigurációkat, a csomagokat és az egyéb könyvtárakat (én például a patch könyvtárat használom a csomagok javítására, további részletek külön részben), és a buildroot maga fogja hozzáadni azokat a a könyvtárát.

Megjegyzés: egyszerre több külső fát is átfedhet, erre van példa a buildroot kézikönyvében

Hozzunk létre egy my_tree könyvtárat, amely a buildroot könyvtár mellett található, és vigyük át a konfigurációnkat oda. A kimenetnek a következő fájlszerkezetnek kell lennie:

[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

Mint látható, a szerkezet általában megismétli a buildroot szerkezetét.

Каталог bizottság esetünkben az egyes táblákhoz tartozó fájlokat tartalmazza:

  • A bef_cr_fs_img.sh egy szkript, amely a célfájlrendszer felépítése után, de képekbe történő csomagolása előtt kerül végrehajtásra. A jövőben is használni fogjuk
  • linux.config – kernelkonfiguráció
  • rootfs_overlay – a célfájlrendszer tetején lévő fedőkönyvtár
  • users.txt – a létrehozandó felhasználókat leíró fájl

Каталог konfigurációk tábláink defconfigját tartalmazza. Nekünk csak egy van.

Csomag - katalógus csomagjainkkal. Kezdetben a buildroot leírásokat és szabályokat tartalmaz korlátozott számú csomag létrehozásához. Később ide adjuk az icewm ablakkezelőt és a Slim grafikus bejelentkezéskezelőt.
Patches — lehetővé teszi a különböző csomagokhoz tartozó javítások kényelmes tárolását. További részletek lent egy külön részben.
Most hozzá kell adnunk a külső fánk leíró fájljait. 3 fájl felelős ezért: external.desc, Config.in, external.mk.

külső.desc tartalmazza a tényleges leírást:

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

Az első sor a cím. A jövőben a buildroot hozzon létre egy változót $(BR2_EXTERNAL_MY_TREE_PATH), amelyet az összeállítás konfigurálásakor kell használni. Például a felhasználói fájl elérési útja a következőképpen állítható be:

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

A második sor egy rövid, ember által is olvasható leírás.

Config.in, external.mk — fájlok a hozzáadott csomagok leírására. Ha nem ad hozzá saját csomagokat, akkor ezek a fájlok üresen maradhatnak. Egyelőre ezt fogjuk tenni.
Most már készen van a külső fánk, amely tartalmazza a kártyánk defconfigját és a szükséges fájlokat. Menjünk a buildroot könyvtárba, és adjuk meg a külső fa használatát:

[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

Az első parancsban az argumentumot használjuk BR2_EXTERNAL=../my_tree/, amely egy külső fa használatát jelzi Egyszerre több külső fa is megadható, ebben az esetben ezt csak egyszer kell megtenni, ezután jön létre a kimenet/.br-external.mk fájl, amely információkat tárol a használt külső fáról:

[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

Fontos! Ebben a fájlban az elérési utak abszolútak lesznek!

A menüben megjelent egy Külső opciók elem:

Buildroot – 2. rész. A tábla konfigurációjának létrehozása; külső fa, rootfs-overlay, post-build szkriptek használatával

Ez az almenü tartalmazza a külső fájunkból származó csomagjainkat. Ez a szakasz jelenleg üres.

Most sokkal fontosabb számunkra, hogy átírjuk a szükséges útvonalakat a külső fa használatához.

Ne feledje, hogy az Összeépítési beállítások → Hely a buildroot konfiguráció mentéséhez részben lesz egy abszolút elérési út a mentett defconfighoz. Az extgernal_tree használatának megadásakor jön létre.

A Rendszerkonfiguráció részben az elérési utakat is javítjuk. Létrehozott felhasználókat tartalmazó táblázathoz:

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

A Kernel részben módosítsa a kernelkonfiguráció elérési útját:

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

Most a külső fánkból származó fájljainkat használjuk fel az összeszerelés során. Amikor egy másik könyvtárba költözünk, vagy frissítjük a buildrootot, minimális problémánk lesz.

Root fs overlay hozzáadása:

Ez a mechanizmus lehetővé teszi a fájlok egyszerű hozzáadását/cseréjét a célfájlrendszerben.
Ha a fájl a gyökér fs fedvényben van, de nem a célban, akkor hozzáadódik
Ha a fájl a gyökér fs fedvényben és a célban van, akkor a rendszer lecseréli.
Először állítsuk be a root fs overlay dir elérési útját. Ezt a Rendszerkonfiguráció → Gyökérfájlrendszer-fedvénykönyvtárak részben teheti meg:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Most hozzunk létre két fájlt.

[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

Az első fájl (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) lecseréli az /etc/hosts fájlt a kész rendszeren. A második fájl (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) hozzáadásra kerül.

Összegyűjtjük és ellenőrizzük:

Buildroot – 2. rész. A tábla konfigurációjának létrehozása; külső fa, rootfs-overlay, post-build szkriptek használatával

Testreszabási szkriptek végrehajtása a rendszerösszeállítás különböző szakaszaiban

Gyakran el kell végeznie néhány munkát a célfájlrendszeren belül, mielőtt azt képekbe csomagolná.

Ezt a Rendszerkonfiguráció részben teheti meg:

Buildroot – 2. rész. A tábla konfigurációjának létrehozása; külső fa, rootfs-overlay, post-build szkriptek használatával

Az első két szkript a célfájlrendszer felépítése után, de még a képekbe történő becsomagolás előtt fut le. A különbség az, hogy a fakeroot szkript a fakeroot kontextusában fut, ami szimulálja a root felhasználóként való munkát.

Az utolsó szkript a rendszerképek létrehozása után fut le. További műveleteket hajthat végre benne, például átmásolhatja a szükséges fájlokat egy NFS-kiszolgálóra, vagy létrehozhat egy képet az eszköz firmware-éről.

Példaként létrehozok egy szkriptet, amely beírja a verziót és a felépítési dátumot a /etc/ mappába.
Először is megadom a fájl elérési útját a külső fájomban:

Buildroot – 2. rész. A tábla konfigurációjának létrehozása; külső fa, rootfs-overlay, post-build szkriptek használatával

És most maga a forgatókönyv:

[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

Összeszerelés után ezt a fájlt láthatja a rendszeren.

A gyakorlatban a script nagy méretűvé válhat. Ezért a valódi projektben egy fejlettebb útvonalat választottam:

  1. Létrehoztam egy könyvtárat (my_tree/board_my_x86_board/inside_fakeroot_scripts), amelyben vannak végrehajtandó szkriptek, sorozatszámokkal. Például: 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Írtam egy szkriptet (my_tree/board_my_x86_board/run_inside_fakeroot.sh), amely átmegy ezen a könyvtáron, és szekvenciálisan végrehajtja a benne található szkripteket
  3. Ezt a szkriptet a tábla beállításainál adta meg a Rendszerkonfiguráció -> A fakeroot környezetben futtatandó egyéni szkriptek ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) részben.

Forrás: will.com

Hozzászólás