Ynlieding
Yn dizze searje artikels wol ik sjen nei it buildsysteem foar buildroot-distribúsje en myn ûnderfining diele yn it oanpassen. Hjir sille jo praktyske ûnderfining hawwe yn it meitsjen fan in lyts OS mei in grafyske ynterface en minimale funksjonaliteit.
Earst moatte jo it bousysteem en de distribúsje net betize. Buildroot kin in systeem bouwe út in set fan pakketten dy't deroan wurde oanbean. Buildroot is boud op makefiles en hat dêrom enoarme oanpassingsmooglikheden. Ferfange in pakket mei in oare ferzje, foegje jo eigen pakket ta, feroarje de regels foar it bouwen fan in pakket, oanpasse it bestânsysteem nei it ynstallearjen fan alle pakketten? buildroot kin dit alles dwaan.
Yn Ruslân wurdt buildroot brûkt, mar nei myn miening is d'r net folle Russysktalige ynformaasje foar begjinners.
It doel fan it wurk is om in distribúsjekit te sammeljen mei live download, icewm-ynterface en browser. It doelplatfoarm is virtualbox.
Wêrom bouwe jo eigen distribúsje? Faak is beheinde funksjonaliteit nedich mei beheinde middels. Noch faker yn automatisearring moatte jo firmware oanmeitsje. It oanpassen fan in distribúsje foar algemiene doelen troch ûnnedige pakketten skjin te meitsjen en it yn firmware te feroarjen is arbeidsyntinsiver dan it bouwen fan in nije distribúsje. It brûken fan Gentoo hat ek syn beheiningen.
It Buildroot-systeem is heul krêftich, mar it sil neat foar jo dwaan. It kin allinich it assemblageproses ynskeakelje en automatisearje.
Alternative bousystemen (yocto, iepen bouwsysteem en oaren) wurde net beskôge of fergelike.
Wêr te krijen en hoe te begjinnen
Projektwebside -
Buildroot wurket defconfigs foar it doelboerd fan 'e build. Defconfig is in konfiguraasjetriem dat allinich opsjes bewarret dy't gjin standertwearden hawwe. It is hy dy't bepaalt wat wurdt sammele en hoe. Yn dit gefal kinne jo de konfiguraasjes fan busybox, linux-kernel, uglibc, u-boot en barebox bootloaders apart konfigurearje, mar se wurde allegear bûn oan it doelboerd.
Nei it útpakke fan it ynladen argyf of klonen fan git, krije wy in klear te brûken buildroot. Jo kinne mear lêze oer de mapstruktuer yn 'e hantlieding; Ik sil jo fertelle oer de wichtichste:
board - in map mei bestannen spesifyk foar elk boerd. Dit kinne skripts wêze foar it foarmjen fan systeemôfbyldings (iso, sdcart, cpio en oaren), in overlay-map, kernel-konfiguraasje, ensfh.
configs - de eigentlike defconfig fan it bestjoer. Defconfig is in ûnfolsleine boerdkonfiguraasje. It bewarret allinich parameters dy't ferskille fan 'e standertynstellingen
dl - map mei ynladen boarne koades / bestannen foar montage
útfier / doel - it gearstalde bestânsysteem fan it resultearjende OS. Dêrnei wurde ôfbyldings derfan makke foar ynlaad/ynstallaasje
útfier / host - host nutsbedriuwen foar montage
útfier / bouwe - gearstalde pakketten
De gearstalling wurdt konfigurearre fia KConfig. Itselde systeem wurdt brûkt om de Linux kernel te bouwen. List mei de meast brûkte kommando's (útfiere yn 'e buildroot-map):
- meitsje menuconfig - rop de boukonfiguraasje op. Jo kinne ek de grafyske ynterface brûke (meitsje nconfig, meitsje xconfig, meitsje gconfig)
- meitsje linux-menuconfig - rop de kernelkonfiguraasje op.
- meitsje skjin - skjin de bouresultaten (alles opslein yn útfier)
- meitsje - bouwe in systeem. Dit bringt al gearstalde prosessen net op 'e nij.
- meitsje defconfig_name - skeakelje de konfiguraasje nei in spesifike defconfig
- meitsje list-defconfigs - lit in list mei defconfigs sjen
- meitsje boarne - download gewoan de ynstallaasjebestannen, sûnder te bouwen.
- meitsje help - list mooglike kommando's
Wichtige notysjes en nuttige tips
Buildroot bout pakketten net opnij op dy't al binne boud! Dêrom kin in situaasje ûntstean wêr't in folsleine weryndieling fereaske is.
Jo kinne in apart pakket opnij opbouwe mei it kommando meitsje packagename-rebuild. Jo kinne bygelyks de Linux kernel opnij bouwe:
make linux-rebuild
Buildroot bewarret de steat fan elk pakket troch it meitsjen fan .stamp-bestannen yn 'e útfier/build/$packagename-map:
Dêrom kinne jo root-fs en ôfbyldings opnij opbouwe sûnder pakketten opnij op te bouwen:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
Nuttige fariabelen
buildroot hat in set fan fariabelen foar maklike konfiguraasje
- $TOPDIR - buildroot map
- $BASEDIR - OUTPUT map
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs build directories.
- $BUILD_DIR - map mei útpakte en boude pakketten
Fisualisaasje
buildroot hat in fisualisaasjefunksje Jo kinne in ôfhinklikensdiagram, in build-tiidgrafyk en in grafyk fan pakketgrutte bouwe yn it definitive systeem. De resultaten binne yn 'e foarm fan pdf-bestannen (jo kinne kieze út svn, png) yn' e útfier / grafykmap.
Foarbylden fan fisualisaasjekommando's:
make graph-depends
bouwe ôfhinklikensbeammake <pkg>-graph-depends
bouwe in ôfhinklikensbeam foar in spesifyk pakketBR2_GRAPH_OUT=png make graph-build
plot bouwe tiid mei PNG útfiermake graph-size
plot pakket grutte
Nuttige skripts
D'r is in submap yn 'e buildroot-map utils mei brûkbere skripts. D'r is bygelyks in skript dat de krektens fan pakketbeskriuwingen kontrolearret. Dit kin nuttich wêze as jo jo eigen pakketten tafoegje (ik sil dit letter dwaan). De triem utils/readme.txt befettet in beskriuwing fan dizze skripts.
Litte wy in stockferdieling bouwe
It is wichtich om te betinken dat alle operaasjes wurde útfierd út namme fan in gewoane brûker, net root.
Alle kommando's wurde útfierd yn 'e buildroot. It buildroot-pakket omfettet al in set konfiguraasjes foar in protte mienskiplike boerden en virtualisaasje.
Litte wy nei de list mei konfiguraasjes sjen:
Wikselje nei de qemu_x86_64_defconfig konfiguraasje
make qemu_x86_64_defconfig
En wy begjinne de gearkomste
make
De bou foltôge mei sukses, sjoch nei de resultaten:
Buildroot hat ôfbyldings gearstald dy't jo kinne útfiere yn Qemu en ferifiearje dat se wurkje.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
It resultaat is in systeem dat rint yn qemu:
It meitsjen fan jo eigen boerdkonfiguraasje
Taheakjen Board Files
Litte wy nei de list mei konfiguraasjes sjen:
Yn 'e list sjogge wy pc_x86_64_efi_defconfig. Wy sille ús eigen boerd oanmeitsje troch it te kopiearjen fan 'e konfiguraasje:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
Litte wy fuortendaliks in boerdmap oanmeitsje om ús skripts, rootfs-overlay en oare nedige bestannen op te slaan:
mkdir board/my_x86_board
Wikselje nei dizze defconfig:
make my_x86_board_defconfig
Sa komt no de build-konfiguraasje (opslein yn .config yn 'e root fan' e buildroot-map) oerien mei de x86-64 legacy (bios) bootdoelmasine.
Litte wy de linux-kernel-konfiguraasje kopiearje (letter brûkber):
cp board/pc/linux.config board/my_x86_board/
Bouwparameters ynstelle fia KConfig
Litte wy de opset begjinne:
make menuconfig
It KConfig-finster sil iepenje. It is mooglik om te konfigurearjen mei in grafyske ynterface (meitsje nconfig, meitsje xconfig, meitsje gconfig):
Wy ynfiere de earste seksje Doelopsjes. Hjir kinne jo de doelarsjitektuer selektearje wêrfoar de bou sil wurde útfierd.
Bouwopsjes - d'r binne hjir ferskate bouynstellingen. Jo kinne mappen oantsjutte mei boarne koades, it oantal build threads, spegels foar it downloaden fan boarne koades en oare ynstellings. Litte wy de ynstellings op standert litte.
Toolchain - de bou-ark sels wurde hjir konfigureare. Lês mear oer him.
Toolchain type - type toolchain brûkt. Dit kin in toolchain wêze ynboud yn buildroot of in eksterne (jo kinne de map opjaan mei de al boude of de url foar it downloaden). D'r binne ekstra opsjes foar ferskate arsjitektueren. Bygelyks, foar earm kinne jo gewoan selektearje de Linaro ferzje fan de eksterne toolchain.
C bibleteek – seleksje fan de biblioteek C. De wurking fan it hiele systeem hinget hjirfan ôf. Typysk wurdt glibc brûkt, dy't alle mooglike funksjonaliteit stipet. Mar it kin wêze te grut foar in ynbêde systeem, sadat uglibc of musl wurde faak keazen. Wy sille glibc selektearje (dit sil letter nedich wêze om systemd te brûken).
Kernel Headers en Custom Kernel Headers-searjes - moatte oerienkomme mei de ferzje fan 'e kernel dy't yn it gearstalde systeem sil wêze. Foar kernel-headers kinne jo ek it paad opjaan nei it tarball- of git-repository.
GCC COMPILER VERSIONS - selektearje de kompilerferzje dy't brûkt wurde foar it bouwen
C ++-stipe ynskeakelje - selektearje om te bouwen mei stipe foar C ++-biblioteken yn it systeem. Dit sil nuttich wêze foar ús yn 'e takomst.
Oanfoljende gcc-opsjes - jo kinne ekstra kompileropsjes ynstelle. Wy hawwe it no net nedich.
Systeemkonfiguraasje lit jo takomstige parameters fan it oanmakke systeem ynstelle:
De measte punten binne dúdlik út de titel. Litte wy omtinken jaan oan de folgjende punten:
Paad nei de brûkerstabellen - tabel mei brûkers dy't oanmakke wurde (
Foarbyld triem. De brûker brûker sil oanmakke wurde mei it wachtwurd admin, automatysk gid / uid, / bin / sh shell, standert groep brûker, groep lid root, kommentaar Foo brûker
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
Root-bestânsysteem-overlay-mappen - map oerlein boppe op 'e gearstalde target-fs. Foeget nije bestannen ta en ferfangt besteande.
Oanpaste skripts om út te fieren foar it meitsjen fan triemsysteemôfbyldings - Skripten dy't direkt wurde útfierd foardat it bestânsysteem yn ôfbyldings falt. Lit ús it skript foarearst leech litte.
Litte wy nei de Kernel-seksje gean
Kernel ynstellings wurde hjir ynsteld. De kernel sels is konfigureare fia make linux-menuconfig.
Jo kinne de kearnferzje op ferskate manieren ynstelle: selektearje út de oanbeane, fier de ferzje manuell yn, spesifisearje in repository of in klear makke tarball.
Kernel konfiguraasje - paad nei de kernel konfiguraasje. Jo kinne de standertkonfiguraasje selektearje foar de selekteare arsjitektuer of defocnfig fan Linux. De Linux-boarne befettet in set defconfigs foar ferskate doelsystemen. Jo kinne dejinge fine dy't jo nedich binne
De seksje Doelpakketten lit jo selektearje hokker pakketten sille wurde ynstalleare op it systeem dat wurdt boud. Lit ús it foarearst net feroarje. Wy sille ús pakketten letter tafoegje oan dizze list.
Bestânssysteemôfbyldings - in list mei triemsysteemôfbyldings dy't sille wurde sammele. Foegje in iso-ôfbylding ta
Bootloaders - seleksje fan bootloaders om te sammeljen. Lit ús kieze isolinix
Systemd konfigurearje
Systemd wurdt ien fan 'e pylders fan Linux, tegearre mei kernel en glibc. Dêrom ferhuze ik syn ynstelling nei in apart item.
Konfigurearre fia meitsje menuconfig, dan Doelpakketten → Systeem ark → systemd. Hjir kinne jo opjaan hokker systemd tsjinsten wurde ynstalleare en begon as it systeem begjint.
Bewarje systeem konfiguraasje
Wy bewarje dizze konfiguraasje fia KConfig.
Bewarje dan ús defconfig:
make savedefconfig
Linux Kernel Konfiguraasje
De Linux kernel konfiguraasje wurdt oproppen mei it folgjende kommando:
make linux-menuconfig
Litte wy stipe tafoegje foar de Virtualbox-fideokaart
Litte wy Virtualbox Guest-yntegraasjestipe tafoegje
Bewarje en ôfslute. WICHTich: konfiguraasje wurdt bewarre yn output/build/linux-$version/config, mar net yn board/my_x86_board/linux.config
Dêrom moatte jo de konfiguraasje manuell kopiearje nei in opslachlokaasje:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Dêrnei sille wy in folsleine reassembly fan it hiele systeem útfiere. buildroot bout net wer op wat al boud is, jo moatte de pakketten manuell oantsjutte foar werbouwen. Om gjin tiid en senuwen te fergrieme, is it makliker om in lyts systeem folslein opnij op te bouwen):
make clean;make
Nei it foltôgjen fan it bouwen, starte VirtualBox (test op ferzjes 5.2 en 6.0) opstarten fan 'e CD. Systeemparameters:
Starte fanôf de gearstalde iso:
List fan brûkte materialen
- Buildroot hânboek
Boarne: www.habr.com