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
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:
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:
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:
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:
É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:
- 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
- Í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
- 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