Buildroot - parti 2. Il-ħolqien tal-konfigurazzjoni tal-bord tiegħek; bl-użu ta 'siġra esterna, rootfs-overlay, skripts ta' wara l-bini

F'din it-taqsima nħares lejn xi wħud mill-għażliet ta 'personalizzazzjoni li kelli bżonn. Din mhix lista kompluta ta 'dak li joffri buildroot, iżda huma pjuttost funzjonali u ma jeħtiġux intervent fil-fajls ta' buildroot innifsu.

Bl-użu tal-mekkaniżmu ESTERNI għall-adattament

Fl-artikolu preċedenti Ħarsa lejn eżempju sempliċi ta 'żieda tal-konfigurazzjoni tiegħek billi żżid id-defconfig tal-bord u l-fajls meħtieġa direttament fid-direttorju Buildroot.

Iżda dan il-metodu mhuwiex konvenjenti ħafna, speċjalment meta taġġorna buildroot. Hemm mekkaniżmu biex issolvi din il-problema siġra esterna. L-essenza tagħha hija li tista 'taħżen board, configs, pakketti u direttorji oħra f'direttorju separat (per eżempju, nuża d-direttorju tal-garża biex napplika garża għal pakketti, aktar dettalji f'sezzjoni separata) u buildroot innifsu se jżidhom ma' dawk f' direttorju tagħha.

Nota: inti tista overlay diversi siġar esterni f'daqqa, hemm eżempju fil-manwal buildroot

Ejja noħolqu direttorju my_tree, li jinsab ħdejn id-direttorju tal-buildroot u tittrasferixxi l-konfigurazzjoni tagħna hemmhekk. L-output għandu jkun l-istruttura tal-fajl li ġejja:

[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

Kif tistgħu taraw, b'mod ġenerali l-istruttura tirrepeti l-istruttura tal-buildroot.

Directory bord fih fajls speċifiċi għal kull bord fil-każ tagħna:

  • bef_cr_fs_img.sh huwa skript li se jiġi eżegwit wara li tinbena s-sistema tal-fajl fil-mira, iżda qabel ma tiġi ppakkjata f'immaġini. Aħna se nużawha fil-futur
  • linux.config - konfigurazzjoni tal-kernel
  • rootfs_overlay - direttorju li għandu overlay fuq is-sistema tal-fajl fil-mira
  • users.txt - fajl li jiddeskrivi l-utenti li jridu jinħolqu

Directory konfigurazzjonijiet fih defconfig tal-bordijiet tagħna. Għandna wieħed biss.

Pakkett - katalogu mal-pakketti tagħna. Inizjalment, buildroot fih deskrizzjonijiet u regoli għall-bini ta 'numru limitat ta' pakketti. Aktar tard aħna nżidu l-maniġer tat-tieqa icewm u l-maniġer tal-login grafiku Slim hawn.
Irqajja ' — jippermettilek taħżen b'mod konvenjenti l-irqajja tiegħek għal pakketti differenti. Aktar dettalji f'sezzjoni separata hawn taħt.
Issa rridu nżidu l-fajls tad-deskrizzjoni għas-siġra esterna tagħna. Hemm 3 fajls responsabbli għal dan: external.desc, Config.in, external.mk.

esterna.desc fih id-deskrizzjoni attwali:

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

L-ewwel linja hija t-titlu. Fil-futur buildroot toħloq varjabbli $(BR2_EXTERNAL_MY_TREE_PATH), li għandha tintuża meta tiġi kkonfigurata l-assemblaġġ. Pereżempju, il-mogħdija għall-fajl tal-utent tista 'tiġi ssettjata kif ġej:

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

It-tieni linja hija deskrizzjoni qasira li tinqara mill-bniedem.

Config.in, external.mk — fajls biex jiddeskrivu pakketti miżjuda. Jekk ma żżidx il-pakketti tiegħek, allura dawn il-fajls jistgħu jitħallew vojta. Għalissa, hekk se nagħmlu.
Issa għandna s-siġra esterna tagħna lesta, li fiha d-defconfig tal-bord tagħna u l-fajls li teħtieġ. Ejja mmorru fid-direttorju tal-buildroot u speċifika biex tuża external-tree:

[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

Fl-ewwel kmand nużaw l-argument BR2_EXTERNAL=../siġra_tiegħi/, li jindika l-użu ta 'siġra esterna. Tista' tispeċifika diversi siġar esterni għall-użu fl-istess ħin. F'dan il-każ, għandek bżonn tagħmel dan darba biss, u wara jinħoloq fajl output/.br-external.mk li jaħżen informazzjoni dwar is-siġra esterna użata:

[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

Importanti! Il-mogħdijiet f'dan il-fajl se jkunu assoluti!

Fil-menu deher oġġett tal-għażliet esterni:

Buildroot - parti 2. Il-ħolqien tal-konfigurazzjoni tal-bord tiegħek; bl-użu ta 'siġra esterna, rootfs-overlay, skripts ta' wara l-bini

Dan is-submenu se jkun fih il-pakketti tagħna mis-siġra esterna tagħna. Din it-taqsima bħalissa hija vojta.

Issa huwa aktar importanti għalina li nikteb mill-ġdid il-mogħdijiet meħtieġa biex nużaw is-siġra esterna.

Jekk jogħġbok innota li fit-taqsima Ibni għażliet → Post biex issalva buildroot config, se jkun hemm triq assoluta għad-defconfig issejvjata. Huwa ffurmat fil-mument li jiġi speċifikat l-użu ta 'extgernal_tree.

Se nikkoreġu wkoll il-mogħdijiet fit-taqsima tal-konfigurazzjoni tas-Sistema. Għal tabella b'utenti maħluqa:

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

Fit-taqsima tal-kernel, ibdel it-triq għall-konfigurazzjoni tal-kernel:

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

Issa l-fajls tagħna mis-siġra esterna tagħna se jintużaw waqt l-assemblaġġ. Meta nimxu għal direttorju ieħor jew naġġornaw il-buildroot, ikollna minimu ta 'problemi.

Żieda ta' l-għerq fs overlay:

Dan il-mekkaniżmu jippermettilek li faċilment iżżid/tissostitwixxi fajls fis-sistema tal-fajl fil-mira.
Jekk il-fajl ikun fl-għotja fs overlay, iżda mhux fil-mira, allura jiġi miżjud
Jekk il-fajl ikun fl-għotja fs overlay u fil-mira, allura jiġi sostitwit.
L-ewwel, ejja nissettjaw il-mogħdija għal root fs overlay dir. Dan isir fil-Konfigurazzjoni tas-Sistema → Sezzjoni tad-direttorji ta' overlay tas-sistema tal-fajls tal-għeruq:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Issa ejja noħolqu żewġ fajls.

[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

L-ewwel fajl (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) se jissostitwixxi l-fajl /etc/hosts fuq is-sistema lesta. It-tieni fajl (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) se jiġi miżjud.

Aħna niġbru u niċċekkjaw:

Buildroot - parti 2. Il-ħolqien tal-konfigurazzjoni tal-bord tiegħek; bl-użu ta 'siġra esterna, rootfs-overlay, skripts ta' wara l-bini

Eżekuzzjoni ta 'skripts ta' customization fi stadji differenti ta 'assemblaġġ tas-sistema

Ħafna drabi għandek bżonn twettaq xi xogħol ġewwa s-sistema tal-fajl fil-mira qabel ma tiġi ppakkjata f'immaġini.

Dan jista' jsir fit-taqsima tal-konfigurazzjoni tas-Sistema:

Buildroot - parti 2. Il-ħolqien tal-konfigurazzjoni tal-bord tiegħek; bl-użu ta 'siġra esterna, rootfs-overlay, skripts ta' wara l-bini

L-ewwel żewġ skripts jiġu esegwiti wara li tinbena s-sistema tal-fajl fil-mira, iżda qabel ma tiġi ppakkjata f'immaġini. Id-differenza hija li l-iskrittura tal-fakeroot hija eżegwita fil-kuntest tal-fakeroot, li jissimula xogħol bħala l-utent għerq.

L-aħħar script jiġi esegwit wara li jinħolqu l-immaġini tas-sistema. Tista 'twettaq azzjonijiet addizzjonali fiha, pereżempju, tikkopja l-fajls meħtieġa għal server NFS jew toħloq immaġni tal-firmware tat-tagħmir tiegħek.

Bħala eżempju, ser noħloq skript li se jikteb il-verżjoni u jibni d-data għal /etc/.
L-ewwel se nindika t-triq għal dan il-fajl fis-siġra esterna tiegħi:

Buildroot - parti 2. Il-ħolqien tal-konfigurazzjoni tal-bord tiegħek; bl-użu ta 'siġra esterna, rootfs-overlay, skripts ta' wara l-bini

U issa l-iskript innifsu:

[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

Wara l-assemblaġġ, tista 'tara dan il-fajl fuq is-sistema.

Fil-prattika, l-iskript jista 'jsir kbir. Għalhekk, fil-proġett reali ħadt rotta aktar avvanzata:

  1. Ħloqt direttorju (my_tree/board_my_x86_board/inside_fakeroot_scripts) li fih hemm skripts li jridu jiġu esegwiti, b'numri tas-serje. Pereżempju, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ktibt skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) li jgħaddi minn dan id-direttorju u jesegwixxi b'mod sekwenzjali l-iskripts li jinsabu fih
  3. Speċifikat dan l-iskript fis-settings tal-bord fil-konfigurazzjoni tas-Sistema -> skripts personalizzati biex jaħdmu ġewwa l-ambjent fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) taqsima

Sors: www.habr.com

Żid kumment