į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 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:
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 paketuiBR2_GRAPH_OUT=png make graph-build
sklypo kūrimo laikas su PNG išvestimimake 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šą:
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“ 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:
Savo plokštės konfigūracijos kūrimas
Pridedami lentos failai
Pažvelkime į konfigūracijų sąrašą:
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):
Įeiname į pirmą skyrių Tikslinės parinktys. Čia galite pasirinkti tikslinę architektūrą, kuriai bus kuriama.
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į.
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:
Dauguma punktų aiškūs iš pavadinimo. Atkreipkime dėmesį į šiuos dalykus:
Kelias į vartotojų lenteles – lentelė su kuriamais vartotojais (
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ų
Č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
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ą
Bootloaders – rinkti skirtų įkrovos įkroviklių pasirinkimas. Pasirinkime Isolinix
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.
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ą
Pridėkime „Virtualbox Guest“ integracijos palaikymą
Išsaugoti ir išeiti. SVARBU: konfigūracija bus išsaugota output/build/linux-$version/config, bet ne board/my_x86_board/linux.config
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:
Veikia iš surinkto iso:
Naudotų medžiagų sąrašas
- Buildroot vadovas
Šaltinis: www.habr.com