Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Sissejuhatus

Selles artiklite sarjas tahan üle vaadata buildrooti distributsiooni ehitussüsteemi ja jagada oma kogemusi selle kohandamisel. Olemas praktiline kogemus väikese graafilise liidese ja minimaalse funktsionaalsusega OS-i loomisel.

Esiteks ei tohiks te segamini ajada ehitussüsteemi ja levitamist. Buildroot saab luua süsteemi talle pakutavate pakettide hulgast. Buildroot on üles ehitatud make-failidele ja seetõttu on sellel tohutult kohandamisvõimalusi. Kas asendada pakett mõne teise versiooniga, lisada oma pakett, muuta paketi koostamise reegleid, kohandada failisüsteemi pärast kõigi pakettide installimist? Kõik see saab juurutada.

Venemaal on kasutusel buildroot, aga minu meelest on algajatele mõeldud venekeelset infot vähe.

Töö eesmärk on koostada reaalajas allalaadimise, icewmi liidese ja brauseriga distributsioonikomplekt. Sihtplatvorm on virtualbox.

Miks luua oma distributsioon? Sageli on piiratud ressurssidega vaja piiratud funktsioone. Automatiseerimises peate veelgi sagedamini looma püsivara. Üldotstarbelise jaotuse kohandamine üleliigsete pakettide puhastamise ja püsivaraks konverteerimisega on aeganõudvam kui uue distributsiooni kokkupanek. Gentoo kasutamisel on ka omad piirangud.

Buildroot süsteem on väga võimas, kuid see ei tee teie heaks midagi. See saab ainult monteerimisprotsessi lubada ja automatiseerida.

Alternatiivseid ehitussüsteeme (yocto, avatud ehitussüsteem ja teised) ei arvestata ega võrrelda.

Kust seda saada ja kuidas alustada

Projekti veebisait - buildroot.org. Siit saate alla laadida praeguse versiooni ja lugeda kasutusjuhendit. Seal saate kogukonnaga ühendust võtta, seal on veajälgija, meililistid ja irc-kanal.

Buildroot kasutab konstruktsiooni sihtplaadi defconfige. Defconfig on konfiguratsioonifail, mis salvestab ainult suvandid, millel pole vaikeväärtusi. Tema määrab, mida ja kuidas kogutakse. Sel juhul saate eraldi seadistada busyboxi, linux-kerneli, uglibc, u-boot ja barebox alglaadurite konfiguratsioonid, kuid need kõik seotakse sihtplaadiga.
Pärast allalaaditud arhiivi lahtipakkimist või gitist kloonimist saame kasutusvalmis buildrooti. Kataloogistruktuuri kohta saate täpsemalt lugeda juhendist, ma räägin teile kõige olulisematest:

juhatus — kataloog iga tahvli spetsiifiliste failidega. Need võivad olla skriptid süsteemipiltide (iso, sdcart, cpio ja teised) moodustamiseks, ülekattekataloog, kerneli konfiguratsioon jne.
configs - tahvli tegelik defconfig. Defconfig on plaadi mittetäielik konfiguratsioon. See salvestab ainult need parameetrid, mis erinevad vaikeseadetest
dl - kataloog koos allalaaditud lähtekoodide / failidega kokkupanekuks
väljund/siht - saadud OS-i kokkupandud failisüsteem. Seejärel luuakse sellest allalaadimiseks/installimiseks pildid
väljund/host - hosti utiliidid kokkupanekuks
väljund/ehitamine - kokkupandud pakendid

Montaaži seadistamine toimub KConfigi kaudu. Sama süsteemi kasutatakse linuxi tuuma ehitamiseks. Kõige sagedamini kasutatavate käskude loend (käivitage buildroot kataloogis):

  • make menuconfig – kutsuge üles ehitamiskonfiguratsioon. Võite kasutada ka graafilist liidest (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - kutsuge kerneli konfiguratsiooni.
  • tee puhtaks – puhasta ehitustulemused (kõik väljundisse salvestatud)
  • make - loo süsteem. See ei taasta juba ehitatud protsesse.
  • make defconfig_name – lülitage konfiguratsioon kindlale defconfig-ile
  • make list-defconfigs – kuvab defconfigide loendi
  • make source – laadige lihtsalt installifailid alla ilma ehitamata.
  • tee abi – loetlege võimalikud käsud

Olulised märkused ja kasulikud näpunäited

Buildroot ei ehita ümber pakette, mis on juba ehitatud! Seetõttu võib tekkida olukord, kus on vajalik täielik kokkupanek.

Eraldi paketi saate käsuga uuesti üles ehitada tee paketinimi-rebuild. Näiteks saate Linuxi tuuma uuesti üles ehitada:

make linux-rebuild

Buildroot salvestab mis tahes paketi oleku, luues .stamp-failid kataloogis output/build/$paketinimi:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Seetõttu saate root-fs-i ja pilte uuesti üles ehitada ilma pakette ümber ehitamata:

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

Kasulikud muutujad

buildroot sisaldab muutujate komplekti lihtsaks seadistamiseks

  • $TOPDIR – juurkataloog
  • $BASEDIR – OUTPUT kataloog
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR – hosti fs, lavastus fs, siht-fs ehituskataloogid.
  • $BUILD_DIR – lahtipakkitud ja ehitatud pakettidega kataloog

Visualiseerimine

Buildrootil on visualiseerimisfunktsioon. Lõppsüsteemis saate koostada sõltuvusskeemi, ehitusaja graafiku ja pakettide suuruste graafiku. Tulemused pdf-failidena (saate valida svn, png hulgast) väljundi/graafiku kataloogis.

Visualiseerimiskäskude näited:

  • make graph-depends ehitada sõltuvuspuu
  • make <pkg>-graph-depends luua konkreetse paketi sõltuvuspuu
  • BR2_GRAPH_OUT=png make graph-build joonise ehitamise ajagraafik koos PNG väljundiga
  • make graph-size joonistage paketi suurus

Kasulikud skriptid

Buildjuurkataloogis on alamkataloog utils kasulike skriptidega. Näiteks on olemas skript, mis kontrollib pakettide kirjelduste õigsust. See võib olla kasulik oma pakettide lisamisel (teen seda hiljem). Fail utils/readme.txt sisaldab nende skriptide kirjeldust.

Koostame aktsiajaotuse

Oluline on meeles pidada, et kõik toimingud tehakse tavakasutaja, mitte juurkasutaja nimel.
Kõik käsud täidetakse buildrootis. Buildrooti distributsioonil on juba hulk konfiguratsioone paljude levinud plaatide ja virtualiseerimise jaoks.

Vaatame konfiguratsioonide loendit:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Lülituge konfiguratsioonile qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Ja alusta ehitamist

make

Ehitamine on edukalt lõpule viidud, vaadake tulemusi:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Buildroot on kokku pannud pildid, mida saate Qemus käivitada ja vaadata, kas need töötavad.

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

Tulemuseks on qemu-s töötav süsteem:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Looge oma tahvli konfiguratsioon

Tahvlifailide lisamine

Vaatame konfiguratsioonide loendit:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Loendis näeme pc_x86_64_efi_defconfig. Loome oma tahvli, kopeerides selle konfiguratsioonist:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Loome kohe lauakataloogi, kuhu salvestada meie skriptid, rootfs-overlay ja muud vajalikud failid:

mkdir board/my_x86_board

Lülitu sellele defconfigile:

make my_x86_board_defconfig

Seega vastab nüüd build config (salvestatud .config kataloogi buildroot juurkataloogis) x86-64 legacy(bios) alglaadimise sihtmasinale.

Kopeerime linuxi kerneli konfiguratsiooni (kasulik hiljem):

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

Ehitusparameetrite määramine KConfigi kaudu

Alustame seadistamist:

make menuconfig 

Avaneb KConfigi aken. Võimalik on seadistada graafilise liidesega (make nconfig, make xconfig, make gconfig):

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Siseneme esimesse jaotisesse Target Options. Siin saate valida sihtarhitektuuri, mille jaoks ehitamine toimub.

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Ehitusvalikud – siin on erinevaid ehitusvalikuid. Saate määrata lähtekoodidega kataloogid, ehituslõimede arvu, lähtekoodide allalaadimise peeglid ja muud sätted. Jätame vaikeseaded.

Tööriistaahel – siin konfigureeritakse ehitustööriistad ise. Temast lähemalt.

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Tööriistaketi tüüp – kasutatava tööriistaketi tüüp. Selle saab sisse ehitada buildrooti või välisesse tööriistaahelasse (allalaadimiseks saate määrata juba ehitatud kataloogi või URL-i). Erinevate arhitektuuride jaoks on lisavõimalusi. Näiteks käe jaoks saate lihtsalt valida välise tööriistaahela Linaro versiooni.

C raamatukogu – C teegi valik, millest sõltub kogu süsteemi töö. Tavaliselt kasutatakse glibc-d, mis toetab kõiki võimalikke funktsioone. Kuid see võib olla manustatud süsteemi jaoks liiga suur, seetõttu valitakse sageli uglibc või musl. Valime glibc (seda on vaja hiljem systemd kasutamiseks).

Kerneli päised ja kohandatud tuumapäiste seeriad – peavad vastama ehitatavas süsteemis oleva tuuma versioonile. Kerneli päiste puhul saate määrata ka tarballi või giti hoidla tee.

GCC KOMPILERI VERSIONID – vali ehitamiseks kasutatav kompilaatori versioon
Luba C++ tugi – valige, et luua süsteemis C++ teekide toega. See on meile tulevikus kasulik.

Täiendavad gcc-suvandid – saate määrata kompilaatori täiendavaid valikuid. Meil pole seda praegu vaja.

Süsteemi konfiguratsioon võimaldab määrata loodud süsteemi tulevasi parameetreid:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Pealkirjast selgub enamus punkte. Pöörame tähelepanu järgmistele punktidele:
Kasutajate tabelite tee – tabel loodavate kasutajatega (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Näidisfail. Kasutaja kasutaja luuakse parooliga admin, automaatselt gid/uid, /bin/sh shell, grupi vaikekasutaja, grupi liikme juur, kommentaar Foo kasutaja

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

Juurfailisüsteemi ülekattekataloogid – kokkupandud target-fs-i peale asetatud kataloog. Lisab uusi faile ja asendab olemasolevaid.

Kohandatud skriptid, mida käivitada enne failisüsteemi kujutiste loomist – skriptid käivitatakse vahetult enne failisüsteemi piltideks voltimist. Jätame skripti esialgu tühjaks.

Läheme Kerneli jaotisesse

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Siin määratakse tuuma seaded. Kernel ise on seadistatud käsuga make linux-menuconfig.
Kerneli versiooni saab määrata erineval viisil: valida soovitatud versioonide hulgast, sisestada versioon käsitsi, määrata hoidla või valmis tarball.

Kerneli konfiguratsioon – tee kerneli konfiguratsioonini. Saate valida Linuxis valitud arhitektuuri või defocnfigi vaikekonfiguratsiooni. Linuxi allikatel on erinevate sihtsüsteemide jaoks defkonfiguratsioonid. Leiate selle, mida vajate vaadates otse allikat siit. Näiteks beagle luust musta tahvli jaoks saate vali konfiguratsioon.

Jaotises Sihtpaketid saate valida, millised paketid ehitatavasse süsteemi installitakse. Jätame selle praegu muutmata. Lisame oma pakid sellesse nimekirja hiljem.
Failisüsteemi kujutised – kogutavate failisüsteemi kujutiste loend. Lisa iso pilt

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Alglaadurid - kogutud alglaadurite valik. Valige isolinix

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Systemd konfigureerimine

Systemdist on koos kerneli ja glibc-ga saamas üks Linuxi tugisambaid. Seetõttu teisaldasin selle seadistuse eraldi üksusesse.

Seadistatakse menüükäsuga make menuconfig, seejärel sihtpaketid → Süsteemitööriistad → systemd. Siin saate määrata, millised süsteemiteenused installitakse ja käivitatakse süsteemi käivitumisel.

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Süsteemi konfiguratsiooni salvestamine

Salvestame selle konfiguratsiooni KConfigi kaudu.

Seejärel salvestage meie defconfig:

make savedefconfig

Linuxi tuuma konfiguratsioon

Linuxi kerneli konfiguratsioon käivitatakse järgmise käsuga:

make linux-menuconfig

Lisame Virtualboxi videokaardi toe

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Lisame Virtualboxi külaliste integreerimise toe

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Salvestame ja väljume. TÄHTIS: konfiguratsioon salvestatakse kausta output/build/linux-$version/config, kuid mitte kausta board/my_x86_board/linux.config

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Seetõttu peate konfiguratsiooni käsitsi salvestuskohta kopeerima:

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

Pärast seda teostame kogu süsteemi täieliku kokkupaneku. buildroot ei ehita uuesti üles seda, mis on juba ehitatud, ümberehitamiseks tuleb paketid käsitsi määrata. Et mitte aega ja närve raisata, on väikest süsteemi tervikuna lihtsam uuesti üles ehitada):

make clean;make

Koostamise lõppedes käivitame VirtualBoxi (testitud versioonidel 5.2 ja 6.0) koos alglaadimisega cd-kettalt Süsteemi parameetrid:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Töötades kokkupandud isost:

Buildroot – 1. osa – ülevaade, minimaalne süsteemi ehitamine, menüü seadistamine

Kasutatud materjalide loetelu

  1. Buildrooti käsiraamat

Allikas: www.habr.com

Lisa kommentaar