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

Në këtë seksion unë shqyrtoj disa mundësi personalizimi që më janë dashur. Kjo nuk është lista e plotë e asaj që ofron buildroot, por ato janë plotësisht funksionale dhe nuk kërkojnë ndërhyrje në skedarët e buildroot vetë.

Përdorimi i mekanizmit EXTERNAL për personalizim

Në artikullin e mëparshëm u shqyrtua një shembull i thjeshtë i shtimit të konfiguracionit tuaj, përmes shtimit të defconfig-it të bordit dhe skedarëve të nevojshëm drejtpërdrejt në katalogun Buildroot.

Por kjo metodë nuk është shumë e përshtatshme, veçanërisht kur përditësohet buildroot. Për të zgjidhur këtë problem ekziston një mekanizëm external tree. Qëllimi i tij është që në një katalog të veçantë mund të ruani katalogët board, configs, packages dhe të tjera (për shembull, unë përdor katalogun patches për të aplikuar patches mbi paketat, më shumë në një seksion të veçantë) dhe buildroot do t'i shtojë automatikisht ato në ato ekzistuese në katalogun e tij.

Vërejtje: mund të aplikoni disa external tree menjëherë, ka një shembull në udhëzimin e buildroot

Do të krijojmë një katalóg my_tree, që ndodhet pranë katalógut buildroot dhe do ta transferojmë atje konfigurimin tonë. Në përfundim, duhet të marrim 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 directories, 7 files

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

Katalóg board përmban skedarë, specifik për çdo plaka në rastin tonë:

  • bef_cr_fs_img.sh — skenari 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 kernel-it
  • rootfs_overlay — katalogu pĂ«r tĂ« mbivendosur mbi sistemin e skedarĂ«ve target
  • users.txt — skedar me pĂ«rshkrimin e pĂ«rdoruesve tĂ« krijuar

Katalóg configs përmban defconfig-t e pllakave tona. Në fakt, ka vetëm një.

Package — 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 tĂ« shtojmĂ« menaxherin e dritareve icewm dhe menaxherin e hyrjes nĂ« sistem Slim.
Patches — lejon qĂ« tĂ« ruani rehat patches pĂ«r paketa tĂ« ndryshme. MĂ« shumĂ« informacion nĂ« njĂ« seksion tĂ« veçantĂ« mĂ« poshtĂ«.
Tani duhet të shtojmë skedarët e përshkrimit të our external-tree. Këta janë 3 skedarë: external.desc, Config.in, external.mk.

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

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: External-tree im i thjeshtë për artikull

Rreshti i parĂ« — emri. MĂ« vonĂ« buildroot do tĂ« krijojĂ« njĂ« variabĂ«l $(BR2_EXTERNAL_MY_TREE_PATH), tĂ« cilĂ«n duhet ta pĂ«rdorim gjatĂ« konfigurimit tĂ« ndĂ«rtimit. PĂ«r shembull, rruga nĂ« skedarin me pĂ«rdoruesit mund tĂ« caktohet kĂ«shtu:

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

Rreshti i dytĂ« — njĂ« pĂ«rshkrim i shkurtĂ«r, i kuptueshĂ«m nga njerĂ«zit.

Config.in, external.mk — skedarĂ« pĂ«r pĂ«rshkrimin e pakove tĂ« shtuara. NĂ«se nuk do tĂ« shtoni pakot tuaja, kĂ«ta skedarĂ« mund tĂ« mbeten tĂ« zbrazĂ«t. Deri tani, ne do tĂ« procedojmĂ« kĂ«shtu.
Tani kemi gati external-tree tonë, që përmban defconfig të bordit tonë dhe skedarët e nevojshëm. Le të kalojmë në katalogun buildroot dhe të caktuam 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/, duke treguese external tree. Mund të përcaktoni një ose më shumë external-tree për përdorim. Mjafton ta bëni këtë njëherë, pas së cilës krijohet skedari output/.br-external.mk, i cili ruan informacionin rreth përdorimit të external-tree:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Skedar i krijuar automatikisht; MOS E EDITONI.
#

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 = Maja ime e thjeshtë external-tree për artikullin

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

Në menu u shfaq një pikë opsionesh External:

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

Ky nënmeny do të përmbajë paketat tona nga external-tree. Aktualisht kjo seksion është bosh.

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

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

Po ashtu në seksionin System configuration do të korrigjojmë 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 kernelit:

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

Tani do të përdoren skedarët tanë nga external-tree kur ndërtojmë. Kur kalojmë në një katalog tjetër, përditësimi i buildroot do të ketë sa më pak probleme.

Shtimi i overlay-it të sistemit të skedarëve root:

Ky mekanizëm lejon lehtësisht të shtoni/zëvendësoni skedarë në sistemin e skedarëve të target.
Nëse një skedar ndodhet në overlay-in e sistemit të skedarëve root, por jo në target, atëherë do të shtohet.
Nëse një skedar ndodhet në overlay-in e sistemit të skedarëve root dhe në target, atëherë do të zëvendësohet.
SĂ« pari, le tĂ« cakt hemos njĂ« rrugĂ« pĂ«r direktorinĂ« e overlay-it tĂ« sistemit tĂ« skedarĂ«ve root. Kjo bĂ«het nĂ« seksionin Konfigurimi i sistemit → DrejtoritĂ« e overlay-it tĂ« sistemit tĂ« skedarĂ«ve 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 
Ky është skedari i ri nga overlay

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

Dërgojmë dhe kontrollojmë:

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

Kryerja e skripteve të personalizimit në faza të ndryshme të ndërtimit të sistemit

Shpesh duhet të kryhen disa veprime brenda sistemit të skedarëve të target, para se të paketohen në imazhe.

Kjo mund të bëhet në seksionin e Konfigurimit të Sistemit:

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

Dy skriptet e para ekzekutohen pas ndërtimit të sistemit të qëllimit, por para paketimit të tij në imazhe. Dallimi është se skripti fakeroot ekzekutohet në kontekstin e fakeroot, duke imituar veprimin nga përdoruesi root.

Skripti i fundit ekzekutohet pas krijimit të imazheve të sistemit. Në të, mund të kryhen veprime të tjera, siç është kopjimi i skedarëve të nevojshëm në serverin nfs ose krijimi i imazhit të firmware-it të pajisjes tuaj.

Si shembull, do të krijoj një skript që do të shkruaj versionin dhe datën e ndërtimit në /etc/.
Fillimisht do të tregoj rrugën në këtë skedar në pemën time të jashtme:

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

Dhe tani vetë skripti:

[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 të shihni këtë skedar në sistem.

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

  1. Krijova një katalog (my_tree/board_my_x86_board/inside_fakeroot_scripts), ku qëndrojnë skriptet për ekzekutimin, me numra rangu. Për shembull, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kam shkruaj script (my_tree/board_my_x86_board/run_inside_fakeroot.sh), i cili kalon përmes këtij katalogu dhe përsekuentisht ekzekuton script-et që ndodhen në të.
  3. E kam treguar këtë script në konfigurimet e bordit në seksionin System configuration -> Custom scripts to run inside the fakeroot environment ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh).

Burimi: habr.com

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