Buildroot - osa 2. Korttikokoonpanon luominen; käyttämällä ulkoista puuta, rootfs-overlaya, rakennuksen jälkeisiä komentosarjoja

Tässä osiossa tarkastelen joitain tarvitsemiani mukautusvaihtoehtoja. Tämä ei ole täydellinen luettelo siitä, mitä buildroot tarjoaa, mutta ne ovat varsin toimivia eivätkä vaadi puuttumista itse buildrootin tiedostoihin.

Käyttämällä ULKOISTA mekanismia mukauttamiseen

Aiemmassa artikkelissa Tarkastelimme yksinkertaista esimerkkiä omien asetusten lisäämisestä lisäämällä levyn defconfig ja tarvittavat tiedostot suoraan Buildroot-hakemistoon.

Mutta tämä menetelmä ei ole kovin kätevä, varsinkin kun päivität buildrootin. On olemassa mekanismi tämän ongelman ratkaisemiseksi ulkoinen puu. Sen olemus on, että voit tallentaa levyt, konfiguraatiot, paketit ja muut hakemistot erilliseen hakemistoon (esim. käytän korjaustiedostojen hakemistoa pakettien korjaamiseen, tarkemmat tiedot erillisessä osiossa) ja buildroot itse lisää ne hakemistoon. sen hakemisto.

Huomautus: voit peittää useita ulkoisia puita kerralla, esimerkki on buildroot-käsikirjassa

Luodaan hakemisto my_tree, joka sijaitsee buildroot-hakemiston vieressä ja siirretään kokoonpanomme sinne. Tulosteen tulee olla seuraava tiedostorakenne:

[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

Kuten näet, yleensä rakenne toistaa buildrootin rakenteen.

Hakemisto hallitus sisältää tiedostoja jokaiselle levylle meidän tapauksessamme:

  • bef_cr_fs_img.sh on skripti, joka suoritetaan kohdetiedostojärjestelmän rakentamisen jälkeen, mutta ennen sen pakkaamista kuviin. Käytämme sitä jatkossa
  • linux.config - ytimen asetukset
  • rootfs_overlay - hakemisto kohdetiedostojärjestelmän päälle
  • users.txt - tiedosto, joka kuvaa luotavat käyttäjät

Hakemisto configs sisältää levyjemme defconfigin. Meillä on vain yksi.

Paketti - luettelo pakettiemme kanssa. Aluksi buildroot sisältää kuvauksia ja sääntöjä rajoitetun määrän pakettien rakentamiseen. Myöhemmin lisäämme tähän icewm-ikkunanhallinnan ja Slim-graafisen kirjautumishallinnan.
Merkit — mahdollistaa laastarien säilyttämisen kätevästi eri pakkauksille. Tarkemmat tiedot alla erillisessä osiossa.
Nyt meidän on lisättävä ulkoisen puumme kuvaustiedostot. Tästä on vastuussa 3 tiedostoa: external.desc, Config.in, external.mk.

ulkoinen.desc sisältää varsinaisen kuvauksen:

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

Ensimmäinen rivi on otsikko. Tulevaisuudessa buildroot luo muuttujan $(BR2_EXTERNAL_MY_TREE_PATH), jota tulee käyttää kokoonpanoa määritettäessä. Esimerkiksi polku käyttäjätiedostoon voidaan asettaa seuraavasti:

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

Toinen rivi on lyhyt, ihmisen luettava kuvaus.

Config.in, ulkoinen.mk — lisättyjä paketteja kuvaavat tiedostot. Jos et lisää omia paketteja, nämä tiedostot voidaan jättää tyhjiksi. Toistaiseksi teemme niin.
Nyt meillä on ulkoinen puumme valmiina, joka sisältää levymme defconfigin ja sen tarvitsemat tiedostot. Siirrytään buildroot-hakemistoon ja määritetään ulkoisen puun käyttö:

[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

Ensimmäisessä komennossa käytämme argumenttia BR2_EXTERNAL=../my_tree/, joka ilmaisee ulkoisen puun käytön Voit määrittää useita ulkoisia puita käytettäväksi samanaikaisesti. Tässä tapauksessa sinun tarvitsee tehdä tämä vain kerran, jonka jälkeen luodaan tiedosto output/.br-external.mk, joka tallentaa tietoja käytetystä ulkoisesta puusta:

[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ärkeä! Tämän tiedoston polut ovat ehdottomia!

Ulkoiset asetukset -kohta on ilmestynyt valikkoon:

Buildroot - osa 2. Korttikokoonpanon luominen; käyttämällä ulkoista puuta, rootfs-overlaya, rakennuksen jälkeisiä komentosarjoja

Tämä alivalikko sisältää paketit ulkoisesta puustamme. Tämä osio on tällä hetkellä tyhjä.

Nyt meille on tärkeämpää kirjoittaa uudelleen tarvittavat polut ulkoisen puun käyttöön.

Huomaa, että kohdassa Koontiasetukset → Sijainti buildroot-asetusten tallentamiseen on absoluuttinen polku tallennettuun defconfig-tiedostoon. Se muodostetaan, kun määritellään extgernal_tree.

Korjaamme myös polut Järjestelmän määritys -osiossa. Taulukko, jossa on luotuja käyttäjiä:

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

Muuta Ydin-osiossa polku ytimen kokoonpanoon:

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

Nyt ulkoisen puun tiedostoja käytetään kokoonpanon aikana. Kun siirrymme toiseen hakemistoon tai päivität buildrootin, meillä on mahdollisimman vähän ongelmia.

Fs-juurikerroksen lisääminen:

Tämän mekanismin avulla voit helposti lisätä/korvaaa tiedostoja kohdetiedostojärjestelmässä.
Jos tiedosto on root fs -peittokuvassa, mutta ei kohdessa, se lisätään
Jos tiedosto on root fs -peittokuvassa ja kohteessa, se korvataan.
Ensin asetetaan polku root fs overlay dir -hakemistoon. Tämä tehdään osiossa Järjestelmän asetukset → Juuritiedostojärjestelmän peittohakemistot:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Luodaan nyt kaksi tiedostoa.

[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

Ensimmäinen tiedosto (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) korvaa /etc/hosts-tiedoston valmiissa järjestelmässä. Toinen tiedosto (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) lisätään.

Keräämme ja tarkistamme:

Buildroot - osa 2. Korttikokoonpanon luominen; käyttämällä ulkoista puuta, rootfs-overlaya, rakennuksen jälkeisiä komentosarjoja

Räätälöintikomentosarjojen suorittaminen järjestelmän kokoonpanon eri vaiheissa

Usein sinun on suoritettava jonkin verran työtä kohdetiedostojärjestelmän sisällä ennen kuin se pakataan kuviin.

Tämä voidaan tehdä Järjestelmän määritys -osiossa:

Buildroot - osa 2. Korttikokoonpanon luominen; käyttämällä ulkoista puuta, rootfs-overlaya, rakennuksen jälkeisiä komentosarjoja

Kaksi ensimmäistä komentosarjaa suoritetaan sen jälkeen, kun kohdetiedostojärjestelmä on rakennettu, mutta ennen kuin se pakataan kuviin. Erona on, että fakeroot-skripti suoritetaan fakerootin yhteydessä, joka simuloi työtä pääkäyttäjänä.

Viimeinen komentosarja suoritetaan, kun järjestelmäkuvat on luotu. Voit suorittaa siinä lisätoimintoja, esimerkiksi kopioida tarvittavat tiedostot NFS-palvelimelle tai luoda kuvan laitteesi laiteohjelmistosta.

Esimerkkinä luon skriptin, joka kirjoittaa version ja rakennuspäivämäärän kansioon /etc/.
Ensin osoitan polun tähän tiedostoon ulkoisessa puussani:

Buildroot - osa 2. Korttikokoonpanon luominen; käyttämällä ulkoista puuta, rootfs-overlaya, rakennuksen jälkeisiä komentosarjoja

Ja nyt itse käsikirjoitus:

[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

Kokoonpanon jälkeen näet tämän tiedoston järjestelmässä.

Käytännössä käsikirjoituksesta voi tulla suuri. Siksi todellisessa projektissa valitsin edistyneemmän reitin:

  1. Loin hakemiston (my_tree/board_my_x86_board/inside_fakeroot_scripts), jossa on suoritettavat skriptit sarjanumeroineen. Esimerkiksi 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kirjoitin komentosarjan (my_tree/board_my_x86_board/run_inside_fakeroot.sh), joka kulkee tämän hakemiston läpi ja suorittaa sen sisältämät skriptit peräkkäin
  3. Määritti tämän skriptin levyn asetuksissa kohdassa Järjestelmän asetukset -> Mukautetut komentosarjat, jotka suoritetaan fakeroot-ympäristössä ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Lähde: will.com

Lisää kommentti