Buildroot - del 2. Oprettelse af din board-konfiguration; ved hjælp af eksternt træ, rootfs-overlay, post-build scripts

I dette afsnit ser jeg på nogle af de tilpasningsmuligheder, jeg havde brug for. Dette er ikke en komplet liste over, hvad buildroot tilbyder, men de er ret funktionelle og kræver ikke indgreb i selve buildroot-filerne.

Brug af den EKSTERNE mekanisme til tilpasning

I en tidligere artikel Vi så på et simpelt eksempel på at tilføje din egen konfiguration ved at tilføje boardets defconfig og de nødvendige filer direkte til Buildroot-mappen.

Men denne metode er ikke særlig praktisk, især når du opdaterer buildroot. Der er en mekanisme til at løse dette problem udvendigt træ. Dens essens er, at du kan gemme board, konfigurationer, pakker og andre mapper i en separat mappe (f.eks. bruger jeg patches-mappen til at anvende patches til pakker, flere detaljer i et separat afsnit), og buildroot selv vil tilføje dem til dem i dens mappe.

Bemærk: du kan overlejre flere eksterne træer på én gang, der er et eksempel i byggerodsmanualen

Lad os oprette en mappe my_tree, placeret ved siden af ​​buildroot-mappen og overføre vores konfiguration dertil. Outputtet 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, gentager strukturen generelt byggerodens struktur.

Каталог board indeholder filer, der er specifikke for hver bestyrelse i vores tilfælde:

  • bef_cr_fs_img.sh er et script, der vil blive udført efter opbygning af målfilsystemet, men før det pakkes ind i billeder. Vi vil bruge det i fremtiden
  • linux.config - kernekonfiguration
  • rootfs_overlay - mappe til overlejring oven på målfilsystemet
  • users.txt - en fil, der beskriver de brugere, der skal oprettes

Каталог configs indeholder defconfig af vores boards. Vi har kun én.

Pakke - katalog med vores pakker. Til at begynde med indeholder buildroot beskrivelser og regler for opbygning af et begrænset antal pakker. Senere vil vi tilføje icewm-vinduestyringen og Slim grafisk login-manager her.
Patches — giver dig mulighed for bekvemt at opbevare dine plastre til forskellige pakker. Flere detaljer i et separat afsnit nedenfor.
Nu skal vi tilføje beskrivelsesfilerne til vores eksterne træ. Der er 3 filer ansvarlige for dette: external.desc, Config.in, external.mk.

ekstern.desc indeholder den egentlige beskrivelse:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Den første linje er titlen. I fremtiden opretter buildroot en variabel $(BR2_EXTERNAL_MY_TREE_PATH), som skal bruges ved konfiguration af samlingen. For eksempel kan stien til brugerfilen indstilles som følger:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Den anden linje er en kort beskrivelse, der kan læses af mennesker.

Config.in, ekstern.mk — filer til at beskrive tilføjede pakker. Hvis du ikke tilføjer dine egne pakker, kan disse filer stå tomme. Indtil videre er det, hvad vi vil gøre.
Nu har vi vores eksterne træ klar, der indeholder defconfig af vores board og de filer, det har brug for. Lad os gå til buildroot-mappen og specificere at bruge eksternt træ:

[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 kommando bruger vi argumentet BR2_EXTERNAL=../mit_træ/, der angiver brugen af ​​et eksternt træ. Du kan angive flere eksterne-træer til brug på samme tid. I dette tilfælde skal du kun gøre dette én gang, hvorefter der oprettes en filoutput/.br-external.mk, der gemmer information om det anvendte eksterne træ:

[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

Vigtig! Stierne i denne fil vil være absolutte!

Et eksternt valgelement er dukket op i menuen:

Buildroot - del 2. Oprettelse af din board-konfiguration; ved hjælp af eksternt træ, rootfs-overlay, post-build scripts

Denne undermenu vil indeholde vores pakker fra vores eksterne træ. Denne sektion er i øjeblikket tom.

Nu er det vigtigere for os at omskrive de nødvendige stier til at bruge eksternt træ.

Bemærk venligst, at i sektionen Byg muligheder → Placering for at gemme buildroot-konfiguration, vil der være en absolut sti til den gemte defconfig. Det dannes i det øjeblik, hvor brugen af ​​extgernal_tree specificeres.

Vi vil også rette stierne i afsnittet Systemkonfiguration. For en tabel med oprettede brugere:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

I Kernel-sektionen skal du ændre stien til kernekonfigurationen:

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

Nu vil vores filer fra vores eksterne træ blive brugt under montering. Når vi flytter til en anden mappe eller opdaterer buildroden, vil vi have et minimum af problemer.

Tilføjelse af root fs-overlay:

Denne mekanisme giver dig mulighed for nemt at tilføje/erstatte filer i målfilsystemet.
Hvis filen er i root fs overlay, men ikke i target, så vil den blive tilføjet
Hvis filen er i root fs overlay og i target, vil den blive erstattet.
Lad os først indstille stien til root fs overlay dir. Dette gøres i sektionen Systemkonfiguration → Rootfilsystem-overlejringsmapper:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Lad os nu 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 på det færdige system. Den anden fil (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) vil blive tilføjet.

Vi indsamler og kontrollerer:

Buildroot - del 2. Oprettelse af din board-konfiguration; ved hjælp af eksternt træ, rootfs-overlay, post-build scripts

Udførelse af tilpasningsscripts på forskellige stadier af systemmontering

Ofte skal du udføre noget arbejde inde i målfilsystemet, før det pakkes ind i billeder.

Dette kan gøres i afsnittet Systemkonfiguration:

Buildroot - del 2. Oprettelse af din board-konfiguration; ved hjælp af eksternt træ, rootfs-overlay, post-build scripts

De første to scripts udføres efter målfilsystemet er bygget, men før det er pakket ind i billeder. Forskellen er, at fakeroot-scriptet udføres i konteksten af ​​fakeroot, som simulerer arbejde som root-bruger.

Det sidste script udføres, efter at systembillederne er oprettet. Du kan udføre yderligere handlinger i det, for eksempel kopiere de nødvendige filer til en NFS-server eller oprette et billede af din enheds firmware.

Som et eksempel vil jeg oprette et script, der vil skrive versionen og byggedatoen til /etc/.
Først vil jeg angive stien til denne fil i mit eksterne træ:

Buildroot - del 2. Oprettelse af din board-konfiguration; ved hjælp af eksternt træ, 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 montering kan du se denne fil på systemet.

I praksis kan manuskriptet blive stort. Derfor tog jeg i det rigtige projekt en mere avanceret rute:

  1. Jeg oprettede en mappe (my_tree/board_my_x86_board/inside_fakeroot_scripts), hvori der er scripts, der skal udføres, med serienumre. 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 går gennem denne mappe og sekventielt udfører scripts indeholdt i den
  3. Angiv dette script i boardindstillingerne i sektionen Systemkonfiguration -> Brugerdefinerede scripts til at køre i fakeroot-miljøet ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Kilde: www.habr.com

Tilføj en kommentar