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
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 filesSom 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 articleDen 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.txtDen 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 menuconfigI 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 articleViktig! Banene i denne filen vil vĂŠre absolutte!
Et eksternt alternativ har dukket opp i menyen:

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.txtI kjernedelen endrer du banen til kjernekonfigurasjonen:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configNÄ 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 overlayDen 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:

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:

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:

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-releaseEtter 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:
- 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
- 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
- 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
