Sissejuhatus
Selles artiklisarjas soovin kĂ€sitleda buildrooti distributsiooni koostamise sĂŒsteemi ja jagada oma kohandamise kogemusi. Siin rÀÀgin vĂ€ikese operatsioonisĂŒsteemi loomise praktilisest kogemusest koos graafilise liidese ja minimaalsete funktsioonidega.
Esiteks, Ă€rge segage koostamisse sĂŒsteemi ja distributsiooni. Buildroot suudab koostada sĂŒsteemi pakettide kogumist, mida talle pakutakse. Buildroot on ĂŒles ehitatud make-failidele, mistĂ”ttu on sellel tohutud kohandamisvĂ”imalused. Kas soovite asendada paketi teise versiooniga, lisada oma paketi, muuta paketi koostamise reegleid, kohandada failisĂŒsteemi pĂ€rast kĂ”igi pakettide installimist? Buildroot oskab teha kĂ”ike seda.
Venemaal kasutatakse buildrooti, kuid minu arvates on venekeelset teavet algajatele vÀhe.
Töö eesmÀrk on koostada distributsioon live-laadimisega, icewm kasutajaliidesega ja brauseriga. Sihtplatvorm on virtualbox.
Miks koostada oma distributsioon? Sageli on vajalik piiratud funktsionaalsus piiratud ressursside korral. Veelgi sagedamini on automatiseerimisel vajalik luua pĂŒsivusi. Ăldotstarbelise distributsiooni kohandamine, eemaldades ĂŒleliigsed paketid ja muutes selle pĂŒsivuseks, on palju töömahukam kui uue distributsiooni koostamine. Gentoo kasutamisel on samuti oma piirangud.
Buildroot on vĂ€ga vĂ”imas sĂŒsteem, kuid ta ei tee teie eest midagi. Ta saab anda vaid vĂ”imalusi ja automatiseerida koostamisprotsessi.
Alternatiivseid koostamissĂŒsteeme (yocto, open build system ja teised) ei kĂ€sitleta ega vĂ”rrelda.
Kust leida ja kuidas alustada
Projekti sait â . Siit saate alla laadida uusima versiooni ja lugeda juhendit. Seal on ka vĂ”imalus pöörduda kogukonna poole, olemas on veaparandus sĂŒsteem, meililood ja IRC-kanal.
Buildroot kasutab sihtplatvormi koostamise jaoks defconfig'e. Defconfig on konfigureerimisfail, mis sisaldab ainult mittevaikimisi valikuid. Just see mÀÀrab, mida ja kuidas koostatakse. Samuti saab eraldi seadistada busyboxi, linux-kernelit, uglibc-d, u-boot ja bareboxi konfigureerimisfailid, kuid kÔik need on seotud sihtplatvormiga.
PÀrast allalaadimise arhiivi vÔi git'ist kloneerimist saame töötamiseks valmis buildrooti. Kataloogistruktuuri kohta saab lugeda juhendist, kuid rÀÀgin kÔige olulisematest:
board â kataloog failide jaoks, mis on spetsiifilised igale plaadile. Need vĂ”ivad olla sĂŒsteemi piltide loomise skriptid (iso, sdcart, cpio jne), overlay kataloog, tuumade konfiguratsioon ja muud.
configs â plaadi defconfig. Defconfig on plaadi mittetĂ€ielik konfiguratsioon. See sisaldab ainult parameetreid, mis erinevad vaikeseadetest.
dl â kataloog alla laaditud lĂ€htekoodide/failide jaoks, et koostada.
output/target â loodud failisĂŒsteem saadud operatsioonisĂŒsteemist. Edasi luuakse sellest pildid kĂ€ivitamiseks/installimiseks.
output/host â host-utiliidid koostamiseks.
output/build â loodud paketid.
Koostamise konfigureerimine toimub KConfig'i kaudu. Seda sama sĂŒsteemi kasutatakse Linuxi tuuma koostamiseks. KĂ”ige sagedamini kasutatavate kĂ€skude loetelu (tĂ€ita kataloogis buildroot):
- make menuconfig â kĂ€ivitada koostamise seadistus. Samuti saab kasutada graafilist liides (make nconfig, make xconfig, make gconfig).
- make linux-menuconfig â kĂ€ivitada tuuma konfiguratsioon.
- make clean â puhastada koostamise tulemused (kĂ”ik, mis asub output kataloogis).
- make â koostada sĂŒsteem. Sel juhul ei toimu juba loodud protsesside uuesti koostamist.
- make defconfig_name â vahetada konfiguratsioon kindlaks mÀÀratud defconfig'iks.
- make list-defconfigs â kuvada defconfig'ide loetelu.
- make source â lihtsalt alla laadida installifailid, ilma koostamata.
- make help â kuvada vĂ”imalike kĂ€skude loetelu.
Olulised mÀrkused ja kasulikud nÀpunÀited.
Buildroot ei koosta juba loodud pakette uuesti! SeetÔttu vÔib tekkida olukord, kus on vajalik tÀielik uuesti koostamine.
Ăksiku paketi uuesti koostamiseks saab kasutada kĂ€sku. make packagename-rebuild. NĂ€iteks saab uuesti koostada Linuxi tuuma:
make linux-rebuild.Buildroot sÀilitab iga paketi oleku, luues .stamp-failid kataloogis output/build/$packagename:

SeetÔttu saab uuesti koostada root-fs ja pildid ilma pakettide uuesti koostamiseta:
rm output/build/host-gcc-final-*/.stamp_host_installed; rm -rf output/target; find output/ -name ".stamp_target_installed" | xargs rm -rf; make.Kasulikud muutujaid.
Buildroot'is on kvaliteetsete konfigureerimise mugavuse jaoks muutujate komplekt.
- $TOPDIR â buildroot'i juurkataloog.
- $BASEDIR â OUTPUT kataloog.
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR â host fs, staging fs, target fs kataloogid.
- $BUILD_DIR â kataloog, kus on lahti pakitud ja koostatud paketid.
Visualiseerimine
Buildroot'is on visualiseerimise vĂ”imalus. VĂ”imalik on koostada sĂ”ltuvuste skeem, koostamisaja graafik, pakettide suuruse graafik lĂ”ppkĂ€itusesĂŒsteemis. Tulemused pdf-failidena (valikuline svn, png) kataloogis output/graph.
Visualiseerimise kÀskude nÀited:
make graph-depends.ehitame sÔltuvuste puumake -graph-dependsehitame konkreetse paketi sÔltuvuste puuBR2_GRAPH_OUT=png make graph-buildehitame ehitamise ajagraafiku vÀlja PNG-smake graph-sizeehitame pakettide suuruse graafiku
Kasulikud skriptid
Buildroot kataloogis on alamkataloog utils kasulike skriptidega. NÀiteks on seal skript, mis kontrollib pakettide kirjelduste Ôigsust. See vÔib olla kasulik, kui lisate oma paketid (ma teen seda hiljem). Failis utils/readme.txt on nende skriptide kirjeldus.
Kogume allika distributsiooni
Oluline on meeles pidada, et kÔik operatsioonid toimuvad tavakasutaja, mitte root'ina.
KÔik kÀsud tÀidetakse buildroot'i juures. Buildroot-seotud paketis on juba hulk konfigureeringuid paljude levinud plaadide ja virtualiseerimise jaoks.
Vaadake konfigureeringute nimekirja:

LĂ€heme qemu_x86_64_defconfig konfi peale
make qemu_x86_64_defconfigJa alustame kogumist
teeKogumine lÔppes edukalt, vaatame tulemusi:
![]()
Buildroot on kogunud pilte, mida saab Qemus kÀitada ja veenduda, et need töötavad.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -STulemus â Qemu-sĂŒsteemi kĂ€ivitamine:

Oma plaadi konfigureerimise loomine
Plaadi failide lisamine
Vaadake konfigureeringute nimekirja:

Nimekirjas nÀeme pc_x86_64_efi_defconfig. Loome oma plaadi, kopeerides selle konfigureeringust:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfigKoheselt loome plaadi katalooge oma skriptide, rootfs-overlay ja teiste vajalikud failide jaoks:
mkdir board/my_x86_boardLĂ€heme sellele defconfig'ile:
make my_x86_board_defconfigNii et nĂŒĂŒd on kogumise konfigureering (salvestatud .config failis buildroot'i juures) vastav sihtmasin x86-64 legacy (bios) laadimisega.
Kopeerime linux-kernel'i konfigureeringu (kasuks tuleb hiljem):
cp board/pc/linux.config board/my_x86_board/Buildimise parameetrite mÀÀramine KConfig kaudu
KÀivitame mÀÀramise:
make menuconfig Avatakse KConfig aken. On vÔimalus konfigureerida graafilise liidese kaudu (make nconfig, make xconfig, make gconfig):

Siseneme esimesse jaotisse Target Options. Siin saab valida sihtarhitektuuri, millele ehitus keskendub.

Build options â siin on erinevad ehitamise seadistused. Saame mÀÀrata allikakoodide kataloogid, ehitamise niitide arvu, allika allalaadimise peeglid ja muid seadeid. JĂ€tame seaded vaikimisi.
Toolchain â siin seadistatakse ehitusriistade komplekt. RÀÀkime sellest rohkem.

Toolchain type â kasutatava tööriistakomplekti tĂŒĂŒp. See vĂ”ib olla sisseehitatud buildroot vĂ”i vĂ€line tööriistakomplekt (saab nĂ€idata katalooge juba kogutud versioonide vĂ”i allalaadimise URL-iga). Erinevate arhitektuuride jaoks on tĂ€iendavad valikud. NĂ€iteks arm jaoks saab lihtsalt valida Linaro vĂ€list tööriistakomplekti versiooni.
C library â C teeki valik. See mĂ”jutab kogu sĂŒsteemi tööd. Tavaliselt kasutatakse glibc-d, mis toetab kogu vĂ”imalikku funktsionaalsust. Kuid see vĂ”ib osutuda liiga suureks sisseehitatud sĂŒsteemi jaoks, seega valitakse sageli uglibc vĂ”i musl. Me valime glibc (hiljem on see vajalik systemd kasutamiseks).
Kernel Headers ja Custom Kernel Headers series â peab vastama tuumaversioonile, mis on loodavas sĂŒsteemis. Kernel headers jaoks saab samuti nĂ€idata teed tarballile vĂ”i git-repositooriumile.
GCC COMPILER VERSIONS â valik kompilaatori versioonist, mida kasutatakse kokkupanekuks.
Enable C++ support â valime kokkupaneku jaoks C++ raamatukogude toetuse. See tuleb hiljem meile kasuks.
Additional gcc options â saab mÀÀrata tĂ€iendavaid kompilaatori valikuid. Meie jaoks ei ole see hetkel vajalik.
System configuration vĂ”imaldab mÀÀrata loodava sĂŒsteemi tulevasi parameetreid:

Enamik punkte on mÔistetavad pealkirjadest. Pöörame tÀhelepanu jÀrgmistele punktidele:
Path to the users tables â tabel loodavatest kasutajatest ().
NĂ€idisdokument. Loodud kasutaja on user koos parooliga admin, automaatselt gid/uid, /bin/sh shellega, vaikimisi grupiga user, grupi liikmeks root, kommentaariga Foo user.
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo userRoot filesystem overlay directories â kataloog, mis katab kokku pandud target-fsi. Lisab uusi faile ja asendab olemasolevaid.
Custom scripts to run before creating filesystem images â skriptid, mis tĂ€idetakse otse enne failisĂŒsteemi piltide loomist. Hoidke skript praegu tĂŒhjana.
Liigume osakonda Kernel

Siin on mÀÀratud tuuma seaded. Ise tuum konfigureeritakse lÀbi make linux-menuconfig.
Tuumaversiooni saab mÀÀrata mitut moodi: valida ettepanekutest, sisestada versioon kÀsitsi, nÀidata repositooriumi vÔi valmis tarballi.
Kernel configuration â tee tuuma konfigureerimise faili. Siit saab valida vaikimisi konfiguratsiooni valitud arhitektuurile vĂ”i defconfig Linuxist. Linuxi lĂ€htekoodis on olemas defconfig'i kogum erinevate sihtsĂŒsteemide jaoks. Otsitavat saab leida, . NĂ€iteks Beagle Bone Black plaadi jaoks saab .
Sihtpakettide jaotis vĂ”imaldab valida, millised paketid installitakse koostatavasse sĂŒsteemi. JĂ€tame selle praegu muutmata. Hiljem lisame oma paketid sellesse loendisse.
FailisĂŒsteemi pildid â nimekiri failisĂŒsteemi piltidest, mis koostatakse. Lisame iso-pildi.

KĂ€ivitaja â valik koostatavatest kĂ€ivitajatest. Valime isolinix.

Systemdi konfigureerimine
Systemd muutub ĂŒha olulisemaks osaks linuxist, olles samal tasemel kernel'i ja glibc-ga. SeetĂ”ttu tĂ”in selle seadistuse eraldi punkti.
Seadistamine toimub lĂ€bi make menuconfig, seejĂ€rel Sihtpaketid â SĂŒsteemitööriistad â systemd. Siin saab mÀÀrata, millised systemd teenused installitakse ja kĂ€ivitatakse sĂŒsteemi kĂ€ivitamisel.

SĂŒsteemi konfiguratsiooni salvestamine
Salvestame selle konfiguratsiooni lÀbi KConfig.
SeejÀrel salvestame oma defconfig:
make savedefconfigLinuxi tuuma konfigureerimine
Linuxi tuuma konfigureerimine kutsutakse esile jÀrgmise kÀsuga:
make linux-menuconfigLisame Virtualboxi graafikakaardi toe

Lisame Virtualboxi kĂŒlastaja integreerimise toe.

Salvestame ja vÀljumine. OLULINE: konfiguratsioon salvestatakse kausta output/build/linux-$version/config, aga mitte kausta board/my_x86_board/linux.config.

SeetÔttu tuleb konfiguratsioon kÀsitsi salvestada:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.configSeejĂ€rel teeme kogu sĂŒsteemi tĂ€ieliku uuesti koostamise. Kuna buildroot ei koosta juba koostatud, tuleb kĂ€sitsi mÀÀrata pakette, mida uuesti kokku panna. Aja ja nĂ€rvide sÀÀstmiseks on vĂ€iksem sĂŒsteem lihtsam kogu mahuna uuesti kokku panna):
make clean; makeKogumise lĂ”petamisel kĂ€ivitame VirtualBoxi (katsetatud versioonidega 5.2 ja 6.0) kĂ€ivitades CD-diskilt. SĂŒsteemi parameetrid:

KĂ€ivitamine koos koostatud iso-ga:

Kasutatud materjalide nimekiri
- Buildrooti kÀsiraamat
Allikas: habr.com
