I-Buildroot - inxalenye yesi-2. Ukwenza uqwalaselo lwebhodi yakho; usebenzisa umthi wangaphandle, i-rootfs-overlay, i-post-build scripts

Kweli candelo ndijonga ezinye zeendlela zokhetho endizidingayo. Olu ayiloluhlu olupheleleyo lwento i-buildroot inikezelayo, kodwa iyasebenza kwaye ayifuni ungenelelo kwiifayile ze-buildroot ngokwayo.

Ukusebenzisa indlela ENGAPHANDLE ukwenza ulungelelwaniso

Kwinqaku elandulela eli Sijonge kumzekelo olula wokongeza uqwalaselo lwakho ngokongeza i-defconfig yebhodi kunye neefayile eziyimfuneko ngokuthe ngqo kwiBuildroot directory.

Kodwa le ndlela ayilunganga kakhulu, ngakumbi xa uhlaziya i-builroot. Kukho indlela yokusombulula le ngxaki umthi wangaphandle. Undoqo wayo kukuba ungagcina ibhodi, uqwalaselo, iipakethe kunye nabanye abalawuli kulawulo olwahlukileyo (umzekelo, ndisebenzisa iipatches directory ukufaka iipatches kwiipakethe, iinkcukacha ezingaphezulu kwicandelo elahlukileyo) kwaye i-buildroot ngokwayo iya kubongeza kwabo bangaphakathi. ulawulo lwayo.

Qaphela: unokwaleka imithi emininzi yangaphandle kanye, kukho umzekelo kwi-buildroot manual

Masenze uvimba wam_umthi, obekwe ecaleni kovimba we-buildroot kwaye sidlulisele uqwalaselo lwethu apho. Imveliso kufuneka ibe yile fayile ilandelayo:

[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

Njengoko ubona, ngokubanzi isakhiwo siphinda isakhiwo se-buildroot.

ulawulo ibhodi iqulathe iifayile ezithile kwibhodi nganye kwimeko yethu:

  • bef_cr_fs_img.sh siscript esiza kuphunyezwa emva kokwakha inkqubo yefayile ekujoliswe kuyo, kodwa ngaphambi kokuyipakisha kwimifanekiso. Siza kuyisebenzisa kwixesha elizayo
  • linux.config - uqwalaselo lwekernel
  • i-rootfs_overlay - uvimba wokwaleka ngaphezulu kwendlela yefayile ekujoliswe kuyo
  • abasebenzisi.txt - ifayile echaza abasebenzisi abaza kwenziwa

ulawulo configs iqulethe i-defconfig yeebhodi zethu. Sinenye kuphela.

ipakethe - ikhathalogu kunye neepakethi zethu. Ekuqaleni, i-buildroot iqulethe iinkcazo kunye nemithetho yokwakha inani elincinci leephakheji. Kamva sizakongeza umphathi wefestile ye-icewm kunye nomphathi wokungena womzobo oSlim apha.
Iziqwengana - ikuvumela ukuba ugcine iipetshi zakho kwiipakethe ezahlukeneyo. Iinkcukacha ezithe vetshe kwicandelo elahlukileyo elingezantsi.
Ngoku kufuneka songeze iifayile zenkcazo zomthi wethu wangaphandle. Kukho iifayile ezi-3 ezinoxanduva loku: external.desc, Config.in, external.mk.

ngaphandle.desc iqulethe eyona nkcazo:

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

Umgca wokuqala sisihloko. Kwi-builroot yexesha elizayo yenza ukuguquguquka $(BR2_EXTERNAL_MY_TREE_PATH), ekufuneka isetyenziswe xa uqwalasela indibano. Umzekelo, indlela eya kwifayile yomsebenzisi inokusetwa ngolu hlobo lulandelayo:

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

Umgca wesibini yinkcazo emfutshane, efundeka ngumntu.

Config.in, external.mk — iifayile zokuchaza iipakethe ezongeziweyo. Ukuba awongezi ezakho iipakethe, ngoko ke ezi fayile zinokushiywa zingenanto. Okwangoku, nantso into esiza kuyenza.
Ngoku sinomthi wethu wangaphandle olungeleyo, oqulethe i-defconfig yebhodi yethu kunye neefayile ezizifunayo. Makhe siye kulawulo lwe-buildroot kwaye sichaze ukusebenzisa umthi wangaphandle:

[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

Kumyalelo wokuqala sisebenzisa ingxoxo BR2_EXTERNAL=../umthi_wam/, ebonisa usebenziso lomthi wangaphandle.Ungakhankanya imithi emininzi yangaphandle esetyenziswa ngaxeshanye.Kulo mzekelo, kufuneka wenze oku kube kanye, emva kokuba ifayile output/.br-external.mk yenziwe ukuba igcina ulwazi malunga nomthi wangaphandle osetyenzisiweyo:

[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

Kubalulekile! Iindlela ezikule fayile ziya kuba ngokupheleleyo!

Umba wokhetho lwangaphandle uvele kwimenyu:

I-Buildroot - inxalenye yesi-2. Ukwenza uqwalaselo lwebhodi yakho; usebenzisa umthi wangaphandle, i-rootfs-overlay, i-post-build scripts

Le submenu iya kuqulatha iipakethe zethu ezisuka kumthi wethu wangaphandle. Eli candelo alinanto okwangoku.

Ngoku kubaluleke kakhulu ukuba siphinde sibhale iindlela eziyimfuneko zokusebenzisa umthi wangaphandle.

Nceda qaphela ukuba kwi Yakha iinketho → Indawo yokugcina i-buildroot config icandelo, kuya kubakho umendo opheleleyo kwi-defconfig egciniweyo. Yenziwe ngexesha lokuchaza ukusetyenziswa kwe-extgernal_tree.

Kwakhona siya kulungisa iindlela kwicandelo loqwalaselo lweSistim. Kwitafile enabasebenzisi abayiliweyo:

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

Kwicandelo le-Kernel, tshintsha umendo kuqwalaselo lwe-kernel:

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

Ngoku iifayile zethu ezivela kumthi wethu wangaphandle ziya kusetyenziswa ngexesha lokuhlanganisa. Xa usiya komnye uvimba weefayili okanye uhlaziya i-buildroot, siya kuba neengxaki ezincinci.

Ukongeza ingcambu fs ngaphezulu:

Le ndlela ikuvumela ukuba udibanise/utshintshe ngokulula iifayile kwindlela yefayile ekujoliswe kuyo.
Ukuba ifayile ikwingcambu ye fs, kodwa ayikho kwithagethi, iya kongezwa
Ukuba ifayile ikwingcambu ye fs kwaye ikwithagethi, ke iya kutshintshwa.
Okokuqala, makhe sisete indlela eya kwiingcambu ze-fs overlay dir. Oku kwenziwa kuqwalaselo lweSixokelelwano → Iingcambu zendlela yefayile yokwaleka icandelo:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Ngoku makhe senze iifayile ezimbini.

[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

Ifayile yokuqala (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) iya kuthatha indawo yefayile/etc/hosts ifayile kwinkqubo egqityiweyo. Ifayile yesibini (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) iya kongezwa.

Siqokelela kwaye sijonge:

I-Buildroot - inxalenye yesi-2. Ukwenza uqwalaselo lwebhodi yakho; usebenzisa umthi wangaphandle, i-rootfs-overlay, i-post-build scripts

Ukwenziwa kwezikripthi zokwenza ngokwezifiso kumanqanaba ahlukeneyo endibano yenkqubo

Rhoqo kufuneka wenze umsebenzi othile ngaphakathi kwendlela yefayile ekujoliswe kuyo phambi kokuba ihlanganiswe kwimifanekiso.

Oku kunokwenziwa kwicandelo loqwalaselo lweSixokelelwano:

I-Buildroot - inxalenye yesi-2. Ukwenza uqwalaselo lwebhodi yakho; usebenzisa umthi wangaphandle, i-rootfs-overlay, i-post-build scripts

Izikripthi ezimbini zokuqala ziphunyezwa emva kokuba inkqubo yefayile ekujoliswe kuyo yakhiwe, kodwa ngaphambi kokuba ihlanganiswe kwimifanekiso. Umahluko kukuba iskripthi se-fakeroot senziwe kumxholo we-fakeroot, olinganisa umsebenzi njengomsebenzisi weengcambu.

Iskripthi sokugqibela senziwa emva kokuba imifanekiso yenkqubo yenziwe. Unokwenza izenzo ezongezelelweyo kuyo, umzekelo, khuphela iifayile eziyimfuneko kwiseva ye-NFS okanye wenze umfanekiso we-firmware yesixhobo sakho.

Njengomzekelo, ndiza kwenza iskripthi esiza kubhala inguqulelo kunye nomhla wokwakha ukuya /etc/.
Okokuqala ndiza kubonisa indlela eya kule fayile kumthi wangaphandle:

I-Buildroot - inxalenye yesi-2. Ukwenza uqwalaselo lwebhodi yakho; usebenzisa umthi wangaphandle, i-rootfs-overlay, i-post-build scripts

Kwaye ngoku iskripthi ngokwaso:

[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

Emva kwendibano, ungabona le fayile kwisixokelelwano.

Enyanisweni, iskripthi sinokuba sikhulu. Ke ngoko, kwiprojekthi yokwenyani ndithathe indlela ephezulu kakhulu:

  1. Ndenze i-directory (my_tree/board_my_x86_board/inside_fakeroot_scripts) apho kukho izikripthi eziza kuphunyezwa, kunye namanani e-serial. Umzekelo, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ndibhale iskripthi (my_tree/board_my_x86_board/run_inside_fakeroot.sh) ehamba ngolu luhlu kwaye iphumeze ngokulandelelana izikripthi eziqulethwe kuyo.
  3. Ikhankanyiwe le script kwiisethingi zebhodi kuqwalaselo lweNkqubo -> Izikripthi zesiko ukuba ziqhutywe ngaphakathi kwendawo ye-fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) icandelo

umthombo: www.habr.com

Yongeza izimvo