Buildroot – del 2. Oprettelse af konfiguration til dit board; anvendelse af external tree, rootfs-overlay, post-build scripts

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

I den tidligere artikel 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 files

Som 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 artiklen

Den 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.txt

Den 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 menuconfig

I 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 artikel

Vigtigt! I denne fil vil stierne vĂŚre absolutte!

I menuen er der blevet tilføjet et punkt External options:

Buildroot – del 2. Oprettelse af konfiguration til dit board; anvendelse af external tree, rootfs-overlay, post-build scripts

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.txt

I sektionen Kernel ĂŚndrer vi stien til kernelkonfigurationen:

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

Nu 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 overlay

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

Buildroot – del 2. Oprettelse af konfiguration til dit board; anvendelse af external tree, rootfs-overlay, post-build scripts

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:

Buildroot – del 2. Oprettelse af konfiguration til dit board; anvendelse af external tree, rootfs-overlay, post-build scripts

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:

Buildroot – del 2. Oprettelse af konfiguration til dit board; anvendelse af external tree, rootfs-overlay, post-build scripts

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-release

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

  1. 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
  2. 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
  3. 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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster