Buildroot - pjesa 2. Krijimi i konfigurimit të bordit tuaj; duke përdorur pemë të jashtme, skriptet rootfs-overlay, post-build

Në këtë seksion unë shikoj disa nga opsionet e personalizimit që më duheshin. Kjo nuk është një listë e plotë e asaj që ofron buildroot, por ato janë mjaft funksionale dhe nuk kërkojnë ndërhyrje në skedarët e vetë buildroot.

Përdorimi i mekanizmit EXTERNAL për personalizim

Në një artikull të mëparshëm Ne shikuam një shembull të thjeshtë të shtimit të konfigurimit tuaj duke shtuar defconfig të bordit dhe skedarët e nevojshëm direkt në direktorinë Buildroot.

Por kjo metodë nuk është shumë e përshtatshme, veçanërisht kur përditësohet buildroot. Ekziston një mekanizëm për të zgjidhur këtë problem pemë e jashtme. Thelbi i tij është që ju mund të ruani bordet, konfigurimet, paketat dhe drejtoritë e tjera në një drejtori të veçantë (për shembull, unë përdor drejtorinë e arnimeve për të aplikuar arna në paketa, më shumë detaje në një seksion të veçantë) dhe vetë buildroot do t'i shtojë ato në ato në drejtoria e saj.

Shënim: ju mund të mbivendosni disa pemë të jashtme menjëherë, ekziston një shembull në manualin e buildroot

Le të krijojmë një direktori my_tree, që ndodhet pranë drejtorisë së buildroot dhe transferojmë konfigurimin tonë atje. Dalja duhet të jetë struktura e mëposhtme e skedarit:

[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ç mund ta shihni, në përgjithësi struktura përsërit strukturën e buildroot.

Drejtoria Bordi përmban skedarë specifikë për çdo bord në rastin tonë:

  • bef_cr_fs_img.sh është një skript që do të ekzekutohet pas ndërtimit të sistemit të skedarëve të synuar, por përpara se ta paketojë atë në imazhe. Ne do ta përdorim atë në të ardhmen
  • linux.config - konfigurimi i kernelit
  • rootfs_overlay - direktori për të mbivendosur në krye të sistemit të skedarëve të synuar
  • users.txt - një skedar që përshkruan përdoruesit që do të krijohen

Drejtoria konfiguron përmban defconfig të bordeve tona. Ne kemi vetëm një.

paketë - katalog me paketat tona. Fillimisht, buildroot përmban përshkrime dhe rregulla për ndërtimin e një numri të kufizuar paketash. Më vonë do të shtojmë këtu menaxherin e dritares icewm dhe menaxherin grafik të hyrjes Slim.
Arna — ju lejon të ruani me lehtësi arna tuaja për paketa të ndryshme. Më shumë detaje në një seksion të veçantë më poshtë.
Tani duhet të shtojmë skedarët e përshkrimit për pemën tonë të jashtme. Për këtë janë përgjegjës 3 skedarë: external.desc, Config.in, external.mk.

i jashtëm.përshk përmban përshkrimin aktual:

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

Rreshti i parë është titulli. Në të ardhmen buildroot krijoni një variabël $(BR2_EXTERNAL_MY_TREE_PATH), i cili duhet të përdoret gjatë konfigurimit të montimit. Për shembull, shtegu i skedarit të përdoruesit mund të vendoset si më poshtë:

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

Rreshti i dytë është një përshkrim i shkurtër, i lexueshëm nga njeriu.

Config.in, external.mk — skedarë për të përshkruar paketat e shtuara. Nëse nuk shtoni paketat tuaja, atëherë këta skedarë mund të lihen bosh. Tani për tani, kjo është ajo që ne do të bëjmë.
Tani e kemi gati pemën tonë të jashtme, që përmban defconfig të tabelës sonë dhe skedarët që i nevojiten. Le të shkojmë te direktoria buildroot dhe të specifikojmë përdorimin e pemës së jashtme:

[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

Në komandën e parë përdorim argumentin BR2_EXTERNAL=../my_tree/, që tregon përdorimin e një peme të jashtme. Mund të specifikoni disa pemë të jashtme për përdorim në të njëjtën kohë. Në këtë rast, ju duhet ta bëni këtë vetëm një herë, pas së cilës krijohet një skedar output/.br-external.mk që ruan informacione për pemën e jashtme të përdorur:

[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

E rëndësishme! Shtigjet në këtë skedar do të jenë absolute!

Një artikull i opsioneve të jashtme është shfaqur në meny:

Buildroot - pjesa 2. Krijimi i konfigurimit të bordit tuaj; duke përdorur pemë të jashtme, skriptet rootfs-overlay, post-build

Kjo nënmenu do të përmbajë paketat tona nga pema jonë e jashtme. Ky seksion është aktualisht bosh.

Tani është më e rëndësishme për ne që të rishkruajmë shtigjet e nevojshme për të përdorur pemën e jashtme.

Ju lutemi vini re se në seksionin Build Opsionet → Vendndodhja për të ruajtur konfigurimin e buildroot, do të ketë një shteg absolut për në defconfig të ruajtur. Ajo është formuar në momentin e specifikimit të përdorimit të extgernal_tree.

Ne gjithashtu do të korrigjojmë shtigjet në seksionin e konfigurimit të sistemit. Për një tabelë me përdoruesit e krijuar:

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

Në seksionin Kernel, ndryshoni shtegun për në konfigurimin e kernelit:

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

Tani skedarët tanë nga pema jonë e jashtme do të përdoren gjatë montimit. Kur kalojmë në një drejtori tjetër ose përditësojmë buildroot, do të kemi një minimum problemesh.

Shtimi i mbivendosjes së rrënjës fs:

Ky mekanizëm ju lejon të shtoni/zëvendësoni me lehtësi skedarët në sistemin e skedarëve të synuar.
Nëse skedari është në mbivendosje fs root, por jo në target, atëherë ai do të shtohet
Nëse skedari është në mbivendosje fs rrënjë dhe në target, atëherë ai do të zëvendësohet.
Së pari, le të vendosim shtegun për rrënjë fs overlay dir. Kjo bëhet në seksionin Konfigurimi i Sistemit → Drejtoritë e mbivendosjes së sistemit të skedarëve rrënjë:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Tani le 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 e përfunduar. Skedari i dytë (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) do të shtohet.

Ne mbledhim dhe kontrollojmë:

Buildroot - pjesa 2. Krijimi i konfigurimit të bordit tuaj; duke përdorur pemë të jashtme, skriptet rootfs-overlay, post-build

Ekzekutimi i skripteve të personalizimit në faza të ndryshme të montimit të sistemit

Shpesh ju duhet të kryeni disa punë brenda sistemit të skedarëve të synuar përpara se të paketohet në imazhe.

Kjo mund të bëhet në seksionin e konfigurimit të sistemit:

Buildroot - pjesa 2. Krijimi i konfigurimit të bordit tuaj; duke përdorur pemë të jashtme, skriptet rootfs-overlay, post-build

Dy skriptet e para ekzekutohen pasi të ndërtohet sistemi i skedarëve të synuar, por përpara se të paketohet në imazhe. Dallimi është se skripti fakeroot ekzekutohet në kontekstin e fakeroot, i cili simulon punën si përdorues rrënjë.

Skripti i fundit ekzekutohet pasi të krijohen imazhet e sistemit. Mund të kryeni veprime shtesë në të, për shembull, të kopjoni skedarët e nevojshëm në një server NFS ose të krijoni një imazh të firmuerit të pajisjes tuaj.

Si shembull, unë do të krijoj një skript që do të shkruajë versionin dhe datën e ndërtimit në /etc/.
Së pari do të tregoj shtegun drejt këtij skedari në pemën time të jashtme:

Buildroot - pjesa 2. Krijimi i konfigurimit të bordit tuaj; duke përdorur pemë të jashtme, skriptet rootfs-overlay, post-build

Dhe tani vetë skenari:

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

Në praktikë, skenari mund të bëhet i madh. Prandaj, në projektin real mora një rrugë më të avancuar:

  1. Krijova një direktori (my_tree/board_my_x86_board/inside_fakeroot_scripts) në të cilën ka skripta për t'u ekzekutuar, me numra serialë. Për shembull, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kam shkruar një skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) që kalon nëpër këtë direktori dhe ekzekuton në mënyrë sekuenciale skriptet e përfshira në të
  3. Specifikimi i këtij skripti në cilësimet e bordit në konfigurimin e sistemit -> Skriptet e personalizuara për të ekzekutuar brenda mjedisit të fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Burimi: www.habr.com

Shto një koment