Ievads
Å ajÄ rakstu sÄrijÄ es vÄlos apskatÄ«t buildroot izplatÄ«Å”anas veidoÅ”anas sistÄmu un dalÄ«ties savÄ pieredzÄ tÄs pielÄgoÅ”anÄ. BÅ«s praktiska pieredze nelielas OS izveidÄ ar grafisko interfeisu un minimÄlu funkcionalitÄti.
PirmkÄrt, nevajadzÄtu jaukt veidoÅ”anas sistÄmu un izplatÄ«Å”anu. Buildroot var izveidot sistÄmu no pakotÅu kopas, kas tai tiek piedÄvÄta. Buildroot ir veidota uz makefailiem, un tÄpÄc tai ir milzÄ«gas pielÄgoÅ”anas iespÄjas. AizstÄt pakotni ar citu versiju, pievienot savu pakotni, mainÄ«t pakotnes veidoÅ”anas noteikumus, pielÄgot failu sistÄmu pÄc visu pakotÅu instalÄÅ”anas? buildroot to visu var izdarÄ«t.
KrievijÄ izmanto buildroot, bet, manuprÄt, iesÄcÄjiem ir maz informÄcijas krievu valodÄ.
Darba mÄrÄ·is ir salikt izplatÄ«Å”anas komplektu ar tieÅ”raides lejupielÄdi, icewm interfeisu un pÄrlÅ«kprogrammu. MÄrÄ·a platforma ir virtualbox.
KÄpÄc izveidot savu izplatÄ«Å”anu? Bieži vien ir nepiecieÅ”ama ierobežota funkcionalitÄte ar ierobežotiem resursiem. Pat biežÄk automatizÄcijÄ ir jÄizveido programmaparatÅ«ra. UniversÄla izplatÄ«Å”anas pielÄgoÅ”ana, iztÄ«rot nevajadzÄ«gÄs pakotnes un pÄrvÄrÅ”ot to par programmaparatÅ«ru, ir darbietilpÄ«gÄka nekÄ jauna izplatÄ«Å”anas izveide. Gentoo lietoÅ”anai ir arÄ« savi ierobežojumi.
Buildroot sistÄma ir ļoti jaudÄ«ga, taÄu tÄ jums neko nedos. Tas var tikai iespÄjot un automatizÄt montÄžas procesu.
AlternatÄ«vas veidoÅ”anas sistÄmas (yocto, open build sistÄma un citas) netiek Åemtas vÄrÄ un salÄ«dzinÄtas.
Kur to iegÅ«t un kÄ sÄkt
Projekta mÄjas lapa -
Buildroot izmanto defconfigs bÅ«vÄjuma mÄrÄ·a panelim. Defconfig ir konfigurÄcijas fails, kurÄ tiek saglabÄtas tikai opcijas, kurÄm nav noklusÄjuma vÄrtÄ«bu. Tas ir viÅÅ”, kurÅ” nosaka, kas un kÄ tiks savÄkts. Å ajÄ gadÄ«jumÄ jÅ«s varat atseviŔķi konfigurÄt busybox, linux-kernel, uglibc, u-boot un barebox bootloader konfigurÄcijas, taÄu tÄs visas tiks piesaistÄ«tas mÄrÄ·a platei.
PÄc lejupielÄdÄtÄ arhÄ«va izpakoÅ”anas vai klonÄÅ”anas no git mÄs iegÅ«stam lietoÅ”anai gatavu buildroot. VairÄk par direktoriju struktÅ«ru varat izlasÄ«t rokasgrÄmatÄ, es pastÄstÄ«Å”u par svarÄ«gÄkajiem:
valde ā direktoriju ar failiem, kas raksturÄ«gi katrai platei. Tie var bÅ«t skripti sistÄmas attÄlu veidoÅ”anai (iso, sdcart, cpio un citi), pÄrklÄjuma direktoriju, kodola konfigurÄciju utt.
configs ā plates faktiskÄ defconfig. Defconfig ir nepilnÄ«ga plates konfigurÄcija. Tas saglabÄ tikai parametrus, kas atŔķiras no noklusÄjuma iestatÄ«jumiem
dl ā direktorijs ar lejupielÄdÄtajiem pirmkodiem/failiem montÄžai
produkcija/mÄrÄ·is ā iegÅ«tÄs OS samontÄtÄ failu sistÄma. PÄc tam no tÄ tiek izveidoti attÄli lejupielÄdei/instalÄÅ”anai
izvade/resursdators - resursdatora utilītas montĞai
izvadÄ«t/bÅ«vÄt - saliktas paketes
MontÄža tiek konfigurÄta, izmantojot KConfig. TÄda pati sistÄma tiek izmantota, lai izveidotu Linux kodolu. VisbiežÄk izmantoto komandu saraksts (izpildiet buildroot direktorijÄ):
- make menuconfig ā izsauciet bÅ«vÄÅ”anas konfigurÄciju. Varat arÄ« izmantot grafisko interfeisu (make nconfig, make xconfig, make gconfig)
- make linux-menuconfig - izsauciet kodola konfigurÄciju.
- padarÄ«t tÄ«ru ā notÄ«riet veidoÅ”anas rezultÄtus (visu, kas tiek saglabÄts izvadÄ)
- izveidot - izveidot sistÄmu. Tas nesaliek no jauna jau samontÄtos procesus.
- make defconfig_name ā pÄrslÄdziet konfigurÄciju uz konkrÄtu defconfig
- make list-defconfigs - parÄdÄ«t defconfig sarakstu
- izveidot avotu ā vienkÄrÅ”i lejupielÄdÄjiet instalÄcijas failus, neveidojot.
- sniegt palÄ«dzÄ«bu - uzskaitÄ«t iespÄjamÄs komandas
Svarīgas piezīmes un noderīgi padomi
Buildroot nepÄrbÅ«vÄ jau uzbÅ«vÄtas paketes! TÄpÄc var rasties situÄcija, kad nepiecieÅ”ama pilnÄ«ga montÄža.
Ar komandu var atjaunot atseviŔķu pakotni veikt pakotnes nosaukumu-rebuild. PiemÄram, varat atjaunot Linux kodolu:
make linux-rebuild
Buildroot saglabÄ jebkuras pakotnes stÄvokli, izveidojot .stamp failus direktorijÄ output/build/$packagename:
TÄpÄc jÅ«s varat atjaunot root-fs un attÄlus, nepÄrbÅ«vÄjot pakotnes:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
Noderīgi mainīgie
Buildroot ir mainÄ«go lielumu kopums, kas atvieglo konfigurÄÅ”anu
- $TOPDIR - buildroot direktorijs
- $BASEDIR ā OUTPUT direktorijs
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR ā resursdatora fs, staging fs, mÄrÄ·a fs bÅ«vdirektoriji.
- $BUILD_DIR ā direktorijs ar izpakotÄm un uzbÅ«vÄtÄm pakotnÄm
VizualizÄcija
Buildroot ir vizualizÄcijas lÄ«dzeklis. GalÄ«gajÄ sistÄmÄ varat izveidot atkarÄ«bas diagrammu, izveides laika grafiku un pakotÅu izmÄru grafiku. RezultÄti ir pdf failu veidÄ (varat izvÄlÄties no svn, png) izvades/grafikas direktorijÄ.
VizualizÄcijas komandu piemÄri:
make graph-depends
izveidot atkarību kokumake <pkg>-graph-depends
izveidojiet atkarÄ«bas koku konkrÄtai pakotneiBR2_GRAPH_OUT=png make graph-build
gabala veidoŔanas laiks ar PNG izvadimake graph-size
gabala paketes lielums
Noderīgi skripti
Buildroot direktorijÄ ir apakÅ”direktorijs utils ar noderÄ«giem skriptiem. PiemÄram, ir skripts, kas pÄrbauda pakotÅu aprakstu pareizÄ«bu. Tas var bÅ«t noderÄ«gi, pievienojot savas pakotnes (to izdarÄ«Å”u vÄlÄk). Fails utils/readme.txt satur Å”o skriptu aprakstu.
Veidosim akciju sadalījumu
Ir svarÄ«gi atcerÄties, ka visas darbÄ«bas tiek veiktas parasta lietotÄja, nevis root vÄrdÄ.
Visas komandas tiek izpildÄ«tas buildroot. Buildroot pakotnÄ jau ir iekļauta konfigurÄciju kopa daudzÄm izplatÄ«tÄkajÄm platÄm un virtualizÄcijai.
ApskatÄ«sim konfigurÄciju sarakstu:
PÄrslÄdzieties uz qemu_x86_64_defconfig config
make qemu_x86_64_defconfig
Un mÄs sÄkam montÄžu
make
BÅ«vniecÄ«ba ir veiksmÄ«gi pabeigta, skatiet rezultÄtus:
Buildroot ir apkopojis attÄlus, kurus varat palaist programmÄ Qemu un pÄrbaudÄ«t, vai tie darbojas.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
RezultÄts ir sistÄma, kas darbojas qemu:
Izveidojiet savu dÄļa konfigurÄciju
DÄļa failu pievienoÅ”ana
ApskatÄ«sim konfigurÄciju sarakstu:
SarakstÄ mÄs redzam pc_x86_64_efi_defconfig. MÄs izveidosim savu dÄli, kopÄjot to no konfigurÄcijas:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
NekavÄjoties izveidosim dÄļa direktoriju, kurÄ glabÄsim mÅ«su skriptus, rootfs-overlay un citus nepiecieÅ”amos failus:
mkdir board/my_x86_board
PÄrslÄdzieties uz Å”o defconfig:
make my_x86_board_defconfig
TÄdÄjÄdi tagad bÅ«vÄÅ”anas konfigurÄcija (kas tiek saglabÄta .config failÄ buildroot direktorija saknÄ) atbilst x86-64 mantotÄ(bios) sÄknÄÅ”anas mÄrÄ·a maŔīnai.
KopÄsim Linux kodola konfigurÄciju (noderÄ«ga vÄlÄk):
cp board/pc/linux.config board/my_x86_board/
BÅ«vÄÅ”anas parametru iestatÄ«Å”ana, izmantojot KConfig
SÄksim iestatÄ«Å”anu:
make menuconfig
Tiks atvÄrts KConfig logs. Ir iespÄjams konfigurÄt ar grafisko interfeisu (make nconfig, make xconfig, make gconfig):
MÄs ieejam pirmajÄ sadaÄ¼Ä MÄrÄ·a opcijas. Å eit jÅ«s varat izvÄlÄties mÄrÄ·a arhitektÅ«ru, kurai tiks veikta bÅ«vÄÅ”ana.
BÅ«vÄÅ”anas opcijas ā Å”eit ir pieejami dažÄdi bÅ«vÄÅ”anas iestatÄ«jumi. Varat norÄdÄ«t direktorijus ar avota kodiem, veidoÅ”anas pavedienu skaitu, spoguļus avota kodu lejupielÄdei un citus iestatÄ«jumus. AtstÄsim iestatÄ«jumus pÄc noklusÄjuma.
RÄ«ku Ä·Äde ā Å”eit ir konfigurÄti paÅ”i veidoÅ”anas rÄ«ki. Lasiet vairÄk par viÅu.
Toolchain tips ā izmantotÄs instrumentu Ä·Ädes veids. TÄ var bÅ«t rÄ«kÄ·Äde, kas iebÅ«vÄta buildroot vai ÄrÄja (varat norÄdÄ«t direktoriju ar jau izveidoto vai lejupielÄdes URL). DažÄdÄm arhitektÅ«rÄm ir papildu iespÄjas. PiemÄram, arm varat vienkÄrÅ”i atlasÄ«t ÄrÄjÄs rÄ«ku Ä·Ädes Linaro versiju.
C bibliotÄka ā C bibliotÄkas izvÄle, no kuras ir atkarÄ«ga visas sistÄmas darbÄ«ba. Parasti tiek izmantots glibc, kas atbalsta visas iespÄjamÄs funkcionalitÄtes. Bet tas var bÅ«t pÄrÄk liels iegultai sistÄmai, tÄpÄc bieži tiek izvÄlÄts uglibc vai musl. MÄs atlasÄ«sim glibc (tas bÅ«s nepiecieÅ”ams vÄlÄk, lai izmantotu systemd).
Kodola galvenes un pielÄgotas kodola galvenes ā jÄatbilst kodola versijai, kas bÅ«s samontÄtajÄ sistÄmÄ. Kodola galvenÄm varat arÄ« norÄdÄ«t ceļu uz tarball vai git repozitoriju.
GCC COMPILER VERSIONS ā atlasiet kompilatora versiju, kas tiks izmantota veidoÅ”anai
IespÄjot C++ atbalstu ā atlasiet, lai izveidotu ar atbalstu C++ bibliotÄkÄm sistÄmÄ. Tas mums noderÄs nÄkotnÄ.
Papildu gcc opcijas ā varat iestatÄ«t papildu kompilatora opcijas. PagaidÄm mums tas nav vajadzÄ«gs.
SistÄmas konfigurÄcija ļauj iestatÄ«t izveidotÄs sistÄmas turpmÄkos parametrus:
LielÄkÄ daļa punktu ir skaidri no virsraksta. PievÄrsÄ«sim uzmanÄ«bu Å”Ädiem punktiem:
CeļŔ uz lietotÄju tabulÄm - tabula ar lietotÄjiem, kas jÄizveido (
PiemÄra fails. LietotÄja lietotÄjs tiks izveidots ar paroli admin, automÄtiski gid/uid, /bin/sh apvalks, noklusÄjuma grupas lietotÄjs, grupas dalÄ«bnieka sakne, komentÄru Foo lietotÄjs
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
Saknes failu sistÄmas pÄrklÄjuma direktoriji - direktorijs, kas pÄrklÄts virs samontÄtÄ mÄrÄ·a-fs. Pievieno jaunus failus un aizstÄj esoÅ”os.
PielÄgoti skripti, kas jÄpalaiž pirms failu sistÄmas attÄlu izveides ā skripti, kas tiek izpildÄ«ti tieÅ”i pirms failu sistÄmas locÄ«Å”anas attÄlos. AtstÄsim skriptu pagaidÄm tukÅ”u.
Dosimies uz sadaļu Kodols
Å eit tiek iestatÄ«ti kodola iestatÄ«jumi. Pats kodols ir konfigurÄts, izmantojot make linux-menuconfig.
Kodola versiju var iestatÄ«t dažÄdos veidos: izvÄlieties no piedÄvÄtajiem, ievadiet versiju manuÄli, norÄdiet repozitoriju vai gatavu tarbolu.
Kodola konfigurÄcija ā ceļŔ uz kodola konfigurÄciju. Varat atlasÄ«t noklusÄjuma konfigurÄciju atlasÄ«tajai arhitektÅ«rai vai defocnfig no Linux. Linux avots satur defconfigu komplektu dažÄdÄm mÄrÄ·a sistÄmÄm. JÅ«s varat atrast to, kas jums nepiecieÅ”ams
SadaÄ¼Ä MÄrÄ·a pakotnes varat izvÄlÄties, kuras pakotnes tiks instalÄtas veidotajÄ sistÄmÄ. PagaidÄm atstÄsim to nemainÄ«gu. MÄs pievienosim savas pakas Å”im sarakstam vÄlÄk.
Failu sistÄmas attÄli ā to failu sistÄmas attÄlu saraksts, kas tiks apkopoti. Pievienojiet ISO attÄlu
Bootloaders - sÄknÄÅ”anas ielÄdÄtÄju izvÄle, ko savÄkt. IzvÄlÄsimies Isolinix
Systemd konfigurÄÅ”ana
Systemd kļūst par vienu no Linux pÄ«lÄriem kopÄ ar kodolu un glibc. TÄpÄc es pÄrvietoju tÄ iestatÄ«jumu uz atseviŔķu vienumu.
KonfigurÄts, izmantojot make menuconfig, pÄc tam MÄrÄ·a pakotnes ā SistÄmas rÄ«ki ā systemd. Å eit jÅ«s varat norÄdÄ«t, kuri systemd pakalpojumi tiks instalÄti un sÄkti, sistÄmai startÄjot.
SistÄmas konfigurÄcijas saglabÄÅ”ana
MÄs saglabÄjam Å”o konfigurÄciju, izmantojot KConfig.
PÄc tam saglabÄjiet mÅ«su defconfig:
make savedefconfig
Linux kodola konfigurÄcija
Linux kodola konfigurÄcija tiek izsaukta ar Å”Ädu komandu:
make linux-menuconfig
Pievienosim atbalstu Virtualbox videokartei
Pievienosim Virtualbox Guest integrÄcijas atbalstu
SaglabÄjiet un izejiet. SVARÄŖGI: konfigurÄcija tiks saglabÄta mapÄ output/build/linux-$version/config, bet ne board/my_x86_board/linux.config.
TÄdÄļ jums manuÄli jÄkopÄ konfigurÄcija uz krÄtuves vietu:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
PÄc tam mÄs veiksim pilnÄ«gu visas sistÄmas montÄžu. buildroot nepÄrbÅ«vÄ to, kas jau ir uzbÅ«vÄts, pÄrbÅ«vei ir manuÄli jÄnorÄda pakotnes. Lai netÄrÄtu laiku un nervus, mazu sistÄmu ir vieglÄk pilnÄ«bÄ atjaunot):
make clean;make
PÄc bÅ«vÄÅ”anas pabeigÅ”anas palaidiet VirtualBox (pÄrbaudÄ«ts versijÄs 5.2 un 6.0), kas tiek palaists no kompaktdiska. SistÄmas parametri:
Darbojas no samontÄtÄ iso:
Izmantoto materiÄlu saraksts
- Buildroot rokasgrÄmata
Avots: www.habr.com