Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Esittely

Tässä artikkelisarjassa haluan tarkastella buildroot-jakelun koontijärjestelmää ja jakaa kokemukseni sen mukauttamisesta. Siellä on käytännön kokemusta pienen käyttöjärjestelmän luomisesta graafisella käyttöliittymällä ja minimaalisella toiminnallisuudella.

Ensinnäkin, sinun ei pidä sekoittaa rakennusjärjestelmää ja jakelua. Buildroot voi rakentaa järjestelmän sille tarjotuista paketeista. Buildroot on rakennettu make-tiedostoille ja siksi sillä on valtavat mukautusmahdollisuudet. Korvaa paketti toisella versiolla, lisää oma paketti, muuta paketin rakentamissääntöjä, mukauta tiedostojärjestelmää kaikkien pakettien asennuksen jälkeen? buildroot voi tehdä kaiken tämän.

Venäjällä käytetään buildrootia, mutta mielestäni aloittelijoille on vähän venäjänkielistä tietoa.

Työn tavoitteena on koota jakelupaketti, jossa on live-lataus, icewm-käyttöliittymä ja selain. Kohdealusta on virtualbox.

Miksi rakentaa oma jakelu? Usein tarvitaan rajoitettuja toimintoja rajoitetuilla resursseilla. Vielä useammin automaatiossa sinun on luotava laiteohjelmisto. Yleiskäyttöisen jakelun mukauttaminen poistamalla tarpeettomat paketit ja muuttamalla se laiteohjelmistoksi on työvoimavaltaisempaa kuin uuden jakelun rakentaminen. Gentoon käytössä on myös rajoituksensa.

Buildroot-järjestelmä on erittäin tehokas, mutta se ei tee sinulle mitään. Se voi vain mahdollistaa ja automatisoida kokoonpanoprosessin.

Vaihtoehtoisia rakennusjärjestelmiä (yocto, open build ja muut) ei oteta huomioon eikä verrata.

Mistä sen saa ja miten aloittaa

Hankkeen nettisivut - buildroot.org. Täältä voit ladata nykyisen version ja lukea käyttöohjeen. Siellä voit ottaa yhteyttä yhteisöön, siellä on bug tracker, postituslistat ja irc-kanava.

Buildroot käyttää defconfigs-tiedostoja rakennuksen kohdelevylle. Defconfig on asetustiedosto, joka tallentaa vain asetukset, joilla ei ole oletusarvoja. Hän päättää, mitä kerätään ja miten. Tässä tapauksessa voit määrittää erikseen busybox-, linux-ytimen, uglibc-, u-boot- ja barebox-käynnistyslatainten asetukset, mutta ne kaikki sidotaan kohdelevyyn.
Kun ladattu arkisto on purettu tai kloonattu gitistä, saamme käyttövalmiin buildrootin. Voit lukea lisää hakemistorakenteesta käsikirjasta, minä kerron sinulle tärkeimmistä:

hallitus — hakemisto jokaiselle levylle ominaiset tiedostot. Nämä voivat olla komentosarjoja järjestelmäkuvien muodostamiseen (iso, sdcart, cpio ja muut), peittohakemisto, ytimen asetukset jne.
configs - levyn todellinen defconfig. Defconfig on epätäydellinen levykokoonpano. Se tallentaa vain parametrit, jotka poikkeavat oletusasetuksista
dl — hakemisto, jossa on ladatut lähdekoodit/tiedostot kokoonpanoa varten
tuotos/tavoite — tuloksena olevan käyttöjärjestelmän koottu tiedostojärjestelmä. Myöhemmin siitä luodaan kuvia latausta/asennusta varten
lähtö/isäntä - isäntäapuohjelmat kokoonpanoa varten
tuotos / rakentaa - kootut paketit

Kokoonpano määritetään KConfigin kautta. Samaa järjestelmää käytetään Linux-ytimen rakentamiseen. Luettelo yleisimmin käytetyistä komennoista (suorita buildroot-hakemistossa):

  • make menuconfig - kutsu koontikokoonpano. Voit myös käyttää graafista käyttöliittymää (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - kutsu ytimen asetukset.
  • tee puhdas - puhdista rakennustulokset (kaikki tulosteeseen tallennettu)
  • tee - rakenna järjestelmä. Tämä ei kokoa uudelleen jo koottuja prosesseja.
  • make defconfig_name - vaihda määritykset tiettyyn defconfig-tilaan
  • make list-defconfigs - näyttää luettelon defconfig-tiedostoista
  • tee lähde - lataa vain asennustiedostot rakentamatta.
  • tee apua - luettele mahdolliset komennot

Tärkeitä huomautuksia ja hyödyllisiä vinkkejä

Buildroot ei rakenna uudelleen jo rakennettuja paketteja! Siksi voi syntyä tilanne, jossa vaaditaan täydellinen uudelleenkokoonpano.

Voit rakentaa erillisen paketin komennolla tee paketin nimi-rebuild. Voit esimerkiksi rakentaa Linux-ytimen uudelleen:

make linux-rebuild

Buildroot tallentaa minkä tahansa paketin tilan luomalla .stamp-tiedostoja output/build/$packagename-hakemistoon:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Siksi voit rakentaa root-fs:t ja kuvat uudelleen rakentamatta uudelleen paketteja:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Hyödyllisiä muuttujia

buildrootissa on joukko muuttujia konfiguroinnin helpottamiseksi

  • $TOPDIR - buildroot-hakemisto
  • $BASEDIR - OUTPUT-hakemisto
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR – isäntä fs, staging fs, kohde fs koontihakemistot.
  • $BUILD_DIR - hakemisto, jossa on purettuja ja rakennettuja paketteja

Visualisointi

buildrootissa on visualisointiominaisuus. Voit rakentaa riippuvuuskaavion, rakennusaikakaavion ja kaavion pakettien koosta lopullisessa järjestelmässä. Tulokset ovat pdf-tiedostoina (voit valita svn, png) output/graph-hakemistossa.

Esimerkkejä visualisointikomennoista:

  • make graph-depends rakentaa riippuvuuspuuta
  • make <pkg>-graph-depends rakentaa riippuvuuspuu tietylle paketille
  • BR2_GRAPH_OUT=png make graph-build juonen rakennusaika PNG-ulostulolla
  • make graph-size kuvaa paketin kokoa

Hyödyllisiä skriptejä

Buildroot-hakemistossa on alihakemisto utils hyödyllisillä skripteillä. Esimerkiksi on olemassa komentosarja, joka tarkistaa pakettien kuvausten oikeellisuuden. Tästä voi olla hyötyä, kun lisäät omia paketteja (teen tämän myöhemmin). Tiedosto utils/readme.txt sisältää kuvauksen näistä komentosarjoista.

Rakennetaan osakejakauma

On tärkeää muistaa, että kaikki toiminnot suoritetaan tavallisen käyttäjän, ei pääkäyttäjän, puolesta.
Kaikki komennot suoritetaan buildrootissa. Buildroot-paketti sisältää jo joukon kokoonpanoja monille yleisille levyille ja virtualisoinnille.

Katsotaanpa luetteloa kokoonpanoista:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Vaihda asetukseen qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Ja aloitamme kokoonpanon

make

Rakennus valmistuu onnistuneesti, katso tulokset:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Buildroot on koonnut kuvia, joita voit ajaa Qemussa ja varmistaa niiden toimivuuden.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Tuloksena on järjestelmä, joka toimii qemussa:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Oman levykokoonpanon luominen

Taulutiedostojen lisääminen

Katsotaanpa luetteloa kokoonpanoista:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Luettelossa näkyy pc_x86_64_efi_defconfig. Luomme oman taulun kopioimalla sen kokoonpanosta:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Luodaan heti levyhakemisto skriptien, rootfs-overlay- ja muiden tarvittavien tiedostojen tallentamiseen:

mkdir board/my_x86_board

Vaihda tähän defconfigiin:

make my_x86_board_defconfig

Siten nyt koontikonfiguraatio (tallennettu .config-tiedostoon buildroot-hakemiston juureen) vastaa x86-64 legacy(bios) -käynnistyskohdekonetta.

Kopioidaan linux-ytimen kokoonpano (hyödyllinen myöhemmin):

cp board/pc/linux.config board/my_x86_board/

Rakennusparametrien asettaminen KConfigin avulla

Aloitetaan asennus:

make menuconfig 

KConfig-ikkuna avautuu. On mahdollista määrittää graafisella käyttöliittymällä (make nconfig, tee xconfig, tee gconfig):

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Siirrymme ensimmäiseen kohtaan Kohdeasetukset. Täällä voit valita kohdearkkitehtuurin, jolle rakennus suoritetaan.

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Koontivaihtoehdot – täällä on useita koontiasetuksia. Voit määrittää hakemistoja lähdekoodeilla, rakennussäikeiden lukumäärän, lähdekoodien lataamisen peilejä ja muita asetuksia. Jätetään asetukset oletusarvoiksi.

Työkaluketju – itse rakennustyökalut konfiguroidaan täällä. Lue lisää hänestä.

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Työkaluketjun tyyppi – käytetyn työkaluketjun tyyppi. Tämä voi olla buildrootiin sisäänrakennettu työkaluketju tai ulkoinen työkaluketju (voit määrittää hakemiston, jossa on jo rakennettu, tai URL-osoitteen ladattavaksi). Eri arkkitehtuureille on lisävaihtoehtoja. Esimerkiksi käsivarrelle voit yksinkertaisesti valita ulkoisen työkaluketjun Linaro-version.

C-kirjasto – C-kirjaston valinta, tästä riippuu koko järjestelmän toiminta. Tyypillisesti käytetään glibc:tä, joka tukee kaikkia mahdollisia toimintoja. Mutta se voi olla liian suuri sulautetulle järjestelmälle, joten usein valitaan uglibc tai musl. Valitsemme glibc:n (tätä tarvitaan myöhemmin systemd:n ​​käyttämiseksi).

Ytimen otsikot ja mukautetut ytimen otsikot -sarjan on vastattava kootussa järjestelmässä olevan ytimen versiota. Ytimen otsikoille voit myös määrittää polun tarball- tai git-tietovarastoon.

GCC-KÄÄNTÄJÄN VERSIOIT – valitse rakentamiseen käytettävä kääntäjäversio
Ota C++-tuki käyttöön – valitse rakentaaksesi järjestelmän C++-kirjastojen tuella. Tästä on meille hyötyä tulevaisuudessa.

Gcc-lisäasetukset – voit määrittää lisää kääntäjäasetuksia. Emme tarvitse sitä toistaiseksi.

Järjestelmän konfiguroinnin avulla voit asettaa luodun järjestelmän tulevat parametrit:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Suurin osa kohdista selviää otsikosta. Kiinnitämme huomiota seuraaviin kohtiin:
Polku käyttäjätaulukoihin - luotavien käyttäjien taulukko (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Esimerkkitiedosto. Käyttäjäkäyttäjä luodaan salasanalla admin, automaattisesti gid/uid, /bin/sh shell, oletusryhmän käyttäjä, ryhmän jäsenen root, kommentti Foo-käyttäjä

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Juuritiedostojärjestelmän peittohakemistot - hakemisto, joka on päällekkäin kootun target-fs:n päällä. Lisää uusia tiedostoja ja korvaa olemassa olevat.

Mukautetut komentosarjat, jotka suoritetaan ennen tiedostojärjestelmän kuvien luomista - Skriptit suoritetaan välittömästi ennen tiedostojärjestelmän taittamista kuviksi. Jätetään käsikirjoitus toistaiseksi tyhjäksi.

Siirrytään Kernel-osioon

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Ytimen asetukset määritetään täällä. Itse ydin konfiguroidaan komennolla make linux-menuconfig.
Voit asettaa ytimen version eri tavoilla: valita tarjotuista, syöttää versio manuaalisesti, määrittää arkisto tai valmis tarball.

Ytimen asetukset — polku ytimen kokoonpanoon. Voit valita oletusasetuksen valitulle arkkitehtuurille tai defocnfig Linuxista. Linux-lähde sisältää joukon defconfiguja eri kohdejärjestelmille. Löydät tarvitsemasi katsomalla suoraan lähteitä täältä. Esimerkiksi beagle-luumustalle levylle voit valitse kokoonpano.

Kohdepaketit-osiossa voit valita, mitkä paketit asennetaan rakennettavaan järjestelmään. Jätetään se toistaiseksi ennalleen. Lisäämme pakettimme tähän listaan ​​myöhemmin.
Tiedostojärjestelmän kuvat - luettelo kerättävistä tiedostojärjestelmäkuvista. Lisää iso-kuva

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Käynnistyslataimet - valikoima käynnistyslataimia kerättäväksi. Valitaan isolinix

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Systemd

Systemdistä on tulossa yksi Linuxin pilareista ytimen ja glibc:n ohella. Siksi siirsin sen asetuksen erilliseen kohtaan.

Konfiguroidaan valitsemalla make menuconfig, sitten Kohdepaketit → Järjestelmätyökalut → systemd. Tässä voit määrittää mitkä järjestelmäpalvelut asennetaan ja käynnistetään järjestelmän käynnistyessä.

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Tallennetaan järjestelmäkokoonpanoa

Tallennamme tämän konfiguraation KConfigin kautta.

Tallenna sitten defconfig:

make savedefconfig

Linux-ytimen asetukset

Linux-ytimen kokoonpano kutsutaan seuraavalla komennolla:

make linux-menuconfig

Lisätään Virtualbox-näytönohjaimen tuki

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Lisätään Virtualbox Guest -integraatiotuki

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Tallenna ja poistu. TÄRKEÄÄ: kokoonpano tallennetaan kansioon output/build/linux-$version/config, mutta ei board/my_x86_board/linux.config

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Siksi sinun on kopioitava konfiguraatio manuaalisesti tallennuspaikkaan:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Tämän jälkeen suoritamme koko järjestelmän täydellisen uudelleenkokoonpanon. buildroot ei rakenna uudelleen sitä, mikä on jo rakennettu, sinun on määritettävä uudelleen rakennettavat paketit manuaalisesti. Jotta ei tuhlata aikaa ja hermoja, on helpompi rakentaa pieni järjestelmä kokonaan uudelleen):

make clean;make

Kun koonti on valmis, käynnistä VirtualBox (testattu versioissa 5.2 ja 6.0) käynnistyen CD-levyltä. Järjestelmäparametrit:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Käynnissä kootusta isosta:

Buildroot - osa 1. Yleistä tietoa, minimaalisen järjestelmän kokoaminen, konfigurointi valikon kautta

Luettelo käytetyistä materiaaleista

  1. Buildroot käsikirja

Lähde: will.com

Lisää kommentti