Buildroot - 2. daļa. Jūsu dēļa konfigurācijas izveide; izmantojot ārējo koku, rootfs-overlay, post-build skriptus

Å ajā sadaļā es aplÅ«koju dažas man nepiecieÅ”amās pielāgoÅ”anas iespējas. Å is nav pilnÄ«gs saraksts ar to, ko piedāvā buildroot, taču tie ir diezgan funkcionāli un neprasa iejaukÅ”anos paÅ”as buildroot failos.

PielāgoÅ”anai izmanto ĀRĒJO mehānismu

IepriekŔējā rakstā Mēs apskatÄ«jām vienkārÅ”u piemēru savas konfigurācijas pievienoÅ”anai, pievienojot dēļa defconfig un nepiecieÅ”amos failus tieÅ”i Buildroot direktorijā.

Bet Ŕī metode nav ļoti ērta, it Ä«paÅ”i, atjauninot buildroot. Å Ä«s problēmas risināŔanai ir mehānisms ārējais koks. Tās bÅ«tÄ«ba ir tāda, ka jÅ«s varat glabāt plates, konfigurācijas, pakotnes un citus direktorijus atseviŔķā direktorijā (piemēram, es izmantoju ielāpu direktoriju, lai ielāpus pievienotu pakotnēm, sÄ«kāka informācija atseviŔķā sadaļā), un pati buildroot tos pievienos tiem, kas atrodas tā direktoriju.

Piezīme: jūs varat pārklāt vairākus ārējos kokus vienlaikus, piemērs ir buildroot rokasgrāmatā

Izveidosim direktoriju my_tree, kas atrodas blakus buildroot direktorijam, un pārsūtīsim uz turieni mūsu konfigurāciju. Izvadei jābūt Ŕādai faila struktūrai:

[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

Kā redzat, kopumā struktūra atkārto buildroot struktūru.

Katalogs valde satur katrai platei raksturīgus failus mūsu gadījumā:

  • bef_cr_fs_img.sh ir skripts, kas tiks izpildÄ«ts pēc mērÄ·a failu sistēmas izveides, bet pirms tā iepakoÅ”anas attēlos. Mēs to izmantosim nākotnē
  • linux.config ā€” kodola konfigurācija
  • rootfs_overlay ā€” direktorijs, kas jāpārklāj virs mērÄ·a failu sistēmas
  • users.txt ā€” fails, kas apraksta veidojamos lietotājus

Katalogs configs satur mūsu dēļu defconfig. Mums ir tikai viens.

Pakete - katalogs ar mÅ«su iepakojumiem. Sākotnēji buildroot satur aprakstus un noteikumus ierobežota skaita pakotņu izveidei. Vēlāk mēs Å”eit pievienosim icewm logu pārvaldnieku un Slim grafisko pieteikÅ”anās pārvaldnieku.
UzÅ”uves ā€” ļauj ērti uzglabāt ielāpus dažādiem iepakojumiem. SÄ«kāka informācija atseviŔķā sadaļā zemāk.
Tagad mums ir jāpievieno mūsu ārējā koka apraksta faili. Par to ir atbildīgi 3 faili: external.desc, Config.in, external.mk.

ārējais.desc satur faktisko aprakstu:

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

Pirmā rinda ir virsraksts. Nākotnē buildroot izveidojiet mainÄ«go $(BR2_EXTERNAL_MY_TREE_PATH), kas jāizmanto, konfigurējot montāžu. Piemēram, ceļu uz lietotāja failu var iestatÄ«t Ŕādi:

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

Otrajā rindā ir īss, cilvēkiem lasāms apraksts.

Config.in, external.mk ā€” faili, lai aprakstÄ«tu pievienotās pakotnes. Ja nepievienojat savas pakotnes, Å”os failus var atstāt tukÅ”us. Pagaidām tā arÄ« darÄ«sim.
Tagad mums ir gatavs ārējais koks, kurā ir mÅ«su plates defconfig un tai nepiecieÅ”amie faili. Dosimies uz buildroot direktoriju un norādÄ«sim izmantot ārējo koku:

[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

Pirmajā komandā mēs izmantojam argumentu BR2_EXTERNAL=../mans_koks/, kas norāda uz ārēja koka izmantoÅ”anu Var norādÄ«t vairākus ārējos kokus lietoÅ”anai vienlaicÄ«gi. Å ajā gadÄ«jumā tas ir jādara tikai vienu reizi, pēc tam tiek izveidots fails output/.br-external.mk, kas saglabā informāciju par izmantoto ārējo koku:

[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

Svarīgs! Ceļi Ŕajā failā būs absolūti!

Izvēlnē ir parādījies vienums Ārējās opcijas:

Buildroot - 2. daļa. Jūsu dēļa konfigurācijas izveide; izmantojot ārējo koku, rootfs-overlay, post-build skriptus

Å ajā apakÅ”izvēlnē bÅ«s iekļautas mÅ«su paketes no mÅ«su ārējā koka. Å Ä« sadaļa paÅ”laik ir tukÅ”a.

Tagad mums ir svarÄ«gāk pārrakstÄ«t nepiecieÅ”amos ceļus, lai izmantotu ārējo koku.

LÅ«dzu, ņemiet vērā, ka sadaļā Build opcijas ā†’ AtraÅ”anās vieta, lai saglabātu buildroot konfigurāciju, bÅ«s absolÅ«ts ceļŔ uz saglabāto defconfig. Tas veidojas extgernal_tree lietojuma precizÄ“Å”anas brÄ«dÄ«.

Mēs arī labosim ceļus sadaļā Sistēmas konfigurācija. Tabulai ar izveidotiem lietotājiem:

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

Sadaļā Kodols mainiet ceļu uz kodola konfigurāciju:

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

Tagad mūsu faili no mūsu ārējā koka tiks izmantoti montāžas laikā. Pārejot uz citu direktoriju vai atjauninot buildroot, mums būs minimāls problēmu skaits.

Saknes fs pārklājuma pievienoŔana:

Šis mehānisms ļauj ērti pievienot/aizstāt failus mērķa failu sistēmā.
Ja fails atrodas saknes fs pārklājumā, bet nav mērķa, tas tiks pievienots
Ja fails atrodas saknes fs pārklājumā un mērķī, tas tiks aizstāts.
Vispirms iestatÄ«sim ceļu uz saknes fs pārklājuma dir. Tas tiek darÄ«ts sadaļā Sistēmas konfigurācija ā†’ Saknes failu sistēmas pārklājuma direktoriji:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Tagad izveidosim divus failus.

[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

Pirmais fails (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) aizstās /etc/hosts failu gatavajā sistēmā. Tiks pievienots otrais fails (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt).

Mēs savācam un pārbaudām:

Buildroot - 2. daļa. Jūsu dēļa konfigurācijas izveide; izmantojot ārējo koku, rootfs-overlay, post-build skriptus

PielāgoÅ”anas skriptu izpilde dažādos sistēmas montāžas posmos

Bieži vien jums ir jāveic daži darbi mērķa failu sistēmā, pirms tā tiek iesaiņota attēlos.

To var izdarīt sadaļā Sistēmas konfigurācija:

Buildroot - 2. daļa. Jūsu dēļa konfigurācijas izveide; izmantojot ārējo koku, rootfs-overlay, post-build skriptus

Pirmie divi skripti tiek izpildÄ«ti pēc mērÄ·a failu sistēmas izveides, bet pirms tās iesaiņoÅ”anas attēlos. AtŔķirÄ«ba ir tāda, ka fakeroot skripts tiek izpildÄ«ts fakeroot kontekstā, kas simulē darbu kā root lietotājs.

Pēdējais skripts tiek izpildÄ«ts pēc sistēmas attēlu izveides. Tajā varat veikt papildu darbÄ«bas, piemēram, kopēt nepiecieÅ”amos failus uz NFS serveri vai izveidot ierÄ«ces programmaparatÅ«ras attēlu.

Piemēram, es izveidoÅ”u skriptu, kas ierakstÄ«s versiju un izveides datumu failā /etc/.
Vispirms es norādÄ«Å”u ceļu uz Å”o failu savā ārējā kokā:

Buildroot - 2. daļa. Jūsu dēļa konfigurācijas izveide; izmantojot ārējo koku, rootfs-overlay, post-build skriptus

Un tagad pats skripts:

[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

Pēc montāžas jÅ«s varat redzēt Å”o failu sistēmā.

Praksē skripts var kļūt liels. Tāpēc reālajā projektā es izvēlējos progresÄ«vāku marÅ”rutu:

  1. Es izveidoju direktoriju (my_tree/board_my_x86_board/inside_fakeroot_scripts), kurā ir jāizpilda skripti ar sērijas numuriem. Piemēram, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Es uzrakstīju skriptu (my_tree/board_my_x86_board/run_inside_fakeroot.sh), kas iet caur Ŕo direktoriju un secīgi izpilda tajā ietvertos skriptus
  3. Šis skripts ir norādīts plates iestatījumos sadaļā Sistēmas konfigurācija -> Pielāgoti skripti, kas jādarbojas fakeroot vidē ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Avots: www.habr.com

Pievieno komentāru