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 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:
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õltuvuspuumake <pkg>-graph-depends
luua konkreetse paketi sõltuvuspuuBR2_GRAPH_OUT=png make graph-build
joonise ehitamise ajagraafik koos PNG väljundigamake 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:
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 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:
Looge oma tahvli konfiguratsioon
Tahvlifailide lisamine
Vaatame konfiguratsioonide loendit:
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):
Siseneme esimesse jaotisesse Target Options. Siin saate valida sihtarhitektuuri, mille jaoks ehitamine toimub.
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.
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:
Pealkirjast selgub enamus punkte. Pöörame tähelepanu järgmistele punktidele:
Kasutajate tabelite tee – tabel loodavate kasutajatega (
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
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
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
Alglaadurid - kogutud alglaadurite valik. Valige isolinix
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.
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
Lisame Virtualboxi külaliste integreerimise toe
Salvestame ja väljume. TÄHTIS: konfiguratsioon salvestatakse kausta output/build/linux-$version/config, kuid mitte kausta board/my_x86_board/linux.config
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:
Töötades kokkupandud isost:
Kasutatud materjalide loetelu
- Buildrooti käsiraamat
Allikas: www.habr.com