Buildroot - parto 2. Krei vian tabulkonfiguracion; uzante eksteran arbon, rootfs-overlay, post-konstruajn skriptojn

En ĉi tiu sekcio mi rigardas kelkajn el la personigaj opcioj, kiujn mi bezonis. Ĉi tio ne estas kompleta listo de tio, kion proponas buildroot, sed ili estas sufiĉe funkciaj kaj ne postulas intervenon en la dosieroj de buildroot mem.

Uzante la EKSTERAN mekanismon por personigo

En la antaŭa artikolo Ni rigardis simplan ekzemplon de aldoni vian propran agordon aldonante la defconfig de la tabulo kaj la necesajn dosierojn rekte al la dosierujo Buildroot.

Sed ĉi tiu metodo ne estas tre oportuna, precipe kiam ĝi ĝisdatigas buildroot. Estas mekanismo por solvi ĉi tiun problemon ekstera arbo. Ĝia esenco estas, ke vi povas konservi tabulon, agordojn, pakaĵojn kaj aliajn dosierujojn en aparta dosierujo (ekzemple, mi uzas la dosierujon de flikiloj por apliki flikojn al pakaĵoj, pli da detaloj en aparta sekcio) kaj buildroot mem aldonos ilin al tiuj en ĝia dosierujo.

Noto: vi povas supermeti plurajn eksterajn arbojn samtempe, estas ekzemplo en la manlibro de buildroot

Ni kreu dosierujon mia_arbo, situantan apud la dosierujo buildroot kaj transigu nian agordon tien. La eligo devus esti la sekva dosierstrukturo:

[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

Kiel vi povas vidi, ĝenerale la strukturo ripetas la strukturon de buildroot.

Gvidlibro tabulo enhavas dosierojn specifajn por ĉiu tabulo en nia kazo:

  • bef_cr_fs_img.sh estas skripto kiu estos efektivigita post konstruado de la cela dosiersistemo, sed antaŭ enpaki ĝin en bildojn. Ni uzos ĝin estonte
  • linux.config - agordo de la kerno
  • rootfs_overlay - dosierujo por supermeti super la cela dosiersistemo
  • users.txt - dosiero priskribanta la kreotajn uzantojn

Gvidlibro konfiguroj enhavas defconfig de niaj tabuloj. Ni havas nur unu.

pakaĵo - katalogo kun niaj pakoj. Komence, buildroot enhavas priskribojn kaj regulojn por konstrui limigitan nombron da pakaĵoj. Poste ni aldonos la icewm-fenestran administranton kaj la Slim-grafikan ensalutan administranton ĉi tie.
Miksaĵoj — permesas vin konvene konservi viajn pecetojn por malsamaj pakaĵoj. Pliaj detaloj en aparta sekcio malsupre.
Nun ni devas aldoni la priskribajn dosierojn por nia ekstera arbo. Estas 3 dosieroj respondecaj pri tio: external.desc, Config.in, external.mk.

ekstera.desc enhavas la realan priskribon:

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

La unua linio estas la titolo. Estonte buildroot kreu variablon $(BR2_EXTERNAL_MY_TREE_PATH), kiu devus esti uzata dum agordado de la aro. Ekzemple, la vojo al la uzantdosiero povas esti agordita jene:

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

La dua linio estas mallonga, homlegebla priskribo.

Config.in, ekstera.mk — dosieroj por priskribi aldonitajn pakaĵojn. Se vi ne aldonas viajn proprajn pakaĵojn, tiam ĉi tiuj dosieroj povas resti malplenaj. Nuntempe, tion ni faros.
Nun ni havas nian eksteran-arbon preta, enhavanta la defconfig de nia tabulo kaj la dosierojn kiujn ĝi bezonas. Ni iru al la buildroot-dosierujo kaj specifu uzi eksteran-arbon:

[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

En la unua komando ni uzas la argumenton BR2_EXTERNAL=../mia_arbo/, indikante la uzon de ekstera arbo. Vi povas specifi plurajn eksterajn arbojn por uzi samtempe. En ĉi tiu kazo, vi devas fari tion nur unufoje, post kio estas kreita dosiero output/.br-external.mk, kiu konservas informojn pri la ekstera-arbo uzata:

[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

Grave! La vojoj en ĉi tiu dosiero estos absolutaj!

En la menuo aperis ero de Eksteraj opcioj:

Buildroot - parto 2. Krei vian tabulkonfiguracion; uzante eksteran arbon, rootfs-overlay, post-konstruajn skriptojn

Ĉi tiu submenuo enhavos niajn pakaĵojn el nia ekstera-arbo. Ĉi tiu sekcio estas nuntempe malplena.

Nun pli gravas por ni reverki la necesajn vojojn por uzi eksteran-arbon.

Bonvolu noti, ke en la sekcio Konstruaj opcioj → Loko por konservi buildroot-agordon, estos absoluta vojo al la konservita defconfig. Ĝi estas formita en la momento de specifi la uzon de extgernal_tree.

Ni ankaŭ korektos la vojojn en la sekcio de Sistema agordo. Por tabelo kun kreitaj uzantoj:

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

En la sekcio Kerno, ŝanĝu la vojon al la agordo de la kerno:

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

Nun niaj dosieroj de nia ekstera-arbo estos uzataj dum kunigo. Movante al alia dosierujo aŭ ĝisdatigi la buildroot, ni havos minimume da problemoj.

Aldonante radikon fs tegmenton:

Ĉi tiu mekanismo ebligas al vi facile aldoni/anstataŭigi dosierojn en la cela dosiersistemo.
Se la dosiero estas en radiko fs-kovraĵo, sed ne en celo, tiam ĝi estos aldonita
Se la dosiero estas en radiko fs-kovraĵo kaj en celo, tiam ĝi estos anstataŭigita.
Unue, ni agordu la vojon al radiko fs overlay dir. Ĉi tio estas farita en la Sekcio de Sistemo-agordo → Radika dosiersistema tegmenta dosierujo:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nun ni kreu du dosierojn.

[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

La unua dosiero (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) anstataŭigos la /etc/hosts-dosieron sur la finita sistemo. La dua dosiero (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) estos aldonita.

Ni kolektas kaj kontrolas:

Buildroot - parto 2. Krei vian tabulkonfiguracion; uzante eksteran arbon, rootfs-overlay, post-konstruajn skriptojn

Efektivigo de personigo-skriptoj en malsamaj stadioj de sistema asembleo

Ofte vi devas fari iun laboron en la cela dosiersistemo antaŭ ol ĝi estas enpakita en bildojn.

Ĉi tio povas esti farita en la sekcio de Sistema agordo:

Buildroot - parto 2. Krei vian tabulkonfiguracion; uzante eksteran arbon, rootfs-overlay, post-konstruajn skriptojn

La unuaj du skriptoj estas ekzekutitaj post kiam la cela dosiersistemo estas konstruita, sed antaŭ ol ĝi estas enpakita en bildojn. La diferenco estas, ke la fakeroot-skripto estas ekzekutita en la kunteksto de fakeroot, kiu simulas laboron kiel la radika uzanto.

La lasta skripto estas ekzekutita post kiam la sistemaj bildoj estas kreitaj. Vi povas fari pliajn agojn en ĝi, ekzemple kopii la necesajn dosierojn al NFS-servilo aŭ krei bildon de via aparato-firmvaro.

Ekzemple, mi kreos skripton, kiu skribos la version kaj konstrudaton al /etc/.
Unue mi indikos la vojon al ĉi tiu dosiero en mia ekstera-arbo:

Buildroot - parto 2. Krei vian tabulkonfiguracion; uzante eksteran arbon, rootfs-overlay, post-konstruajn skriptojn

Kaj nun la skripto mem:

[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

Post asembleo, vi povas vidi ĉi tiun dosieron en la sistemo.

En praktiko, la skripto povas fariĝi granda. Tial, en la reala projekto mi prenis pli altnivelan vojon:

  1. Mi kreis dosierujon (my_tree/board_my_x86_board/inside_fakeroot_scripts) en kiu estas skriptoj plenumendaj, kun seriaj numeroj. Ekzemple, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Mi skribis skripton (my_tree/board_my_x86_board/run_inside_fakeroot.sh) kiu trairas ĉi tiun dosierujon kaj sinsekve plenumas la skriptojn enhavitajn en ĝi
  3. Specifis ĉi tiun skripton en la tabulo-agordoj en la Sistema agordo -> Propraj skriptoj por ruli en la fakeroot-medio ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) sekcio

fonto: www.habr.com

Aldoni komenton