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

Legg til en kommentar