Buildroot – 2 dalis. Jūsų lentos konfigūracijos kūrimas; naudojant išorinį medį, rootfs-overlay, post-build scenarijus

Šiame skyriuje apžvelgiu kai kurias man reikalingas tinkinimo parinktis. Tai nėra visas sąrašas, ką siūlo buildroot, tačiau jie yra gana funkcionalūs ir nereikalauja įsikišimo į pačios buildroot failus.

Naudojant IŠORINĮ mechanizmą tinkinimui

Ankstesniame straipsnyje Mes pažvelgėme į paprastą pavyzdį, kaip pridėti savo konfigūraciją, pridedant plokštės defconfig ir reikiamus failus tiesiai į Buildroot katalogą.

Tačiau šis metodas nėra labai patogus, ypač atnaujinant „buildroot“. Yra mechanizmas, kaip išspręsti šią problemą išorinis medis. Jo esmė ta, kad galite laikyti plokštę, konfigūracijas, paketus ir kitus katalogus atskirame kataloge (pavyzdžiui, pataisų katalogą naudoju paketams pritaikyti pataisas, daugiau informacijos atskirame skyriuje), o pati buildroot pridės juos prie tų, kurie yra jo katalogas.

Pastaba: galite perdengti kelis išorinius medžius vienu metu, yra pavyzdys buildroot vadove

Sukurkime katalogą my_tree, esantį šalia buildroot katalogo ir perkelkime ten savo konfigūraciją. Išvesties failo struktūra turėtų būti tokia:

[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

Kaip matote, apskritai struktūra pakartoja buildroot struktūrą.

katalogas lenta yra failai, būdingi kiekvienai lentai mūsų atveju:

  • bef_cr_fs_img.sh yra scenarijus, kuris bus vykdomas sukūrus tikslinę failų sistemą, bet prieš supakuojant ją į vaizdus. Ateityje naudosime
  • linux.config – branduolio konfigūracija
  • rootfs_overlay – katalogas, skirtas perdengti tikslinės failų sistemos viršuje
  • users.txt – failas, aprašantis kurtinus vartotojus

katalogas configs yra mūsų plokščių defconfig. Turime tik vieną.

Paketas - katalogas su mūsų pakuotėmis. Iš pradžių buildroot pateikia aprašymus ir taisykles, kaip sukurti ribotą skaičių paketų. Vėliau čia pridėsime icewm langų tvarkyklę ir Slim grafinę prisijungimo tvarkyklę.
Vietomis — leidžia patogiai laikyti įvairių pakuočių pleistrus. Daugiau informacijos atskirame skyriuje žemiau.
Dabar turime pridėti išorinio medžio aprašo failus. Už tai atsakingi 3 failai: external.desc, Config.in, external.mk.

išorinis.desc yra tikrasis aprašymas:

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

Pirmoji eilutė yra pavadinimas. Ateityje buildroot sukurkite kintamąjį $(BR2_EXTERNAL_MY_TREE_PATH), kuris turėtų būti naudojamas konfigūruojant agregatą. Pavyzdžiui, kelias į vartotojo failą gali būti nustatytas taip:

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

Antroji eilutė yra trumpas, žmogui suprantamas aprašymas.

Config.in, external.mk - failai, skirti aprašyti pridėtinius paketus. Jei nepridedate savo paketų, šie failai gali būti palikti tušti. Kol kas mes taip ir darysime.
Dabar turime paruoštą išorinį medį, kuriame yra mūsų plokštės defconfig ir jai reikalingi failai. Eikime į buildroot katalogą ir nurodykite naudoti išorinį medį:

[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

Pirmoje komandoje naudojame argumentą BR2_EXTERNAL=../mano_medis/, nurodantis išorinio medžio naudojimą. Galite nurodyti kelis išorinius medžius, skirtus naudoti vienu metu. Tokiu atveju tai padaryti reikia tik vieną kartą, po to sukuriamas failas output/.br-external.mk, kuris saugo informaciją apie naudojamą išorinį medį:

[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

Svarbu! Šio failo keliai bus absoliutūs!

Meniu pasirodė išorinių parinkčių elementas:

Buildroot – 2 dalis. Jūsų lentos konfigūracijos kūrimas; naudojant išorinį medį, rootfs-overlay, post-build scenarijus

Šiame submeniu bus mūsų paketai iš išorinio medžio. Šiuo metu ši skiltis tuščia.

Dabar mums svarbiau perrašyti reikiamus kelius, kad galėtume naudoti išorinį medį.

Atminkite, kad kūrimo parinktyse → Vieta, kurioje norite išsaugoti buildroot konfigūraciją, bus absoliutus kelias į išsaugotą defconfig. Jis formuojamas nurodant extgernal_tree naudojimą.

Taip pat pataisysime kelius skyriuje Sistemos konfigūracija. Lentelei su sukurtais vartotojais:

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

Skyriuje Branduolis pakeiskite kelią į branduolio konfigūraciją:

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

Dabar mūsų failai iš išorinio medžio bus naudojami surinkimo metu. Perkeldami į kitą katalogą arba atnaujindami „buildroot“ turėsime mažiausiai problemų.

Pridedama šakninė fs perdanga:

Šis mechanizmas leidžia lengvai pridėti / pakeisti failus tikslinėje failų sistemoje.
Jei failas yra root fs perdangoje, bet ne tikslinėje, tada jis bus pridėtas
Jei failas yra root fs perdangoje ir tikslinėje, tada jis bus pakeistas.
Pirmiausia nustatykime kelią į root fs overlay dir. Tai atliekama skyriuje Sistemos konfigūracija → Root failų sistemos perdangos katalogai:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Dabar sukurkime du failus.

[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

Pirmasis failas (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) pakeis failą /etc/hosts baigtoje sistemoje. Antrasis failas (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) bus pridėtas.

Surenkame ir tikriname:

Buildroot – 2 dalis. Jūsų lentos konfigūracijos kūrimas; naudojant išorinį medį, rootfs-overlay, post-build scenarijus

Tinkinimo scenarijų vykdymas skirtinguose sistemos surinkimo etapuose

Dažnai reikia atlikti tam tikrą darbą tikslinės failų sistemos viduje, kol ji bus supakuota į vaizdus.

Tai galima padaryti sistemos konfigūracijos skyriuje:

Buildroot – 2 dalis. Jūsų lentos konfigūracijos kūrimas; naudojant išorinį medį, rootfs-overlay, post-build scenarijus

Pirmieji du scenarijai vykdomi sukūrus tikslinę failų sistemą, bet prieš ją supakavus į vaizdus. Skirtumas tas, kad fakeroot scenarijus vykdomas fakeroot kontekste, kuris imituoja darbą kaip root vartotojas.

Paskutinis scenarijus vykdomas sukūrus sistemos vaizdus. Jame galite atlikti papildomus veiksmus, pavyzdžiui, nukopijuoti reikiamus failus į NFS serverį arba sukurti įrenginio programinės įrangos vaizdą.

Pavyzdžiui, sukursiu scenarijų, kuris įrašys versiją ir kūrimo datą į /etc/.
Pirmiausia savo išoriniame medyje nurodysiu kelią į šį failą:

Buildroot – 2 dalis. Jūsų lentos konfigūracijos kūrimas; naudojant išorinį medį, rootfs-overlay, post-build scenarijus

O dabar pats scenarijus:

[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

Surinkę šį failą galite matyti sistemoje.

Praktiškai scenarijus gali tapti didelis. Todėl realiame projekte pasirinkau pažangesnį maršrutą:

  1. Sukūriau katalogą (my_tree/board_my_x86_board/inside_fakeroot_scripts), kuriame yra vykdomi scenarijai su serijos numeriais. Pavyzdžiui, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Aš parašiau scenarijų (my_tree/board_my_x86_board/run_inside_fakeroot.sh), kuris eina per šį katalogą ir nuosekliai vykdo jame esančius scenarijus
  3. Šis scenarijus buvo nurodytas lentos nustatymuose Sistemos konfigūracija -> Pasirinktiniai scenarijai, skirti veikti fakeroot aplinkoje ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Šaltinis: www.habr.com

Добавить комментарий