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

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