Buildroot - del 2. Skapa din styrelsekonfiguration; med hjälp av externt träd, rootfs-overlay, efterbyggda skript

I det här avsnittet tittar jag på några av de anpassningsalternativ som jag behövde. Det här är inte en komplett lista över vad buildroot erbjuder, men de är ganska funktionella och kräver inte ingrepp i själva buildroot-filerna.

Använder den EXTERNA mekanismen för anpassning

I en tidigare artikel Vi tittade på ett enkelt exempel på att lägga till din egen konfiguration genom att lägga till kortets defconfig och de nödvändiga filerna direkt till Buildroot-katalogen.

Men den här metoden är inte särskilt bekväm, särskilt när du uppdaterar buildroot. Det finns en mekanism för att lösa detta problem yttre träd. Kärnan är att du kan lagra kort, konfigurationer, paket och andra kataloger i en separat katalog (till exempel använder jag patcharkatalogen för att applicera patchar på paket, mer information i ett separat avsnitt) och buildroot själv lägger till dem till dem i dess katalog.

Notera: du kan lägga över flera externa träd samtidigt, det finns ett exempel i byggrotsmanualen

Låt oss skapa en katalog my_tree, som ligger bredvid buildroot-katalogen och överför vår konfiguration dit. Utdata ska vara 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 directories, 7 files

Som du kan se, i allmänhet upprepar strukturen strukturen för buildroot.

Katalog ombord innehåller filer som är specifika för varje styrelse i vårt fall:

  • bef_cr_fs_img.sh är ett skript som kommer att köras efter att målfilsystemet byggts, men innan det paketeras till bilder. Vi kommer att använda det i framtiden
  • linux.config - kärnkonfiguration
  • rootfs_overlay - katalog som ska överläggas ovanpå målfilsystemet
  • users.txt - en fil som beskriver användarna som ska skapas

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

Paket - katalog med våra paket. Till en början innehåller buildroot beskrivningar och regler för att bygga ett begränsat antal paket. Senare kommer vi att lägga till icewm-fönsterhanteraren och Slim grafiska inloggningshanteraren här.
Plåster — gör att du bekvämt kan lagra dina plåster för olika paket. Mer information i ett separat avsnitt nedan.
Nu måste vi lägga till beskrivningsfilerna för vårt externa träd. Det finns 3 filer som ansvarar för detta: external.desc, Config.in, external.mk.

extern.desc innehåller den faktiska beskrivningen:

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

Den första raden är titeln. Skapa en variabel i framtiden buildroot $(BR2_EXTERNAL_MY_TREE_PATH), som ska användas när du konfigurerar enheten. Till exempel kan sökvägen till användarfilen ställas in på följande sätt:

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

Den andra raden är en kort, läsbar beskrivning.

Config.in, extern.mk — filer för att beskriva tillagda paket. Om du inte lägger till dina egna paket kan dessa filer lämnas tomma. För nu är det vad vi kommer att göra.
Nu har vi vårt externa träd redo, som innehåller defconfig för vårt kort och de filer som det behöver. Låt oss gå till buildroot-katalogen och ange att externt träd ska användas:

[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

I det första kommandot använder vi argumentet BR2_EXTERNAL=../mitt_träd/, vilket indikerar användningen av ett externt träd. Du kan ange flera externa träd för användning samtidigt. I det här fallet behöver du bara göra detta en gång, varefter en filutdata/.br-external.mk skapas som lagrar information om det externa trädet som används:

[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

Viktig! Sökvägarna i den här filen kommer att vara absoluta!

Ett externt alternativ har dykt upp i menyn:

Buildroot - del 2. Skapa din styrelsekonfiguration; med hjälp av externt träd, rootfs-overlay, efterbyggda skript

Den här undermenyn kommer att innehålla våra paket från vårt externa träd. Det här avsnittet är för närvarande tomt.

Nu är det viktigare för oss att skriva om de nödvändiga vägarna för att använda externt träd.

Observera att i avsnittet Byggalternativ → Plats för att spara buildroot-konfiguration kommer det att finnas en absolut sökväg till den sparade defconfig. Det bildas vid det ögonblick då man specificerar användningen av extgernal_tree.

Vi kommer också att korrigera sökvägarna i avsnittet Systemkonfiguration. För en tabell med skapade användare:

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

I avsnittet Kärna ändrar du 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 externa träd att användas under montering. När vi flyttar till en annan katalog eller uppdaterar byggroten kommer vi att ha ett minimum av problem.

Lägga till root fs-överlägg:

Denna mekanism låter dig enkelt lägga till/ersätta filer i målfilsystemet.
Om filen är i root fs-överlagring, men inte i mål, kommer den att läggas till
Om filen är i root fs-överlagring och i mål kommer den att ersättas.
Låt oss först ställa in sökvägen till root fs overlay dir. Detta görs i avsnittet Systemkonfiguration → Överlagringskataloger för rotfilsystem:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Låt oss nu 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 på 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 in och kontrollerar:

Buildroot - del 2. Skapa din styrelsekonfiguration; med hjälp av externt träd, rootfs-overlay, efterbyggda skript

Utförande av anpassningsskript vid olika stadier av systemmonteringen

Ofta behöver du utföra en del arbete i målfilsystemet innan det paketeras till bilder.

Detta kan göras i avsnittet Systemkonfiguration:

Buildroot - del 2. Skapa din styrelsekonfiguration; med hjälp av externt träd, rootfs-overlay, efterbyggda skript

De två första skripten exekveras efter att målfilsystemet har byggts, men innan det paketeras till bilder. Skillnaden är att fakeroot-skriptet körs i fakeroot-sammanhang, vilket simulerar arbete som root-användare.

Det sista skriptet exekveras efter att systemavbildningarna har skapats. Du kan utföra ytterligare åtgärder i den, till exempel kopiera nödvändiga filer till en NFS-server eller skapa en bild av enhetens firmware.

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

Buildroot - del 2. Skapa din styrelsekonfiguration; med hjälp av externt träd, rootfs-overlay, efterbyggda skript

Och nu själva manuset:

[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 montering kan du se den här filen på systemet.

I praktiken kan manuset bli stort. Därför tog jag en mer avancerad väg i det verkliga projektet:

  1. Jag skapade en katalog (my_tree/board_my_x86_board/inside_fakeroot_scripts) där det finns skript som ska köras, med serienummer. Till exempel, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Jag skrev ett skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) som går igenom den här katalogen och sekventiellt kör skripten som finns i den
  3. Angav detta skript i kortets inställningar i avsnittet Systemkonfiguration -> Anpassade skript som ska köras i fakeroot-miljön ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Källa: will.com

Lägg en kommentar