I denne sektion gennemgĂĽr jeg nogle af de tilpasningsmuligheder, som jeg har haft brug for. Dette er ikke en komplet liste over, hvad Buildroot tilbyder, men de er fuldt operationelle og krĂŚver ikke indgreb i selve Buildroot-filerne.
Brug af EXTERNAL-mekanisme til tilpasning
Der blev set pü et simpelt eksempel pü at tilføje sin egen konfiguration ved at tilføje en defconfig-fil til boardet og de nødvendige filer direkte i Buildroot-kataloget.
Men denne metode er ikke sÌrlig praktisk, isÌr ved opdatering af Buildroot. For at løse dette problem findes der en mekanisme external tree. Dens essens er, at man kan opbevare kataloger som board, configs, packages og andre i et separat katalog (for eksempel bruger jeg et katalog til patches til at anvende patches pü pakker, mere om det i et separat afsnit), og Buildroot vil automatisk tilføje dem til dem, der allerede er i sit katalog.
BemĂŚrkning: Man kan anvende flere external trees pĂĽ ĂŠn gang, der er et eksempel i Buildroot-dokumentationen.
Lad os oprette et katalog my_tree, som ligger ved siden af Buildroot-kataloget, og flytte vores konfiguration derover. Vi skal have 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 det kan ses, gentager strukturen generelt Buildroot-strukturen.
Mappe board indeholder filer, der er specifikke for hver plade i vores tilfĂŚlde:
- bef_cr_fs_img.sh â et script, der vil blive udført efter opbygningen af target-filsystemet, men før det pakkes ind i billeder. Vi vil bruge det senere.
- linux.config â kernelkonfiguration
- rootfs_overlay â et katalog til at lĂŚgge ovenpĂĽ target-filsystemet
- users.txt â en fil med beskrivelse af de oprettede brugere
Mappe configs indeholder defconfig-filer for vores plader. I øjeblikket har vi kun Ên.
Package â et katalog med vores pakker. Oprindeligt indeholder Buildroot beskrivelser og regler for opbygning af et begrĂŚnset antal pakker. Senere vil vi tilføje vinduesforvalteren icewm og logonadministratoren Slim her.
Patches â gør det nemt at opbevare sine patches til forskellige pakker. Mere om det i et separat afsnit senere.
Nu skal vi tilføje beskrivelsesfilerne til vores external tree. Dette styres af 3 filer: external.desc, Config.in, external.mk.
external.desc indeholder selve beskrivelsen:
[alexey@alexey-pc my_tree]$ cat external.desc
name: my_tree
desc: Mit simple external tree til artiklenDen første linje er titlen. I det følgende skal buildroot oprette en variabel $(BR2_EXTERNAL_MY_TREE_PATH), som skal bruges ved konfigurationen af bygningen. For eksempel kan stien til filen med brugere angives som følger:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txtDen anden linje er en kort, menneskelig forstĂĽelig beskrivelse.
Config.in, external.mk â filer til beskrivelse af de tilføjede pakker. Hvis du ikke tilføjer dine egne pakker, kan disse filer overlades tomme. Indtil videre gør vi det.
Nu er vi klar med vores external-tree, som indeholder defconfig for vores board og de nødvendige filer. Lad os gü til buildroot-kataloget og angive, at vi vil bruge external-tree:
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# konfiguration skrevet til /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfigI den første kommando bruger vi argumentet BR2_EXTERNAL=../my_tree/, der angiver brugen af external tree. Det er muligt at angive flere external-trees til brug samtidigt. Det er tilstrÌkkeligt at gøre dette Ên gang, hvorefter der oprettes en fil output/.br-external.mk, som gemmer information om det anvendte external-tree:
[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
#
# Automatisk genereret fil; REDIGĂR IKKE.
#
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 = Mit simple external-tree til artikelVigtigt! I denne fil vil stierne vĂŚre absolutte!
I menuen er der blevet tilføjet et punkt External options:

I denne undermenu vil vores pakker fra vores external-tree vĂŚre indeholdt. Lige nu er denne sektion tom.
I øjeblikket er det vigtigere for os at omskrive de nødvendige stier til at bruge external-tree.
BemĂŚrk, at der i sektionen Build options â Location to save buildroot config vil vĂŚre en absolut sti til den gemte defconfig. Den dannes i det øjeblik, du angiver brugen af external_tree.
Desuden justerer vi stierne i sektionen System configuration. For tabellen med de oprettede brugere:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txtI sektionen Kernel ĂŚndrer vi stien til kernelkonfigurationen:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configNu vil vores filer fra vores external-tree blive brugt ved bygningen. Ved flytning til et andet katalog eller opdatering af buildroot vil vi have minimum problemer.
Tilføjelse af root fs overlay:
Denne mekanisme gør det nemt at tilføje/erstatte filer i target-filsystemet.
Hvis filen findes i root fs overlay, men ikke i target, vil den blive tilføjet
Hvis filen findes i root fs overlay og i target, vil den blive erstattet.
Lad os først angive stien til root fs overlay dir. Dette gøres i afsnittet System configuration â Root filesystem overlay directories:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/Nu vil vi oprette 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 fil (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) vil erstatte filen /etc/hosts i det fÌrdige system. Den anden fil (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) vil blive tilføjet.
Vi samler og tjekker:

Udførelse af tilpasningsscripts pü forskellige stadier af systemopbygningen
Det er ofte nødvendigt at udføre nogle handlinger inden for target-filsystemet, før det pakkes i billeder.
Dette kan gøres i afsnittet System configuration:

De første to scripts udføres efter opbygning af target-filsystemet, men før det pakkes i billeder. Forskellen er, at fakeroot-scriptet udføres i konteksten af fakeroot, hvilket simulerer arbejde fra root-brugeren.
Det sidste script udføres efter oprettelsen af systembilleder. Her kan man udføre yderligere handlinger, for eksempel kopiere nødvendige filer til en nfs-server eller oprette et billede af sin enheds firmware.
Som et eksempel vil jeg oprette et script, der skriver version og build-dato i /etc/
Først angiver jeg stien til denne fil i mit external-tree:

Og nu selve scriptet:
[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 opbygning kan man se denne fil i systemet.
I praksis kan scriptet blive stort. SĂĽ i et reelt projekt valgte jeg en mere avanceret tilgang:
- Jeg oprettede en mappe (my_tree/board_my_x86_board/inside_fakeroot_scripts), hvor scripts til udførelse er nummereret. For eksempel 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
- Jeg skrev et script (my_tree/board_my_x86_board/run_inside_fakeroot.sh), der gennemgür denne mappe og sekventielt udfører de scripts, der ligger i den
- Jeg angav dette script i indstillingerne for board i afsnittet System configuration -> Custom scripts to run inside the fakeroot environment ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)
Kilde: habr.com
