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
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 filesSiç 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 artikullRreshti 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.txtRreshti 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 menuconfigNë 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 artikullinE rëndësishme! Në këtë skedar, rrugët do të jenë absolute!
Në menu u shfaq një pikë opsionesh External:

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.txtNë seksionin Kernel do të ndryshojmë rrugën për konfigurimin e kernelit:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configTani 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 overlaySkedari 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ë:

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:

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:

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-releasePas 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:
- 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
- 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ë.
- 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
