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

U ovom odjeljku razmatram neke od opcija prilagodbe koje su mi bile potrebne. Ovo nije potpuni popis onoga što buildroot nudi, ali su prilično funkcionalni i ne zahtijevaju intervenciju u datotekama samog buildroota.

Korištenje VANJSKOG mehanizma za prilagodbu

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

Ali ova metoda nije baš prikladna, pogotovo kada ažurirate buildroot. Postoji mehanizam za rješavanje ovog problema vanjsko stablo. Njegova bit je da možete pohraniti ploču, konfiguracije, pakete i druge direktorije u poseban direktorij (na primjer, ja koristim direktorij zakrpe za primjenu zakrpa na pakete, više detalja u zasebnom odjeljku), a sam buildroot će ih dodati onima u svoj imenik.

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

Kreirajmo direktorij my_tree, koji se nalazi pored buildroot direktorija i tamo prenesite našu konfiguraciju. 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 vidite, općenito struktura ponavlja strukturu buildroota.

Adresar 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 datotečnog sustava, ali prije pakiranja u slike. Koristit ćemo ga u budućnosti
  • linux.config - konfiguracija kernela
  • rootfs_overlay - direktorij za prekrivanje na vrhu ciljnog datotečnog sustava
  • users.txt - datoteka koja opisuje korisnike koje treba kreirati

Adresar Konfiguracije sadrži defconfig naših ploča. Imamo samo jednu.

Paket - katalog s našim paketima. U početku buildroot sadrži opise i pravila za izgradnju ograničenog broja paketa. Kasnije ćemo ovdje dodati upravitelj prozora icewm i Slim grafički upravitelj prijave.
Zakrpe — omogućuje vam praktično pohranjivanje zakrpa za različite pakete. Više detalja u zasebnom odjeljku u nastavku.
Sada moramo dodati datoteke opisa za naše vanjsko stablo. Za to su odgovorne 3 datoteke: external.desc, Config.in, external.mk.

vanjski.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 kreira varijablu $(BR2_EXTERNAL_MY_TREE_PATH), koji bi se trebao koristiti prilikom konfiguriranja sklopa. Na primjer, put 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, ljudima čitljiv opis.

Config.in, external.mk — datoteke za opis dodanih paketa. Ako ne dodate vlastite pakete, te datoteke mogu ostati prazne. Za sada, to je ono što ćemo učiniti.
Sada imamo naše vanjsko stablo spremno, koje sadrži defconfig naše ploče i datoteke koje su joj potrebne. Idemo u buildroot direktorij i odredimo korištenje vanjskog stabla:

[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 korištenje vanjskog stabla. Možete navesti nekoliko vanjskih stabala za korištenje u isto vrijeme. U ovom slučaju, to trebate učiniti samo jednom, nakon čega se stvara 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

Važno! Staze u ovoj datoteci bit će apsolutne!

U izborniku se pojavila stavka Vanjske opcije:

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

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

Sada nam je važnije prepisati potrebne staze za korištenje vanjskog stabla.

Imajte na umu da će u odjeljku Build options → Location to save buildroot config postojati apsolutni put do spremljene defconfig. Formira se u trenutku specificiranja korištenja extgernal_tree.

Također ćemo ispraviti staze u odjeljku Konfiguracija sustava. Za tablicu s kreiranim korisnicima:

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

U odjeljku Kernel promijenite put do konfiguracije kernela:

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

Sada će se naše datoteke iz našeg vanjskog stabla koristiti tijekom sklapanja. Prilikom prelaska u drugi direktorij ili ažuriranja buildroot-a, imat ćemo minimum problema.

Dodavanje sloja root fs:

Ovaj mehanizam vam omogućuje jednostavno dodavanje/zamjenu datoteka u ciljnom datotečnom sustavu.
Ako je datoteka u root fs sloju, ali ne i u ciljnoj, bit će dodana
Ako je datoteka u root fs prekrivanju iu cilju, bit će zamijenjena.
Prvo, postavimo put do root fs overlay dir. To se radi u odjeljku Konfiguracija sustava → Direktoriji preklapanja korijenskog datotečnog sustava:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Kreirajmo sada dvije datoteke.

[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) zamijenit će datoteku /etc/hosts na gotovom sustavu. Dodat će se druga datoteka (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt).

Prikupljamo i provjeravamo:

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

Izvršenje skripti za prilagodbu u različitim fazama montaže sustava

Često morate obaviti neki posao unutar ciljnog datotečnog sustava prije nego što se upakira u slike.

To možete učiniti u odjeljku Konfiguracija sustava:

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

Prve dvije skripte izvršavaju se nakon što je ciljni datotečni sustav izgrađen, ali prije nego što se pakira u slike. Razlika je u tome što se fakeroot skripta izvršava u kontekstu fakeroot-a, koji simulira rad kao root korisnik.

Posljednja skripta se izvršava nakon što se naprave slike sustava. U njemu možete izvršiti dodatne radnje, na primjer, kopirati potrebne datoteke na NFS poslužitelj ili stvoriti sliku firmvera vašeg uređaja.

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

Buildroot - dio 2. Stvaranje konfiguracije vaše ploče; koristeći vanjsko 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 ovu datoteku možete vidjeti na sustavu.

U praksi, skripta može postati velika. Stoga sam u stvarnom 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 uzastopno izvršava skripte sadržane u njemu
  3. Odredite ovu skriptu u postavkama ploče u odjeljku Konfiguracija sustava -> 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