Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

įvedimas

Šioje straipsnių serijoje noriu pažvelgti į buildroot platinimo kūrimo sistemą ir pasidalinti savo patirtimi ją tinkinant. Bus praktinės patirties kuriant nedidelę OS su grafine sąsaja ir minimaliu funkcionalumu.

Visų pirma, neturėtumėte painioti kūrimo sistemos ir platinimo. Buildroot gali sukurti sistemą iš jam siūlomų paketų rinkinio. „Buildroot“ sukurta remiantis makefile, todėl turi milžiniškas tinkinimo galimybes. Pakeisti paketą kita versija, pridėti savo paketą, pakeisti paketo kūrimo taisykles, pritaikyti failų sistemą įdiegus visus paketus? buildroot gali visa tai padaryti.

Rusijoje naudojamas buildroot, bet, mano nuomone, pradedantiesiems yra mažai informacijos rusų kalba.

Darbo tikslas – surinkti platinimo rinkinį su tiesioginiu atsisiuntimu, icewm sąsaja ir naršykle. Tikslinė platforma yra „virtualbox“.

Kodėl verta kurti savo platinimą? Dažnai reikia riboto funkcionalumo su ribotais ištekliais. Dar dažniau automatizuojant reikia sukurti programinę-aparatinę įrangą. Bendrosios paskirties paskirstymo pritaikymas išvalant nereikalingus paketus ir paverčiant jį programine įranga yra daug darbo reikalaujantis nei naujo paskirstymo kūrimas. „Gentoo“ naudojimas taip pat turi savo apribojimų.

„Buildroot“ sistema yra labai galinga, tačiau ji jums nieko nepadės. Jis gali tik įjungti ir automatizuoti surinkimo procesą.

Alternatyvios kūrimo sistemos (yocto, atviros kūrimo sistemos ir kitos) nėra svarstomos ir nelyginamos.

Kur tai gauti ir kaip pradėti

Projekto svetainė - buildroot.org. Čia galite atsisiųsti dabartinę versiją ir perskaityti vadovą. Ten galite susisiekti su bendruomene, yra klaidų stebėjimo priemonė, laiškų sąrašai ir irc kanalas.

Buildroot valdo tikslinės konstrukcijos plokštės defconfigus. Defconfig yra konfigūracijos failas, kuriame saugomos tik parinktys, kurios neturi numatytųjų verčių. Būtent jis nustato, kas ir kaip bus renkama. Tokiu atveju galite atskirai konfigūruoti busybox, linux branduolio, uglibc, u-boot ir barebox įkrovos tvarkyklių konfigūracijas, tačiau visos jos bus susietos su tiksline plokšte.
Išpakavus atsisiųstą archyvą arba klonavus iš git, gauname paruoštą naudoti buildroot. Daugiau apie katalogo struktūrą galite paskaityti vadove. Aš jums papasakosiu apie svarbiausius:

lenta — katalogas su kiekvienai plokštei būdingais failais. Tai gali būti scenarijai, skirti formuoti sistemos vaizdus (iso, sdcart, cpio ir kt.), perdangos katalogą, branduolio konfigūraciją ir kt.
configs - tikroji plokštės defconfig. Defconfig yra neišsami plokštės konfigūracija. Jame saugomi tik parametrai, kurie skiriasi nuo numatytųjų nustatymų
dl — katalogas su atsisiųstais šaltinio kodais / rinkmenomis
produkcija / tikslas - surinkta gautos OS failų sistema. Vėliau iš jo sukuriami vaizdai atsisiųsti/įdiegti
išvestis / priegloba - priimančiosios komunalinės paslaugos surinkimui
išvesti / statyti - surinktos pakuotės

Surinkimas konfigūruojamas naudojant KConfig. Ta pati sistema naudojama kuriant Linux branduolį. Dažniausiai naudojamų komandų sąrašas (vykdyti buildroot kataloge):

  • make menuconfig – iškvieskite kūrimo konfigūraciją. Taip pat galite naudoti grafinę sąsają (padaryti nconfig, padaryti xconfig, padaryti gconfig)
  • make linux-menuconfig - iškvieskite branduolio konfigūraciją.
  • padaryti švarų – išvalyti kūrimo rezultatus (viską, kas saugoma išvestyje)
  • padaryti – sukurti sistemą. Taip nesurenkami jau surinkti procesai.
  • make defconfig_name – perjunkite konfigūraciją į konkrečią defconfig
  • make list-defconfigs – rodyti defconfigų sąrašą
  • make source – tiesiog atsisiųskite diegimo failus nekurdami.
  • padaryti pagalbą – išvardyti galimas komandas

Svarbios pastabos ir naudingi patarimai

Buildroot neperkuria jau sukurtų paketų! Todėl gali susidaryti situacija, kai reikia visiškai surinkti.

Galite atkurti atskirą paketą naudodami komandą padaryti paketo pavadinimą-atstatyti. Pavyzdžiui, galite atkurti „Linux“ branduolį:

make linux-rebuild

„Buildroot“ išsaugo bet kurio paketo būseną sukurdama .stamp failus kataloge output/build/$packagename:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Todėl galite atkurti root-fs ir vaizdus neperkūrę paketų:

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

Naudingi kintamieji

buildroot turi kintamųjų rinkinį, kad būtų lengviau konfigūruoti

  • $TOPDIR – buildroot katalogas
  • $BASEDIR – OUTPUT katalogas
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR – pagrindinio kompiuterio fs, sustojimo fs, tikslinio fs kūrimo katalogai.
  • $BUILD_DIR - katalogas su išpakuotais ir pastatytais paketais

Vizualizacija

„buildroot“ turi vizualizacijos funkciją. Galutinėje sistemoje galite sukurti priklausomybės diagramą, kūrimo laiko grafiką ir paketų dydžių grafiką. Rezultatai pateikiami pdf failų pavidalu (galite pasirinkti iš svn, png) išvesties/grafiko kataloge.

Vizualizacijos komandų pavyzdžiai:

  • make graph-depends sukurti priklausomybių medį
  • make <pkg>-graph-depends sukurti priklausomybės medį konkrečiam paketui
  • BR2_GRAPH_OUT=png make graph-build sklypo kūrimo laikas su PNG išvestimi
  • make graph-size sklypo paketo dydis

Naudingi scenarijai

Buildroot kataloge yra pakatalogis naudos su naudingais scenarijais. Pavyzdžiui, yra scenarijus, kuris tikrina paketų aprašymų teisingumą. Tai gali būti naudinga pridedant savo paketus (tai padarysiu vėliau). Faile utils/readme.txt yra šių scenarijų aprašymas.

Sukurkime akcijų paskirstymą

Svarbu atsiminti, kad visos operacijos atliekamos paprasto vartotojo, o ne root, vardu.
Visos komandos vykdomos buildroot. Buildroot pakete jau yra daugelio įprastų plokščių ir virtualizacijos konfigūracijų rinkinys.

Pažvelkime į konfigūracijų sąrašą:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Perjunkite į qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

Ir pradedame surinkimą

make

Konstravimas sėkmingai baigtas, pažiūrėkite į rezultatus:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

„Buildroot“ sudarė atvaizdus, ​​kuriuos galite paleisti „Qemu“ ir patikrinti, ar jie veikia.

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

Rezultatas yra sistema, veikianti qemu:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Savo plokštės konfigūracijos kūrimas

Pridedami lentos failai

Pažvelkime į konfigūracijų sąrašą:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Sąraše matome pc_x86_64_efi_defconfig. Mes sukursime savo lentą, nukopijuodami ją iš konfigūracijos:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Nedelsdami sukurkime lentos katalogą, kuriame būtų saugomi mūsų scenarijai, rootfs-overlay ir kiti reikalingi failai:

mkdir board/my_x86_board

Perjungti į šią defconfig:

make my_x86_board_defconfig

Taigi dabar kūrimo konfigūracija (saugoma .config, esančioje buildroot katalogo šaknyje) atitinka x86-64 legacy(bios) įkrovos tikslinę mašiną.

Nukopijuokime „Linux“ branduolio konfigūraciją (naudinga vėliau):

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

Konstravimo parametrų nustatymas naudojant KConfig

Pradėkime sąranką:

make menuconfig 

Atsidarys KConfig langas. Galima konfigūruoti naudojant grafinę sąsają (padaryti nconfig, padaryti xconfig, padaryti gconfig):

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Įeiname į pirmą skyrių Tikslinės parinktys. Čia galite pasirinkti tikslinę architektūrą, kuriai bus kuriama.

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Sukūrimo parinktys – čia yra įvairių kūrimo nustatymų. Galite nurodyti katalogus su šaltinio kodais, kūrimo gijų skaičių, šaltinio kodų atsisiuntimo veidrodžius ir kitus parametrus. Palikime numatytuosius nustatymus.

Įrankių grandinė – čia sukonfigūruojami patys kūrimo įrankiai. Skaitykite daugiau apie jį.

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Toolchain type – naudojamos įrankių grandinės tipas. Tai gali būti įrankių grandinė, įmontuota į buildroot arba išorinė (galite nurodyti katalogą su jau sukurtu arba atsisiuntimo URL). Yra papildomų parinkčių skirtingoms architektūroms. Pavyzdžiui, rankinei galite tiesiog pasirinkti išorinės įrankių grandinės Linaro versiją.

C biblioteka – nuo ​​to priklauso visos sistemos veikimas. Paprastai naudojamas glibc, kuris palaiko visas įmanomas funkcijas. Tačiau jis gali būti per didelis įterptajai sistemai, todėl dažnai pasirenkamas uglibc arba musl. Pasirinksime glibc (to reikės vėliau norint naudoti systemd).

Branduolio antraštės ir pasirinktinės branduolio antraštės – turi atitikti branduolio versiją, kuri bus surinktoje sistemoje. Branduolio antraštėms taip pat galite nurodyti kelią į tarball arba git saugyklą.

GCC COMPILER VERSIONS – pasirinkite kompiliatoriaus versiją, kuri bus naudojama kuriant
Įgalinti C++ palaikymą – pasirinkite kurti su C++ bibliotekų palaikymu sistemoje. Tai mums bus naudinga ateityje.

Papildomos gcc parinktys – galite nustatyti papildomas kompiliatoriaus parinktis. Kol kas mums to nereikia.

Sistemos konfigūracija leidžia nustatyti būsimus sukurtos sistemos parametrus:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Dauguma punktų aiškūs iš pavadinimo. Atkreipkime dėmesį į šiuos dalykus:
Kelias į vartotojų lenteles – lentelė su kuriamais vartotojais (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Pavyzdinis failas. Vartotojo vartotojas bus sukurtas su slaptažodžiu admin, automatiškai gid/uid, /bin/sh apvalkalu, numatytasis grupės vartotojas, grupės narys šaknis, komentaras Foo vartotojas

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

Root failų sistemos perdangos katalogai – katalogas, perdengtas ant surinktų target-fs. Prideda naujų failų ir pakeičia esamus.

Pasirinktiniai scenarijai, kuriuos reikia paleisti prieš kuriant failų sistemos vaizdus – scenarijai, vykdomi prieš pat sulenkiant failų sistemą į vaizdus. Palikime scenarijų kol kas tuščią.

Eikime į branduolio skyrių

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Čia nustatomi branduolio nustatymai. Pats branduolys sukonfigūruojamas naudojant make linux-menuconfig.
Branduolio versiją galite nustatyti įvairiais būdais: pasirinkite iš siūlomų, įveskite versiją rankiniu būdu, nurodykite saugyklą arba paruoštą tarball.

Branduolio konfigūracija – kelias į branduolio konfigūraciją. Galite pasirinkti numatytąją konfigūraciją pasirinktai architektūrai arba defocnfig iš Linux. „Linux“ šaltinyje yra įvairių tikslinių sistemų defconfigūrų rinkinys. Galite rasti tą, kurio jums reikia žiūrėdami tiesiai į čia esančius šaltinius. Pavyzdžiui, biglio kaulo juodą lentą galite pasirinkite konfig.

Skiltyje Tiksliniai paketai galite pasirinkti, kurie paketai bus įdiegti kuriamoje sistemoje. Kol kas palikime nepakeistą. Savo paketus į šį sąrašą įtrauksime vėliau.
Failų sistemos vaizdai – failų sistemos vaizdų, kurie bus renkami, sąrašas. Pridėkite iso vaizdą

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Bootloaders – rinkti skirtų įkrovos įkroviklių pasirinkimas. Pasirinkime Isolinix

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Sistemos konfigūravimas

„Systemd“ kartu su branduoliu ir glibc tampa vienu iš „Linux“ ramsčių. Todėl jo nustatymą perkėliau į atskirą elementą.

Konfigūruojama naudojant make menuconfig, tada Target paketai → Sistemos įrankiai → systemd. Čia galite nurodyti, kurios sistemos paslaugos bus įdiegtos ir paleistos, kai sistema paleidžiama.

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Išsaugoma sistemos konfigūracija

Šią konfigūraciją išsaugome per KConfig.

Tada išsaugokite mūsų defconfig:

make savedefconfig

Linux branduolio konfigūracija

Linux branduolio konfigūracija iškviečiama naudojant šią komandą:

make linux-menuconfig

Pridėkime „Virtualbox“ vaizdo plokštės palaikymą

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Pridėkime „Virtualbox Guest“ integracijos palaikymą

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Išsaugoti ir išeiti. SVARBU: konfigūracija bus išsaugota output/build/linux-$version/config, bet ne board/my_x86_board/linux.config

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Todėl turite rankiniu būdu nukopijuoti konfigūraciją į saugojimo vietą:

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

Po to atliksime pilną visos sistemos surinkimą. buildroot neatkuria to, kas jau buvo sukurta, turite rankiniu būdu nurodyti paketus atstatymui. Kad nebūtų švaistomas laikas ir nervai, lengviau visiškai atkurti nedidelę sistemą):

make clean;make

Baigę kurti, paleiskite „VirtualBox“ (išbandytą 5.2 ir 6.0 versijose) įkrovą iš kompaktinio disko:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Veikia iš surinkto iso:

Buildroot - 1 dalis. Bendra informacija, minimalios sistemos surinkimas, konfigūracija per meniu

Naudotų medžiagų sąrašas

  1. Buildroot vadovas

Šaltinis: www.habr.com

Добавить комментарий