Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Introduzzjoni

F'din is-serje ta 'artikoli, nixtieq inħares lejn is-sistema tal-bini tad-distribuzzjoni tal-buildroot u naqsam l-esperjenza tiegħi fil-personalizzazzjoni tagħha. Se jkun hemm esperjenza prattika fil-ħolqien ta 'OS żgħir b'interface grafika u funzjonalità minima.

L-ewwelnett, m'għandekx tħawwad is-sistema tal-bini u d-distribuzzjoni. Buildroot jista 'jibni sistema minn sett ta' pakketti li huma offruti lilha. Buildroot huwa mibni fuq makefiles u għalhekk għandu kapaċitajiet ta 'adattament enormi. Ibdel pakkett b'verżjoni oħra, żid il-pakkett tiegħek stess, ibdel ir-regoli għall-bini ta 'pakkett, tippersonalizza s-sistema tal-fajls wara li tinstalla l-pakketti kollha? buildroot jista 'jagħmel dan kollu.

Fir-Russja, jintuża buildroot, iżda fl-opinjoni tiegħi ftit hemm informazzjoni bil-lingwa Russa għal dawk li jibdew.

L-għan tax-xogħol huwa li jiġbor kit ta 'distribuzzjoni b'download live, interface icewm u browser. Il-pjattaforma fil-mira hija virtualbox.

Għaliex tibni d-distribuzzjoni tiegħek? Ħafna drabi hija meħtieġa funzjonalità limitata b'riżorsi limitati. Saħansitra aktar spiss fl-awtomazzjoni għandek bżonn toħloq firmware. L-adattament ta' distribuzzjoni għal skopijiet ġenerali billi tnaddaf pakketti mhux meħtieġa u tinbidel f'firmware huwa aktar xogħol intensiv milli tinbena distribuzzjoni ġdida. L-użu ta' Gentoo għandu wkoll il-limitazzjonijiet tiegħu.

Is-sistema Buildroot hija qawwija ħafna, iżda ma tagħmel xejn għalik. Jista 'biss jippermetti u awtomat il-proċess ta' assemblaġġ.

Sistemi ta' bini alternattivi (yocto, sistema ta' bini miftuħ u oħrajn) mhumiex ikkunsidrati jew imqabbla.

Fejn ġġibu u kif tibda

Websajt tal-proġett - buildroot.org. Hawnhekk tista' tniżżel il-verżjoni attwali u taqra l-manwal. Hemmhekk tista' tikkuntattja lill-komunità, hemm bug tracker, mail-lists u kanal irc.

Buildroot topera defconfigs għall-bord fil-mira tal-bini. Defconfig huwa fajl ta 'konfigurazzjoni li jaħżen biss għażliet li m'għandhomx valuri awtomatiċi. Huwa hu li jiddetermina x’se jinġabar u kif. F'dan il-każ, tista 'tikkonfigura separatament il-konfigurazzjonijiet ta' busybox, linux-kernel, uglibc, u-boot u barebox bootloaders, iżda kollha kemm huma se jkunu marbuta mal-bord fil-mira.
Wara li tħoll l-arkivju mniżżel jew il-klonazzjoni minn git, aħna nġibu buildroot lest għall-użu. Tista' taqra aktar dwar l-istruttura tad-direttorju fil-manwal; jien ngħidlek dwar l-aktar importanti:

bord — direttorju b'fajls speċifiċi għal kull bord. Dawn jistgħu jkunu skripts biex jiffurmaw immaġini tas-sistema (iso, sdcart, cpio u oħrajn), direttorju overlay, konfigurazzjoni tal-kernel, eċċ.
konfigurazzjonijiet — id-defconfig attwali tal-bord. Defconfig hija konfigurazzjoni tal-bord mhux kompluta. Taħżen biss parametri li huma differenti mis-settings default
dl — direttorju b'kodiċijiet/fajls tas-sors imniżżla għall-assemblaġġ
output/mira — is-sistema tal-fajls immuntata tal-OS li tirriżulta. Sussegwentement, immaġini huma maħluqa minnha għat-tniżżil/installazzjoni
output/host - utilitajiet ospitanti għall-assemblaġġ
output/bini - pakketti immuntati

L-assemblaġġ huwa kkonfigurat permezz tal-KConfig. L-istess sistema tintuża biex tinbena l-kernel tal-Linux. Lista tal-kmandi l-aktar użati komunement (eżegwiti fid-direttorju tal-buildroot):

  • make menuconfig - sejjaħ il-konfigurazzjoni tal-bini. Tista 'wkoll tuża l-interface grafika (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - sejjaħ il-konfigurazzjoni tal-kernel.
  • naddaf - naddaf ir-riżultati tal-bini (kollox maħżun fl-output)
  • tagħmel - tibni sistema. Dan ma jerġax jiġbor proċessi diġà mmuntati.
  • make defconfig_name - taqleb il-konfigurazzjoni għal defconfig speċifiku
  • make list-defconfigs - uri lista ta' defconfigs
  • agħmel is-sors - tniżżel biss il-fajls tal-installazzjoni, mingħajr ma tinbena.
  • agħmel għajnuna - elenka l-kmandi possibbli

Noti importanti u pariri utli

Buildroot ma jerġax jibni pakketti li diġà nbnew! Għalhekk, tista' tinħoloq sitwazzjoni fejn ikun meħtieġ assemblaġġ mill-ġdid komplut.

Tista 'terġa' tibni pakkett separat bil-kmand tagħmel packagename-rebuild. Pereżempju, tista’ terġa’ tibni l-qalba tal-Linux:

make linux-rebuild

Buildroot jaħżen l-istat ta' kwalunkwe pakkett billi joħloq fajls .stamp fid-direttorju output/build/$packagename:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Għalhekk, tista' terġa' tibni root-fs u immaġini mingħajr ma terġa' tibni l-pakketti:

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

Varjabbli Utli

buildroot għandu sett ta 'varjabbli għal konfigurazzjoni faċli

  • $TOPDIR - direttorju buildroot
  • $BASEDIR - direttorju OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs build directories.
  • $BUILD_DIR - direttorju b'pakketti mhux ippakkjati u mibnija

Viżwalizzazzjoni

buildroot għandu karatteristika ta 'viżwalizzazzjoni. Tista' tibni dijagramma tad-dipendenza, graff tal-ħin tal-bini, u graff tad-daqsijiet tal-pakkett fis-sistema finali. Ir-riżultati huma fil-forma ta 'fajls pdf (tista' tagħżel minn svn, png) fid-direttorju tal-output/graff.

Eżempji ta' kmandi ta' viżwalizzazzjoni:

  • make graph-depends jibnu siġra tad-dipendenza
  • make <pkg>-graph-depends tibni siġra tad-dipendenza għal pakkett speċifiku
  • BR2_GRAPH_OUT=png make graph-build ippjana l-ħin tal-bini b'output PNG
  • make graph-size daqs tal-pakkett tal-plott

Skripts utli

Hemm subdirettorju fid-direttorju tal-buildroot għodod bi skripts utli. Pereżempju, hemm skript li jiċċekkja l-korrettezza tad-deskrizzjonijiet tal-pakkett. Dan jista 'jkun utli meta żżid il-pakketti tiegħek stess (nagħmel dan aktar tard). Il-fajl utils/readme.txt fih deskrizzjoni ta' dawn l-iskripts.

Ejja nibnu distribuzzjoni tal-istokk

Huwa importanti li wieħed jiftakar li l-operazzjonijiet kollha jsiru f'isem utent regolari, mhux għerq.
Il-kmandi kollha huma esegwiti fil-buildroot. Il-pakkett buildroot diġà jinkludi sett ta 'konfigurazzjonijiet għal ħafna bordijiet komuni u virtwalizzazzjoni.

Ejja nħarsu lejn il-lista ta 'konfigurazzjonijiet:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Aqleb għall-konfigurazzjoni qemu_x86_64_defconfig

make qemu_x86_64_defconfig

U nibdew l-assemblaġġ

make

Il-bini tlesti b'suċċess, ħares lejn ir-riżultati:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Buildroot ikkumpila immaġini li tista 'taħdem f'Qemu u tivverifika li jaħdmu.

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

Ir-riżultat huwa sistema li taħdem f'qemu:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Ħolqien tal-konfigurazzjoni tal-bord tiegħek stess

Żieda ta' Fajls tal-Bord

Ejja nħarsu lejn il-lista ta 'konfigurazzjonijiet:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Fil-lista naraw pc_x86_64_efi_defconfig. Aħna noħolqu l-bord tagħna stess billi nikkupjawha mill-konfigurazzjoni:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Ejja immedjatament noħolqu direttorju tal-bord biex naħżnu l-iskripts tagħna, rootfs-overlay u fajls oħra meħtieġa:

mkdir board/my_x86_board

Aqleb għal din id-defconfig:

make my_x86_board_defconfig

Għalhekk, issa l-konfigurazzjoni tal-bini (maħżuna f'.config fl-għerq tad-direttorju tal-buildroot) tikkorrispondi għall-magna tal-mira tal-boot legacy(bios) x86-64.

Ejja nikkopja l-konfigurazzjoni tal-kernel linux (utli aktar tard):

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

L-issettjar tal-parametri tal-bini permezz ta' KConfig

Ejja nibdew is-setup:

make menuconfig 

It-tieqa tal-KConfig tinfetaħ. Huwa possibbli li jiġi kkonfigurat b'interface grafika (make nconfig, make xconfig, make gconfig):

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Nidħlu fl-ewwel taqsima Target Options. Hawnhekk tista 'tagħżel l-arkitettura fil-mira li għaliha se titwettaq il-bini.

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Għażliet tal-bini - hawn diversi settings tal-bini. Tista 'tispeċifika direttorji b'kodiċijiet tas-sors, in-numru ta' ħjut tal-bini, mirja għat-tniżżil ta 'kodiċijiet tas-sors u settings oħra. Ejja nħallu s-settings default.

Toolchain - l-għodod tal-bini nfushom huma kkonfigurati hawn. Aqra aktar dwaru.

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Tip ta’ toolchain – tip ta’ toolchain użat. Din tista' tkun toolchain mibnija f'buildroot jew waħda esterna (tista' tispeċifika d-direttorju b'dik diġà mibnija jew l-url għat-tniżżil). Hemm għażliet addizzjonali għal arkitetturi differenti. Pereżempju, għal driegħ tista 'sempliċement tagħżel il-verżjoni Linaro tal-għodda esterna.

Librerija C – għażla tal-librerija C. It-tħaddim tas-sistema kollha jiddependi minn dan. Tipikament, jintuża glibc, li jappoġġja l-funzjonalità kollha possibbli. Iżda jista 'jkun kbir wisq għal sistema inkorporata, għalhekk uglibc jew musl huma spiss magħżula. Aħna se nagħżlu glibc (dan ikun meħtieġ aktar tard biex tuża systemd).

Kernel Headers u Custom Kernel Headers serje - għandhom jaqblu mal-verżjoni tal-kernel li se jkun fis-sistema immuntata. Għall-headers tal-kernel, tista 'wkoll tispeċifika t-triq għar-repożitorju tarball jew git.

VERŻJONIJIET TAL-KOMPILAR GCC – agħżel il-verżjoni tal-kompilatur li għandha tintuża għall-bini
Attiva l-appoġġ C++ – agħżel biex tibni b'appoġġ għal libreriji C++ fis-sistema. Dan se jkun utli għalina fil-futur.

Għażliet addizzjonali tal-gcc – tista’ tissettja għażliet ta’ kompilatur addizzjonali. M'għandniex bżonnha għalissa.

Il-konfigurazzjoni tas-sistema tippermettilek li tissettja parametri futuri tas-sistema maħluqa:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Ħafna mill-punti huma ċari mit-titlu. Ejja nagħtu attenzjoni għall-punti li ġejjin:
Passaġġ għat-tabelli tal-utenti - tabella bl-utenti li jridu jinħolqu (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Fajl ta' eżempju. L-utent tal-utent se jinħoloq bil-password admin, awtomatikament gid/uid, /bin/sh shell, utent tal-grupp default, root tal-membru tal-grupp, kumment Foo user

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

Direttorji ta 'overlay tas-sistema ta' fajls ta 'l-għeruq - direttorju miksi fuq il-mira-fs assemblati. Iżżid fajls ġodda u jissostitwixxi dawk eżistenti.

Skripts personalizzati biex jaħdmu qabel ma joħolqu immaġini tas-sistema tal-fajls - Skripts esegwiti immedjatament qabel ma jintwew is-sistema tal-fajls f'immaġini. Ejja nħallu l-iskript vojt għalissa.

Ejja mmorru fit-taqsima Kernel

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Is-settings tal-kernel huma stabbiliti hawn. Il-kernel innifsu huwa kkonfigurat permezz ta' make linux-menuconfig.
Tista' tissettja l-verżjoni tal-kernel b'modi differenti: agħżel minn dawk offruti, daħħal il-verżjoni manwalment, speċifika repożitorju jew tarball lest.

Konfigurazzjoni tal-kernel — mogħdija għall-konfigurazzjoni tal-kernel. Tista 'tagħżel il-konfigurazzjoni default għall-arkitettura magħżula jew defocnfig minn Linux. Is-sors Linux fih sett ta 'defconfigs għal sistemi ta' mira differenti. Tista' ssib dik li għandek bżonn billi tħares direttament lejn is-sorsi hawn. Pereżempju, għal bord iswed tal-għadam tal-beagle tista ' agħżel il-konfigurazzjoni.

It-taqsima tal-pakketti Target tippermettilek tagħżel liema pakketti se jiġu installati fis-sistema li qed tinbena. Ejja nħalluha mhux mibdula għalissa. Aħna se nżidu l-pakketti tagħna ma 'din il-lista aktar tard.
Immaġini tas-sistema tal-fajls - lista ta' immaġini tas-sistema tal-fajls li se jinġabru. Żid immaġini iso

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Bootloaders - għażla ta 'bootloaders biex jiġbru. Ejja nagħżlu isolinix

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Konfigurazzjoni ta' Systemd

Systemd qed isir wieħed mill-pilastri tal-Linux, flimkien mal-kernel u l-glibc. Għalhekk, ċċaqlaqt l-issettjar tiegħu għal oġġett separat.

Konfigurat permezz ta' make menuconfig, imbagħad Target packages → System tools → systemd. Hawnhekk tista' tispeċifika liema servizzi systemd se jiġu installati u mibdija meta tibda s-sistema.

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Iffrankar tal-konfigurazzjoni tas-sistema

Aħna nissejvjaw din il-konfigurazzjoni permezz tal-KConfig.

Imbagħad issalva d-defconfig tagħna:

make savedefconfig

Konfigurazzjoni tal-kernel tal-Linux

Il-konfigurazzjoni tal-kernel Linux hija invokata bil-kmand li ġej:

make linux-menuconfig

Ejja nżidu l-appoġġ għall-kard tal-vidjo Virtualbox

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Ejja nżidu l-appoġġ għall-integrazzjoni Virtualbox Guest

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Issejvja u oħroġ. IMPORTANTI: il-konfigurazzjoni tiġi ssejvjata fl-output/build/linux-$version/config, iżda mhux fil-board/my_x86_board/linux.config

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Għalhekk, trid tikkopja manwalment il-konfigurazzjoni f'post tal-ħażna:

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

Wara dan aħna se nwettqu assemblaġġ mill-ġdid sħiħ tas-sistema kollha. buildroot ma jerġax jibni dak li diġà nbena, trid tispeċifika manwalment pakketti għall-bini mill-ġdid. Sabiex ma taħlix il-ħin u n-nervituri, huwa aktar faċli li terġa 'tinbena sistema żgħira kompletament):

make clean;make

Mat-tlestija tal-bini, nieda VirtualBox (ittestjat fuq verżjonijiet 5.2 u 6.0) ibbutjar mis-CD. Parametri tas-sistema:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Jiġi mill-iso immuntat:

Buildroot - parti 1. Informazzjoni ġenerali, assemblaġġ ta 'sistema minima, konfigurazzjoni permezz tal-menu

Lista ta' materjali użati

  1. Manwal Buildroot

Sors: www.habr.com

Żid kumment