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 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:
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 riippuvuuspuutamake <pkg>-graph-depends
rakentaa riippuvuuspuu tietylle paketilleBR2_GRAPH_OUT=png make graph-build
juonen rakennusaika PNG-ulostulollamake 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:
Vaihda asetukseen qemu_x86_64_defconfig
make qemu_x86_64_defconfig
Ja aloitamme kokoonpanon
make
Rakennus valmistuu onnistuneesti, katso tulokset:
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:
Oman levykokoonpanon luominen
Taulutiedostojen lisääminen
Katsotaanpa luetteloa kokoonpanoista:
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):
Siirrymme ensimmäiseen kohtaan Kohdeasetukset. Täällä voit valita kohdearkkitehtuurin, jolle rakennus suoritetaan.
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ä.
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:
Suurin osa kohdista selviää otsikosta. Kiinnitämme huomiota seuraaviin kohtiin:
Polku käyttäjätaulukoihin - luotavien käyttäjien taulukko (
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
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
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
Käynnistyslataimet - valikoima käynnistyslataimia kerättäväksi. Valitaan isolinix
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ä.
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
Lisätään Virtualbox Guest -integraatiotuki
Tallenna ja poistu. TÄRKEÄÄ: kokoonpano tallennetaan kansioon output/build/linux-$version/config, mutta ei board/my_x86_board/linux.config
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:
Käynnissä kootusta isosta:
Luettelo käytetyistä materiaaleista
- Buildroot käsikirja
Lähde: will.com