Buildroot - del 2. Opprette brettkonfigurasjonen din; ved hjelp av eksternt tre, rootfs-overlegg, post-build-skript

I denne delen ser jeg pÄ noen av tilpasningsalternativene jeg trengte. Dette er ikke en fullstendig liste over hva buildroot tilbyr, men de er ganske funksjonelle og krever ikke inngrep i filene til buildroot selv.

Bruk av den EKSTERNE mekanismen for tilpasning

I forrige artikkel Vi sÄ pÄ et enkelt eksempel pÄ Ä legge til din egen konfigurasjon ved Ä legge til styrets defconfig og de nÞdvendige filene direkte til Buildroot-katalogen.

Men denne metoden er ikke veldig praktisk, spesielt nÄr du oppdaterer buildroot. Det er en mekanisme for Ä lÞse dette problemet eksternt tre. Essensen er at du kan lagre brett, konfigurasjoner, pakker og andre kataloger i en egen katalog (for eksempel bruker jeg oppdateringskatalogen til Ä bruke oppdateringer pÄ pakker, mer detaljer i en egen seksjon) og buildroot selv vil legge dem til de i sin katalog.

Merk: du kan overlegge flere eksterne trĂŠr samtidig, det er et eksempel i byggerotmanualen

La oss lage en katalog my_tree, som ligger ved siden av buildroot-katalogen og overfÞre konfigurasjonen vÄr dit. Utdataene skal vÊre fÞlgende 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, gjentar strukturen generelt strukturen til byggeroten.

ĐšĐ°Ń‚Đ°Đ»ĐŸĐł borde inneholder filer som er spesifikke for hvert styre i vĂ„rt tilfelle:

  • bef_cr_fs_img.sh er et skript som vil bli utfĂžrt etter Ă„ ha bygget mĂ„lfilsystemet, men fĂžr det pakkes inn i bilder. Vi kommer til Ă„ bruke det i fremtiden
  • linux.config - kjernekonfigurasjon
  • rootfs_overlay - katalog som skal overlegges pĂ„ toppen av mĂ„lfilsystemet
  • users.txt - en fil som beskriver brukerne som skal opprettes

ĐšĐ°Ń‚Đ°Đ»ĐŸĐł configs inneholder defconfig av styrene vĂ„re. Vi har bare en.

Pakke - katalog med vÄre pakker. I utgangspunktet inneholder buildroot beskrivelser og regler for Ä bygge et begrenset antall pakker. Senere vil vi legge til icewm-vindusbehandleren og Slim grafisk pÄloggingsbehandler her.
Patches — lar deg enkelt lagre lappene dine for forskjellige pakker. Flere detaljer i eget avsnitt nedenfor.
NÄ mÄ vi legge til beskrivelsesfilene for vÄrt eksterne tre. Det er 3 filer som er ansvarlige for dette: external.desc, Config.in, external.mk.

ekstern.desc inneholder den faktiske beskrivelsen:

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

Den fÞrste linjen er tittelen. I fremtiden oppretter buildroot en variabel $(BR2_EXTERNAL_MY_TREE_PATH), som skal brukes nÄr du konfigurerer sammenstillingen. For eksempel kan banen til brukerfilen settes som fÞlger:

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

Den andre linjen er en kort, lesbar beskrivelse.

Config.in, ekstern.mk — filer for Ă„ beskrive tilfĂžyde pakker. Hvis du ikke legger til dine egne pakker, kan disse filene stĂ„ tomme. ForelĂžpig er det det vi skal gjĂžre.
NÄ har vi det eksterne treet vÄrt klart, som inneholder defconfig for brettet vÄrt og filene det trenger. La oss gÄ til buildroot-katalogen og spesifisere Ä bruke eksternt tre:

[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 den fÞrste kommandoen bruker vi argumentet BR2_EXTERNAL=../mitt_tre/, som indikerer bruken av et eksternt tre. Du kan spesifisere flere eksterne trÊr for bruk samtidig. I dette tilfellet trenger du bare Ä gjÞre dette én gang, hvoretter det opprettes en filutgang/.br-external.mk som lagrer informasjon om det eksterne treet som brukes:

[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! Banene i denne filen vil vĂŠre absolutte!

Et eksternt alternativ har dukket opp i menyen:

Buildroot - del 2. Opprette brettkonfigurasjonen din; ved hjelp av eksternt tre, rootfs-overlegg, post-build-skript

Denne undermenyen vil inneholde vÄre pakker fra vÄrt eksterne tre. Denne delen er tom for Þyeblikket.

NĂ„ er det viktigere for oss Ă„ omskrive de nĂždvendige banene for Ă„ bruke eksternt-tre.

VĂŠr oppmerksom pĂ„ at i delen Byggalternativer → Plassering for Ă„ lagre buildroot-konfigurasjon, vil det vĂŠre en absolutt bane til den lagrede defconfig. Det dannes i det Ăžyeblikket man spesifiserer bruken av extgernal_tree.

Vi vil ogsÄ korrigere banene i delen Systemkonfigurasjon. For en tabell med opprettede brukere:

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

I kjernedelen endrer du banen til kjernekonfigurasjonen:

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

NÄ vil filene vÄre fra vÄrt eksterne tre bli brukt under montering. NÄr vi flytter til en annen katalog eller oppdaterer byggeroten, vil vi ha et minimum av problemer.

Legge til root fs-overlegg:

Denne mekanismen lar deg enkelt legge til/erstatte filer i mÄlfilsystemet.
Hvis filen er i root fs-overlegg, men ikke i mÄl, vil den bli lagt til
Hvis filen er i root fs-overlegg og i mÄl, vil den bli erstattet.
Fþrst, la oss sette banen til root fs overlay dir. Dette gjþres i delen Systemkonfigurasjon → Rotfilsystemoverleggskataloger:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

La oss nÄ lage to 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Þrste filen (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) vil erstatte /etc/hosts-filen pÄ det ferdige systemet. Den andre filen (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) vil bli lagt til.

Vi samler inn og sjekker:

Buildroot - del 2. Opprette brettkonfigurasjonen din; ved hjelp av eksternt tre, rootfs-overlegg, post-build-skript

UtfÞrelse av tilpasningsskript pÄ ulike stadier av systemmontering

Ofte mÄ du utfÞre noe arbeid inne i mÄlfilsystemet fÞr det pakkes inn i bilder.

Dette kan gjĂžres i Systemkonfigurasjonsdelen:

Buildroot - del 2. Opprette brettkonfigurasjonen din; ved hjelp av eksternt tre, rootfs-overlegg, post-build-skript

De to fÞrste skriptene kjÞres etter at mÄlfilsystemet er bygget, men fÞr det pakkes inn i bilder. Forskjellen er at fakeroot-skriptet kjÞres i konteksten av fakeroot, som simulerer arbeid som root-bruker.

Det siste skriptet kjĂžres etter at systembildene er opprettet. Du kan utfĂžre flere handlinger i den, for eksempel kopiere de nĂždvendige filene til en NFS-server eller lage et bilde av enhetens fastvare.

Som et eksempel vil jeg lage et skript som vil skrive versjonen og byggedatoen til /etc/.
FĂžrst vil jeg indikere banen til denne filen i mitt eksterne tre:

Buildroot - del 2. Opprette brettkonfigurasjonen din; ved hjelp av eksternt tre, rootfs-overlegg, post-build-skript

Og nÄ selve 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

Etter montering kan du se denne filen pÄ systemet.

I praksis kan manuset bli stort. Derfor, i det virkelige prosjektet tok jeg en mer avansert rute:

  1. Jeg opprettet en katalog (my_tree/board_my_x86_board/inside_fakeroot_scripts) der det er skript som skal kjĂžres, med serienumre. For eksempel, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Jeg skrev et skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) som gÄr gjennom denne katalogen og kjÞrer skriptene i den sekvensielt
  3. Spesifiserte dette skriptet i styreinnstillingene i Systemkonfigurasjon -> Egendefinerte skript som skal kjĂžres i fakeroot-miljĂžet ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster