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
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 filesSom 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 articleDen 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.txtDen 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 menuconfigI 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 articleViktig! SökvÀgarna i den hÀr filen kommer att vara absoluta!
Ett externt alternativ har dykt upp i menyn:

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.txtI avsnittet KÀrna Àndrar du sökvÀgen till kÀrnkonfigurationen:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configNu 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 overlayDen 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:

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:

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:

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