Buildroot - dio 2. Kreiranje vaše konfiguracije ploče; koristeći eksterno stablo, rootfs-overlay, post-build skripte

U ovom odeljku ću pogledati neke od opcija prilagođavanja koje su mi bile potrebne. Ovo nije potpuna lista onoga što buildroot nudi, ali su prilično funkcionalni i ne zahtijevaju intervenciju u datotekama samog buildroot-a.

Korištenje EXTERNAL mehanizma za prilagođavanje

U prethodnom članku Pogledali smo jednostavan primjer dodavanja vlastite konfiguracije dodavanjem defconfig-a ploče i potrebnih datoteka direktno u Buildroot direktorij.

Ali ova metoda nije baš zgodna, posebno kada se ažurira buildroot. Postoji mehanizam za rješavanje ovog problema vanjsko drvo. Njegova suština je da možete pohraniti ploču, konfiguracije, pakete i druge direktorije u poseban direktorij (na primjer, ja koristim direktorij zakrpe da primijenim zakrpe na pakete, više detalja u posebnom odjeljku) i sam buildroot će ih dodati onima u njegov imenik.

Napomena: možete prekriti nekoliko vanjskih stabala odjednom, postoji primjer u priručniku buildroot

Kreirajmo direktorij my_tree, koji se nalazi pored buildroot direktorija i prenesemo našu konfiguraciju tamo. Izlaz bi trebao biti sljedeća struktura datoteke:

[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

Kao što možete vidjeti, općenito struktura ponavlja strukturu buildroot-a.

Directory odbor sadrži datoteke specifične za svaku ploču u našem slučaju:

  • bef_cr_fs_img.sh je skripta koja će se izvršiti nakon izgradnje ciljnog sistema datoteka, ali prije pakovanja u slike. Koristićemo ga u budućnosti
  • linux.config - konfiguracija kernela
  • rootfs_overlay - direktorij za preklapanje na vrhu ciljnog sistema datoteka
  • users.txt - datoteka koja opisuje korisnike koji će biti kreirani

Directory configs sadrži defconfig naših ploča. Imamo samo jednog.

paket - katalog sa našim paketima. U početku, buildroot sadrži opise i pravila za pravljenje ograničenog broja paketa. Kasnije ćemo ovdje dodati icewm window manager i Slim grafički menadžer za prijavu.
Patches — omogućava vam praktično skladištenje flastera za različita pakovanja. Više detalja u posebnom odjeljku ispod.
Sada moramo dodati datoteke opisa za naše vanjsko stablo. Za to su odgovorne 3 datoteke: external.desc, Config.in, external.mk.

external.desc sadrži stvarni opis:

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

Prvi red je naslov. U budućnosti buildroot kreirajte varijablu $(BR2_EXTERNAL_MY_TREE_PATH), koji treba koristiti prilikom konfigurisanja sklopa. Na primjer, putanja do korisničke datoteke može se postaviti na sljedeći način:

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

Drugi red je kratak, čovjeku čitljiv opis.

Config.in, external.mk — datoteke za opis dodanih paketa. Ako ne dodate svoje pakete, onda ove datoteke mogu ostati prazne. Za sada, to je ono što ćemo uraditi.
Sada imamo spremno naše vanjsko stablo koje sadrži defconfig naše ploče i datoteke koje su mu potrebne. Idemo u buildroot direktorij i odredimo da koristimo vanjsko stablo:

[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

U prvoj naredbi koristimo argument BR2_EXTERNAL=../my_tree/, što ukazuje na upotrebu vanjskog stabla. Možete navesti nekoliko vanjskih stabala za korištenje u isto vrijeme. U ovom slučaju, ovo trebate učiniti samo jednom, nakon čega se kreira datoteka output/.br-external.mk koja pohranjuje informacije o korištenom vanjskom stablu:

[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

Bitan! Putanja u ovoj datoteci će biti apsolutna!

U meniju se pojavila stavka External options:

Buildroot - dio 2. Kreiranje vaše konfiguracije ploče; koristeći eksterno stablo, rootfs-overlay, post-build skripte

Ovaj podmeni će sadržavati naše pakete iz našeg vanjskog stabla. Ovaj odjeljak je trenutno prazan.

Sada nam je važnije da prepišemo potrebne staze za korištenje vanjskog stabla.

Imajte na umu da će u odjeljku Build options → Location to save buildroot config postojati apsolutna putanja do sačuvane defconfig. Formira se u trenutku specificiranja upotrebe extgernal_tree.

Također ćemo ispraviti putanje u odjeljku Konfiguracija sistema. Za tabelu sa kreiranim korisnicima:

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

U odjeljku Kernel promijenite putanju do konfiguracije kernela:

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

Sada će se naši fajlovi iz našeg eksternog stabla koristiti tokom montaže. Prilikom prelaska u drugi direktorij ili ažuriranja buildroot-a, imat ćemo minimum problema.

Dodavanje root fs preklapanja:

Ovaj mehanizam vam omogućava da lako dodate/zamijenite datoteke u ciljnom sistemu datoteka.
Ako je datoteka u root fs preklapanju, ali ne u targetu, tada će biti dodana
Ako je datoteka u root fs preklapanju i u targetu, tada će biti zamijenjena.
Prvo, postavimo putanju do root fs overlay dir. Ovo se radi u odeljku Konfiguracija sistema → Direktorijumi preklapanja root fajl sistema:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Sada kreirajmo dva fajla.

[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

Prva datoteka (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) će zamijeniti /etc/hosts datoteku na gotovom sistemu. Drugi fajl (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) će biti dodan.

Prikupljamo i provjeravamo:

Buildroot - dio 2. Kreiranje vaše konfiguracije ploče; koristeći eksterno stablo, rootfs-overlay, post-build skripte

Izvođenje skripti za prilagođavanje u različitim fazama sklapanja sistema

Često morate obaviti neki posao unutar ciljnog sistema datoteka prije nego što se upakuje u slike.

To se može učiniti u odjeljku Konfiguracija sistema:

Buildroot - dio 2. Kreiranje vaše konfiguracije ploče; koristeći eksterno stablo, rootfs-overlay, post-build skripte

Prve dvije skripte se izvršavaju nakon što je ciljni sistem datoteka izgrađen, ali prije nego što je upakovan u slike. Razlika je u tome što se fakeroot skripta izvršava u kontekstu fakeroot, koji simulira rad kao root korisnik.

Posljednja skripta se izvršava nakon što se kreiraju sistemske slike. U njemu možete izvršiti dodatne radnje, na primjer, kopirati potrebne datoteke na NFS server ili kreirati sliku firmvera vašeg uređaja.

Kao primjer, napravit ću skriptu koja će napisati verziju i datum izgradnje u /etc/.
Prvo ću naznačiti putanju do ove datoteke u svom vanjskom stablu:

Buildroot - dio 2. Kreiranje vaše konfiguracije ploče; koristeći eksterno stablo, rootfs-overlay, post-build skripte

A sada sama skripta:

[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

Nakon sklapanja, ovaj fajl možete vidjeti na sistemu.

U praksi, skripta može postati velika. Stoga sam u pravom projektu krenuo naprednijim putem:

  1. Napravio sam direktorij (my_tree/board_my_x86_board/inside_fakeroot_scripts) u kojem se nalaze skripte koje treba izvršiti, sa serijskim brojevima. Na primjer, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Napisao sam skriptu (my_tree/board_my_x86_board/run_inside_fakeroot.sh) koja prolazi kroz ovaj direktorij i sekvencijalno izvršava skripte sadržane u njemu
  3. Naveli ovu skriptu u postavkama ploče u odeljku Konfiguracija sistema -> Prilagođene skripte za pokretanje unutar fakeroot okruženja ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

izvor: www.habr.com

Dodajte komentar