Buildroot — pjesa 2. Krijimi i konfiguracionit tĂ« bordit tuaj; pĂ«rdorimi i tree-sĂ« ekstern, rootfs-overlay, skriptave post-build

Në këtë seksion shqyrtoj një pjesë të mundësive të personalizimit që më kanë nevojitur. Ky nuk është një listë e plotë e asaj që ofron buildroot, por janë të gjitha funksionale dhe nuk kërkojnë ndërhyrje në skedarët e vetë buildroot.

Përdorimi i mekanizmit EXTERNAL për personalizim

Në artikullin e mëparshëm u shqyrtua një shembull i thjeshtë i shtimit të konfiguracionit tonë, duke shtuar defconfig-in e bordit dhe skedarët e nevojshëm drejtpërdrejt në katalogun Buildroot.

Por ky metodë nuk është shumë e përshtatshme, veçanërisht gjatë përditësimit të buildroot. Për të zgjidhur këtë problem ekziston mekanizmi external tree. Qëllimi i tij është që në një katalog të veçantë mund të ruhet katalogu board, configs, packages dhe të tjera (për shembull, unë e përdor katalogun patches për të aplikuar patches në paketa, më shumë në një seksion të veçantë) dhe buildroot do t'i shtojë automatikisht ato në ato që ka në katalogun e vet.

Shënim: mund të aplikoni disa external tree menjëherë, ka një shembull në udhëzimin buildroot

Të krijojmë një katalog my_tree, që ndodhet pranë katalogut të buildroot dhe të transferojmë atje konfiguracionin tonë. Në daljen duhet të kemi strukturën e mëposhtme të skedarëve:

[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 kataloge, 7 skedarë

Siç duket, në përgjithësi struktura përsërit strukturën e buildroot.

Katalogu board përmban skedarë specifikë për çdo bord në rastin tonë:

  • bef_cr_fs_img.sh — skript qĂ« do tĂ« ekzekutohet pas ndĂ«rtimit tĂ« sistemit tĂ« skedarĂ«ve target, por para paketimit tĂ« saj nĂ« imazhe. MĂ« vonĂ« do ta pĂ«rdorim atĂ«
  • linux.config — konfigurimi i bĂ«rthamĂ«s
  • rootfs_overlay — katalogu pĂ«r tĂ« mbivendosur mbi sistemin e skedarĂ«ve target
  • users.txt — skedari me pĂ«rshkrimin e pĂ«rdoruesve qĂ« do tĂ« krijohen

Katalogu configs përmban defconfig-in e bordit tonë. Ne kemi vetëm një.

Pako — katalogu me paketat tona. Fillimisht buildroot pĂ«rmban pĂ«rshkrime dhe rregulla ndĂ«rtimi pĂ«r njĂ« numĂ«r tĂ« kufizuar paketash. MĂ« vonĂ« do ta shtojmĂ« kĂ«tu menaxherin e dritares icewm dhe menaxherin e hyrjes grafike nĂ« sistem Slim.
Patches — lejon ruajtjen e lehtĂ« tĂ« patches pĂ«r paketat e ndryshme. MĂ« shumĂ« nĂ« njĂ« seksion tĂ« veçantĂ« mĂ« pas.
Tani duhet të shtojmë skedarët e përshkrimit të external-tree tonë. Këto përgjigjen 3 skedarë: external.desc, Config.in, external.mk.

external.desc përmban përshkrimin e tij:

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

Rreshti i parĂ« — emri. MĂ« pas buildroot do tĂ« krijojĂ« njĂ« variablĂ« $(BR2_EXTERNAL_MY_TREE_PATH), e cila duhet tĂ« pĂ«rdoret gjatĂ« konfigurimit tĂ« ndĂ«rtimit. PĂ«r shembull, rruga pĂ«r skedarin me pĂ«rdoruesit mund tĂ« caktohet si mĂ« poshtĂ«:

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

Rreshti i dytĂ« — njĂ« pĂ«rshkrim i shkurtĂ«r, i kuptueshĂ«m pĂ«r njeriun.

Config.in, external.mk — skedarĂ« pĂ«r pĂ«rshkrimin e paketimeve tĂ« shtuar. NĂ«se nuk po shtoni paketa, kĂ«ta skedarĂ« mund tĂ« lihen tĂ« zbrazĂ«t. Deri tani kĂ«shtu do tĂ« veprojmĂ«.
Tani kemi përgatitur external-tree tonë, që përmban defconfig për pllakën tonë dhe skedarët e nevojshëm për të. Tani do të kalojmë në katalogun buildroot, do të specifikojmë të përdorim external-tree:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/my_x86_board_defconfig
#
# konfigurimi u shkrua në /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Në komandën e parë përdorim argumentin BR2_EXTERNAL=../my_tree/, që tregon përdorimin e external tree. Mund të caktoni njëkohësisht disa external-tree për t'u përdorur. Në këtë rast, është mjaft të bëni këtë një herë, pas së cilës krijohet skedari output/.br-external.mk, që ruan informacionin mbi external-tree të përdorur:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Skedar i krijuar automatikisht; MOS E EDİTÓNI.
#

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

E rëndësishme! Në këtë skedar rrugët do të jenë absolute!

Në menu u shfaq një pikë Alternative options:

Buildroot — pjesa 2. Krijimi i konfiguracionit tĂ« bordit tuaj; pĂ«rdorimi i tree-sĂ« ekstern, rootfs-overlay, skriptave post-build

Në këtë nënmenu do të përmbahen paketat tona nga external-tree ynë. Për momentin ky seksion është i zbrazët.

Tani është më e rëndësishme që të rishkruajmë rrugët e nevojshme për të përdorur external-tree.

Vini re se nĂ« seksionin Build options → Location to save buildroot config, do tĂ« jetĂ« njĂ« rrugĂ« absolute pĂ«r defconfig-in e ruajtur. Kjo formohet nĂ« momentin e caktimit tĂ« pĂ«rdorimit tĂ« external_tree.

Gjithashtu në seksionin System configuration do të rregullojmë rrugët. Për tabelën me përdoruesit e krijuar:

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

Në seksionin Kernel do të ndryshojmë rrugën për konfigurimin e bërthamës:

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

Tani, gjatë ndërtimit, do të përdoren skedarët tanë nga external-tree ynë. Nëse i transferojmë në një katalog tjetër, duke përditësuar buildroot do të kemi sa më pak probleme.

Shtimi i root fs overlay:

Ky mekanizëm lejon lehtësisht shtimin/zëvendësimin e skedarëve në sistemin e skedarëve të target.
Nëse skedari është në root fs overlay, por nuk është në target, ai do të shtohet.
Nëse skedari ekziston në root fs overlay dhe në target, ai do të zëvendësohet.
SĂ« pari, le tĂ« pĂ«rcaktojmĂ« rrugĂ«n pĂ«r direktorinĂ« e root fs overlay. Kjo bĂ«het nĂ« seksionin Konfigurimi i sistemit → Drejtori tĂ« sistemit tĂ« skedave tĂ« root:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Tani do të krijojmë dy skedarë.

[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

Skedari i parë (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) do të zëvendësojë skedarin /etc/hosts në sistemin përfundimtar. Skedari i dytë (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) do të shtohet.

Kemi mbledhur dhe po kontrollojmë:

Buildroot — pjesa 2. Krijimi i konfiguracionit tĂ« bordit tuaj; pĂ«rdorimi i tree-sĂ« ekstern, rootfs-overlay, skriptave post-build

Ekzekutimi i skenarëve të personalizimit në faza të ndryshme të ndërtimit të sistemit

Shpesh është e nevojshme të kryhen disa veprime brenda sistemit të skedave target para se ai të paketizohet në imazhe.

Kjo mund të bëhet në seksionin Konfigurimi i sistemit:

Buildroot — pjesa 2. Krijimi i konfiguracionit tĂ« bordit tuaj; pĂ«rdorimi i tree-sĂ« ekstern, rootfs-overlay, skriptave post-build

Dy skenarët e parë ekzekutohen pas ndërtimit të sistemit të skedave target, por para paketimit të tij në imazhe. Dallimi është se skenari fakeroot ekzekutohet brenda kontekstit fakeroot, që do të thotë simulohet puna nga përdoruesi root.

Skenari i fundit ekzekutohet tashmë pas krijimit të imazheve të sistemit. Në të mund të kryhen veprime të tjera, si kopjimi i skedarëve të nevojshëm në serverin nfs ose krijimi i një imazhi të firmware të pajisjes.

Si shembull, do të krijoj një skenar që do të shkruajë versionin dhe datën e ndërtimit në /etc/
Së pari, do të jap rrugën për këtë skedar në pemën time ekstërne:

Buildroot — pjesa 2. Krijimi i konfiguracionit tĂ« bordit tuaj; pĂ«rdorimi i tree-sĂ« ekstern, rootfs-overlay, skriptave post-build

Dhe tani skenari vetë:

[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

Pas ndërtimit, mund ta shihni këtë skedar në sistem.

Në praktikë, skenari mund të bëhet i madh. Prandaj, në një projekt real, kam ndjekur një qasje më të avancuar:

  1. Krijova një katalog (my_tree/board_my_x86_board/inside_fakeroot_scripts), ku ndodhen skenarët për t'u ekzekutuar, me numra rendorë. Për shembull, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kisha shkruar një skenar (my_tree/board_my_x86_board/run_inside_fakeroot.sh), i cili kalon nëpër këtë katalog dhe ekzekuton skenarët me radhë që ndodhen aty
  3. PĂ«rshkrova kĂ«tĂ« skenar nĂ« cilĂ«simet e bordit nĂ« seksionin Konfigurimi i sistemit → SkenarĂ«t e personalizuar pĂ«r t'u ekzekutuar brenda mjedisit fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster