Buildroot – osa 2. Tahvli konfiguratsiooni loomine; kasutades välist puud, rootfs-overlay, ehitusjärgseid skripte

Selles jaotises vaatlen mõningaid kohandamisvalikuid, mida vajasin. See ei ole täielik nimekiri sellest, mida buildroot pakub, kuid need on üsna funktsionaalsed ega vaja sekkumist buildrooti enda failidesse.

Kohandamiseks kasutatakse VÄLIST mehhanismi

Ühes varasemas artiklis Vaatasime lihtsat näidet oma konfiguratsiooni lisamisest, lisades plaadi defconfigi ja vajalikud failid otse Buildrooti kataloogi.

Kuid see meetod pole eriti mugav, eriti buildrooti värskendamisel. Selle probleemi lahendamiseks on olemas mehhanism väline puu. Selle olemus seisneb selles, et saate salvestada tahvli, seadistusi, pakette ja muid katalooge eraldi kataloogis (näiteks kasutan pakettide paikade paigaldamiseks paikade kataloogi, täpsemalt eraldi jaotises) ja buildroot ise lisab need kataloogidesse. selle kataloog.

Märkus: saate korraga katta mitu välist puud, selle näide on buildrooti juhendis

Loome kataloogi my_tree, mis asub buildroot kataloogi kõrval ja edastame oma konfiguratsiooni sinna. Väljund peaks olema järgmise failistruktuuriga:

[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

Nagu näete, kordab struktuur üldiselt buildrooti struktuuri.

Kataloog juhatus sisaldab meie puhul iga tahvli jaoks spetsiifilisi faile:

  • bef_cr_fs_img.sh on skript, mis käivitatakse pärast sihtfailisüsteemi loomist, kuid enne selle piltidele pakkimist. Kasutame seda ka edaspidi
  • linux.config – tuuma konfiguratsioon
  • rootfs_overlay – kataloog sihtfailisüsteemi peal olevasse ülekattesse
  • user.txt – fail, mis kirjeldab loodavaid kasutajaid

Kataloog configs sisaldab meie tahvlite defconfigi. Meil on ainult üks.

Pakend - kataloog meie pakettidega. Esialgu sisaldab buildroot kirjeldusi ja reegleid piiratud arvu pakettide koostamiseks. Hiljem lisame siia icewm aknahalduri ja Slim graafilise sisselogimishalduri.
Paikade — võimaldab mugavalt hoiustada oma plaastreid erinevatele pakenditele. Lisateavet leiate allpool eraldi jaotisest.
Nüüd peame lisama oma välise puu kirjeldusfailid. Selle eest vastutavad 3 faili: external.desc, Config.in, external.mk.

väline.desc sisaldab tegelikku kirjeldust:

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

Esimene rida on pealkiri. Tulevikus looge root root muutuja $(BR2_EXTERNAL_MY_TREE_PATH), mida tuleks kasutada koostu konfigureerimisel. Näiteks kasutajafaili tee saab määrata järgmiselt:

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

Teine rida on lühike, inimloetav kirjeldus.

Config.in, external.mk — failid lisatud pakettide kirjeldamiseks. Kui te oma pakette ei lisa, võib need failid tühjaks jätta. Praegu me seda teeme.
Nüüd on meil valmis meie väline puu, mis sisaldab meie tahvli defconfigi ja selleks vajalikke faile. Läheme buildroot kataloogi ja määrame välise puu kasutamiseks:

[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

Esimeses käsus kasutame argumenti BR2_EXTERNAL=../minu_puu/, mis näitab välise puu kasutamist. Saate määrata mitu välist puud korraga kasutamiseks Sel juhul peate seda tegema ainult üks kord, misjärel luuakse fail väljund/.br-external.mk, mis salvestab teavet kasutatud välise puu kohta:

[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

Tähtis! Selle faili teed on absoluutsed!

Menüüsse ilmus üksus Välised valikud:

Buildroot – osa 2. Tahvli konfiguratsiooni loomine; kasutades välist puud, rootfs-overlay, ehitusjärgseid skripte

See alammenüü sisaldab meie pakette meie välisest puust. See jaotis on praegu tühi.

Nüüd on meie jaoks olulisem kirjutada ümber vajalikud teed välise puu kasutamiseks.

Pange tähele, et jaotises Ehitussuvandid → Asukoht buildrooti konfiguratsiooni salvestamiseks on salvestatud defconfigi absoluutne tee. See moodustatakse extgernal_tree kasutamise määramise hetkel.

Samuti parandame teid jaotises Süsteemi konfiguratsioon. Loodud kasutajatega tabeli jaoks:

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

Muutke jaotises Kernel kerneli konfiguratsiooni teed:

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

Nüüd kasutatakse kokkupanekul meie välise puu faile. Teise kataloogi kolimisel või buildrooti värskendamisel on meil minimaalselt probleeme.

Juurfs-ülekatte lisamine:

See mehhanism võimaldab hõlpsasti faile sihtfailisüsteemis lisada/asendada.
Kui fail on juurfs-ülekattes, kuid mitte sihtmärgis, siis see lisatakse
Kui fail on juurfs-ülekattes ja sihtmärgis, siis see asendatakse.
Esmalt määrame juure fs overlay dir tee. Seda tehakse jaotises Süsteemi konfiguratsioon → Juurfailisüsteemi ülekattekataloogid:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nüüd loome kaks faili.

[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

Esimene fail (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) asendab valmis süsteemis faili /etc/hosts. Teine fail (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) lisatakse.

Kogume ja kontrollime:

Buildroot – osa 2. Tahvli konfiguratsiooni loomine; kasutades välist puud, rootfs-overlay, ehitusjärgseid skripte

Kohandusskriptide täitmine süsteemi kokkupaneku erinevates etappides

Sageli peate sihtfailisüsteemis enne selle piltidena pakkimist tegema tööd.

Seda saab teha jaotises Süsteemi konfiguratsioon:

Buildroot – osa 2. Tahvli konfiguratsiooni loomine; kasutades välist puud, rootfs-overlay, ehitusjärgseid skripte

Esimesed kaks skripti käivitatakse pärast sihtfailisüsteemi loomist, kuid enne selle piltidele pakkimist. Erinevus seisneb selles, et fakerooti skript käivitatakse fakerooti kontekstis, mis simuleerib tööd juurkasutajana.

Viimane skript käivitatakse pärast süsteemipiltide loomist. Saate selles teha täiendavaid toiminguid, näiteks kopeerida vajalikud failid NFS-serverisse või luua seadme püsivara kujutise.

Näiteks loon skripti, mis kirjutab versiooni ja ehituskuupäeva faili /etc/.
Kõigepealt näitan oma välises puus selle faili tee:

Buildroot – osa 2. Tahvli konfiguratsiooni loomine; kasutades välist puud, rootfs-overlay, ehitusjärgseid skripte

Ja nüüd skript ise:

[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

Pärast kokkupanekut näete seda faili süsteemis.

Praktikas võib skript muutuda suureks. Seetõttu valisin reaalses projektis täpsema marsruudi:

  1. Tegin kataloogi (my_tree/board_my_x86_board/inside_fakeroot_scripts), kus on seerianumbritega käivitatavad skriptid. Näiteks 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kirjutasin skripti (my_tree/board_my_x86_board/run_inside_fakeroot.sh), mis läbib selle kataloogi ja käivitab järjestikku selles sisalduvad skriptid
  3. Määras selle skripti tahvli sätetes jaotises Süsteemi konfiguratsioon -> Kohandatud skriptid, mis töötavad fakerooti keskkonnas ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Allikas: www.habr.com

Lisa kommentaar