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 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:
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-dipendenzamake <pkg>-graph-depends
tibni siġra tad-dipendenza għal pakkett speċifikuBR2_GRAPH_OUT=png make graph-build
ippjana l-ħin tal-bini b'output PNGmake 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:
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 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:
Ħolqien tal-konfigurazzjoni tal-bord tiegħek stess
Żieda ta' Fajls tal-Bord
Ejja nħarsu lejn il-lista ta 'konfigurazzjonijiet:
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):
Nidħlu fl-ewwel taqsima Target Options. Hawnhekk tista 'tagħżel l-arkitettura fil-mira li għaliha se titwettaq il-bini.
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.
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:
Ħ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 (
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
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
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
Bootloaders - għażla ta 'bootloaders biex jiġbru. Ejja nagħżlu isolinix
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.
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
Ejja nżidu l-appoġġ għall-integrazzjoni Virtualbox Guest
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
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:
Jiġi mill-iso immuntat:
Lista ta' materjali użati
- Manwal Buildroot
Sors: www.habr.com