Å 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
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:
Å 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:
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:
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Ä:
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:
- 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
- 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
- Å 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