Buildroot — del 2. Skapa konfiguration för din enhet; anvĂ€nda external tree, rootfs-overlay, post-build skript

I detta avsnitt behandlar jag en del av de anpassningsmöjligheter som jag behövde. Det Àr inte en komplett lista över vad buildroot erbjuder, men de Àr funktionella och krÀver inte ingrepp i buildroot-filerna.

AnvÀndning av EXTERNAL-mekanismen för anpassning

I den föregÄende artikeln ett enkelt exempel pÄ att lÀgga till sin egen konfiguration, genom att lÀgga till defconfig för kortet och nödvÀndiga filer direkt i Buildroot-katalogen.

Men denna metod Àr inte sÀrskilt praktisk, sÀrskilt vid uppdateringar av buildroot. För att lösa detta problem finns det en mekanism external tree. I grunden innebÀr detta att man kan lagra kataloger för board, configs, packages och andra i en separat katalog (till exempel anvÀnder jag katalogen patches för att applicera patchar pÄ paketen, mer om detta i ett separat avsnitt) och buildroot kommer sjÀlv att lÀgga till dem till de som redan finns i sin katalog.

AnmÀrkning: flera external trees kan appliceras samtidigt, det finns ett exempel i buildroot-guiden.

Skapa en katalog my_tree, som ligger bredvid buildroot-katalogen och flytta vÄr konfiguration dit. Resultatet bör bli följande filstruktur:

[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 kataloger, 7 filer

Som man kan se, upprepar strukturen i stort sett buildroot-strukturen.

Katalog board innehÄller filer som Àr specifika för varje kort i vÄrt fall:

  • bef_cr_fs_img.sh — ett skript som kommer att köras efter byggandet av mĂ„lfilsystemet, men före packningen av det i bilder. Vi kommer att anvĂ€nda det senare.
  • linux.config — kĂ€rnkonfiguration
  • rootfs_overlay — en katalog för att applicera ovanpĂ„ mĂ„lfilsystemet
  • users.txt — en fil med beskrivning av de anvĂ€ndare som skapas

Katalog configs innehÄller defconfig för vÄra kort. Vi har bara en.

Package — katalogen med vĂ„ra paket. Ursprungligen innehĂ„ller buildroot beskrivningar och byggregler för ett begrĂ€nsat antal paket. Senare kommer vi att lĂ€gga till fönsterhanteraren icewm och inloggningshanteraren Slim.
Patches — gör att man enkelt kan lagra sina patchar för olika paket. Mer om detta i ett separat avsnitt lĂ€ngre fram.
Nu behöver vi lÀgga till beskrivningsfilerna för vÄrt external-tree. Det ansvarar tre filer: external.desc, Config.in, external.mk.

external.desc innehÄller sjÀlva beskrivningen:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: Min enkla externa trÀd för artikel

Den första raden Àr namnet. I fortsÀttningen kommer buildroot att skapa en variabel $(BR2_EXTERNAL_MY_TREE_PATH), som ska anvÀndas vid konfigureringen av bygget. Till exempel kan sökvÀgen till filen med anvÀndare anges som följer:

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

Den andra raden Àr en kort, begriplig beskrivning.

Config.in, external.mk — filer för att beskriva tillagda paket. Om du inte lĂ€gger till egna paket, kan dessa filer lĂ€mnas tomma. SĂ„ kommer vi att göra för tillfĂ€llet.
Nu har vi vÄrt external-tree klart, som innehÄller defconfig för vÄrt kort och nödvÀndiga filer. Vi gÄr till buildroot-katalogen och anger att vi ska anvÀnda external-tree:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# konfiguration skriven till /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

I det första kommandot anvÀnder vi argumentet BR2_EXTERNAL=../my_tree/, som anger att vi anvÀnder external tree. Flera external-tree kan anges samtidigt. Det Àr tillrÀckligt att göra detta en gÄng, varefter en fil output/.br-external.mk skapas som lagrar information om det anvÀnda external-tree:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Autogenerated file; FÅ INTE REDIGERA.
#

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 = Min enkla externa trÀd för artikel

Viktigt! I denna fil kommer sökvÀgarna att vara absoluta!

Det har tillkommit ett alternativ i menyn: External options:

Buildroot — del 2. Skapa konfiguration för din enhet; anvĂ€nda external tree, rootfs-overlay, post-build skript

I denna undermeny kommer vÄra paket frÄn vÄrt external-tree att finnas. För tillfÀllet Àr denna sektion tom.

Nu Àr det viktigare för oss att skriva om nödvÀndiga sökvÀgar för att anvÀnda external-tree.

Observera att i avsnittet Build options → Location to save buildroot config, kommer det att finnas en absolut sökvĂ€g till den sparade defconfigen. Den skapas vid angivandet av anvĂ€ndning av external_tree.

I avsnittet System configuration kommer vi ocksÄ att justera sökvÀgarna. För tabellen med skapade anvÀndare:

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

I avsnittet Kernel Àndrar vi sökvÀgen till kÀrnkonfigurationen:

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

Nu kommer vÄra filer frÄn vÄrt external-tree att anvÀndas vid bygget. Flyttas vi till en annan katalog eller uppdaterar buildroot, kommer vi att ha minimalt med problem.

LĂ€gg till root fs overlay:

Denna mekanism gör det enkelt att lÀgga till/ersÀtta filer i target-filsystemet.
Om filen finns i root fs overlay men inte i target, kommer den att lÀggas till.
Om filen finns i bÄde root fs overlay och target, kommer den att ersÀttas.
Först anger vi sökvĂ€gen till root fs overlay-katalogen. Detta görs i avsnittet Systemkonfiguration → Root filesystem overlay directories:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nu ska vi skapa tvÄ filer.

[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

Den första filen (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) kommer att ersÀtta filen /etc/hosts i det fÀrdiga systemet. Den andra filen (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) kommer att lÀggas till.

Vi samlar ihop och kontrollerar:

Buildroot — del 2. Skapa konfiguration för din enhet; anvĂ€nda external tree, rootfs-overlay, post-build skript

Körning av anpassningsskript vid olika steg i systemuppbyggnaden.

Det Àr ofta nödvÀndigt att utföra vissa ÄtgÀrder inom target-filssystemet innan det packas in i bilder.

Detta kan göras i avsnittet Systemkonfiguration:

Buildroot — del 2. Skapa konfiguration för din enhet; anvĂ€nda external tree, rootfs-overlay, post-build skript

De första tvÄ skripten körs efter att target-filssystemet har byggts, men före packningen i bilder. Skillnaden Àr att fakeroot-skriptet körs i fakeroot-kontext, det vill sÀga det imiterar arbete frÄn anvÀndaren root.

Det sista skriptet körs efter att systembilderna har skapats. HÀr kan man utföra ytterligare ÄtgÀrder, till exempel kopiera de nödvÀndiga filerna till en nfs-server eller skapa en bild av sin enhets firmware.

Som exempel kommer jag att skapa ett skript som skriver versionen och byggdatumet till /etc/.
Först anger jag sökvÀgen till denna fil i mitt externa trÀd:

Buildroot — del 2. Skapa konfiguration för din enhet; anvĂ€nda external tree, rootfs-overlay, post-build skript

Och nu sjÀlva skriptet:

[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

Efter byggandet kan denna fil ses i systemet.

I praktiken kan skriptet bli stort. SÄ i ett verkligt projekt valde jag en mer avancerad vÀg:

  1. Skapade en katalog (my_tree/board_my_x86_board/inside_fakeroot_scripts) dÀr skripten som ska köras ligger, numrerade i ordning. Till exempel, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh.
  2. Skrev skriptet (my_tree/board_my_x86_board/run_inside_fakeroot.sh) som gÄr igenom denna katalog och kör skripten i ordning.
  3. Angav detta skript i plattans instĂ€llningar i avsnittet Systemkonfiguration → Anpassade skript att köra inuti fakeroot-miljön ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh).

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster