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
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 articleRreshti 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.txtRreshti 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 menuconfigNë 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 articleE rëndësishme! Në këtë skedar rrugët do të jenë absolute!
Në menu u shfaq një pikë Alternative options:

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

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:

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:

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