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
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:
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:
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:
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:
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:
- Ħ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
- 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
- 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