Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Hyrje

Në këtë seri artikujsh, do të shqyrtoj sistemin e ndërtimit të distribucionit Buildroot dhe do të ndaj përvojën time në personalizimin e tij. Këtu do të jetë një përvojë praktike për krijimin e një OS të vogël me ndërfaqe grafike dhe funksionalitet minimal.

Së pari, nuk duhet të ngatërrohet sistemi i ndërtimit me distribucionin. Buildroot mund të ndihmojë në ndërtimin e një sistemi nga një set paketash që i janë propozuar. Buildroot është ndërtuar mbi skedat make dhe për këtë arsye ka mundësi të mëdha për personalizim. Të zëvendësosh një paketë me një version tjetër, të shtosh paketën tuaj, të ndryshosh rregullat e ndërtimit të paketës, të personalizosh sistemin e skedarëve pas instalimit të të gjitha pakove? Të gjitha këto mundësi i ofron Buildroot.

Në Rusi, Buildroot përdoret, por në mendimin tim, ka pak informacion në gjuhën ruse për fillestarët.

Qëllimi i këtij projekti është të ndërtohet një distribucion me ngarkim të drejtpërdrejtë, ndërfaqe icewm dhe një shfletues. Platforma e synuar është VirtualBox.

Pse duhet të ndërtojmë distribucionin tonë? Shpesh, nevojitet një funksionalitet i kufizuar me burime të kufizuara. Edhe më shpesh, në automatizim, është e nevojshme të krijohen firmware. Të përshtatsh një distribucion të përgjithshëm, duke pastruar paketat e tepërta dhe duke e transformuar atë në firmware, është një rrugë më e lodhshme sesa të ndërtohet një distribucion i ri. Përdorimi i Gentoo gjithashtu ka kufizimet e tij.

Buildroot është një sistem shumë i fuqishëm, por ai nuk do të bëjë asgjë për ju. Ai mund vetëm të ofrojë mundësi dhe të automatizojë procesin e ndërtimit.

Sistemet alternative të ndërtimit (Yocto, Open Build System dhe të tjera) nuk shqyrtohen dhe nuk krahasohen.

Ku të gjej dhe si të filloj

Faqja e projektit — buildroot.org. Këtu mund të shkarkoni versionin aktual dhe të lexoni manualin. Aty gjithashtu mund të kontaktoni me komunitetin, ka bug tracker, lista të postave dhe një kanal IRC.

Buildroot operon me defconfig për platinë e destinacionit të ndërtimit. Defconfig është një skedar konfigurimi, që përmban vetëm opsione pa vlera të paracaktuara. Ai përcakton se çfarë dhe si do të ndërtohet. Në të njëjtën kohë, mund të konfigurohen ndaras konfigurimet e busybox, linux-kernel, uClibc, bootloader-ave u-boot dhe barebox, por të gjitha do të jenë të lidhura me platinë e synuar.
Pas nxjerrjes së arkivës së shkarkuar ose klonimit nga git, marrim një Buildroot të gatshëm për përdorim. Mund të lexoni më shumë për strukturën e katalogëve në manual, do të përmend disa nga më të rëndësishmit:

board — katalogu me skedarët specifik për çdo bord. Këto mund të jenë skriptet për formimin e imazheve të sistemit (iso, sdcart, cpio etj.), katalogu overlay, konfigurimi i bërthamave dhe të tjera.
configs — specifikimi i defconfig të bordit. Defconfig — është një konfigurim i paplotë i bordit. Ajo përmban vetëm parametra që i përkasin cilësimeve ndryshe nga ato padrão.
dl — katalogu me kodet e rëna/ skedarë për ndërtim.
output/target — sistemi i skedarëve të ndërtuar të OS. Në vazhdim, prej saj krijohen imazhet për ngarkim/instalimin.
output/host — utilitarët e host për ndërtim.
output/build — paketat e ndërtuara.

Konfigurimi i ndërtimit realizohet përmes KConfig. Ky sistem përdoret gjithashtu për ndërtimin e bërthamës linux. Lista e komandave më të përdorura (shkruani në katalogun buildroot):

  • make menuconfig — aktivizo konfigurimin e ndërtimit. Gjithashtu mund të përdorni ndërfaqen grafike (make nconfig, make xconfig, make gconfig).
  • make linux-menuconfig — aktivizo konfigurimin e bërthamës.
  • make clean — pastroni rezultatet e ndërtimit (gjithçka që ruhet në output).
  • make — ndihmon ndërtimin e sistemit. Gjatë kësaj procedure, paketat e ndërtuara më parë nuk rindërtohen.
  • make defconfig_name — kaloni në një defconfig të përcaktuar.
  • make list-defconfigs — shfaqni listën e defconfig-eve.
  • make source — shkarkoni vetëm skedarët instalues, pa ndërtim.
  • make help — tregoni listën e komandave të mundshme.

Vërejtje dhe këshilla të rëndësishme.

Buildroot nuk rindërton paketat që janë ndërtuar më parë! Prandaj, mund të ndodhi situata ku kërkohet një rindërtim i plotë.

Është e mundur të rindërtohet një paketë të veçantë me komandën. make packagename-rebuild. Për shembull, mund të rindërtohet bërthama linux:

make linux-rebuild.

Buildroot ruan gjendjen e çdo pakete duke krijuar skedarët .stamp në katalogun output/build/$packagename:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Prandaj, është e mundur të rindërtoni root-fs dhe imazhet pa rindërtimin e paketave:

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

Variablat e dobishme.

Në buildroot ka një grup variablash për konfigurimin e lehtë.

  • $TOPDIR — katalogu kryesor buildroot.
  • $BASEDIR — katalogu OUTPUT.
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — katalogët për ndërtimin e host fs, staging fs, target fs.
  • $BUILD_DIR — katalogu me paketat e shpërndara dhe të ndërtuara.

Vizualizimi

Në buildroot ka mundësinë e vizualizimit. Mund të krijoni një diagram të varësive, një grafik të kohës së ndërtimit, një grafik të madhësisë së paketave në sistemin përfundimtar. Rezultatet janë në formë skedarësh pdf (përzgjedhje e svn, png) në katalogun output/graph.

Shembuj të komandave për vizualizim:

  • krijo graf-depends ndërto pemën e varësive
  • krijo <pkg>-graf-depends ndërto pemën e varësive për paketën e caktuar
  • BR2_GRAPH_OUT=png krijo graf-build ndërto grafikun e kohës së ndërtimit me dalje në PNG
  • krijo graf-size ndërto grafikun e madhësisë së pakove

Skripte të dobishme

Në katalogun buildroot ka një podkatalg utils me skripte të dobishme. Për shembull, aty ka një skript që kontrollon saktësinë e përshkrimit të pakove. Kjo mund të jetë e dobishme kur shtoni paketat tuaja (do ta bëj më vonë). Në skedarin utils/readme.txt ka përshkrim të këtyre skripteve.

Do të ndërtojmë një distribucion bazë

Është e rëndësishme të kujtohet se të gjitha operacionet kryhen nga një përdorues i zakonshëm, jo root.
Të gjitha komandat ekzekutohen në rrënjën e buildroot. Në dorëzim buildroot tashmë ka një grup konfigurimesh për shumë karta të zakonshme dhe virtualizim.

Shikojmë listën e konfigurimeve:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Kalojmë në konfigurimin qemu_x86_64_defconfig

krijo qemu_x86_64_defconfig

Dhe fillojmë ndërtimin

make

Ndërtimi mbaron me sukses, shikojmë rezultatet:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Buildroot nd Build images që mund të ekzekutohen në Qemu dhe të sigurohemi se ato funksionojnë.

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

Rezultati — sistemi i ekzekutuar në qemu:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Krijimi i konfigurimit të kartës sime

Shtimi i skedave të kartës

Shikojmë listën e konfigurimeve:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Në listë shohim pc_x86_64_efi_defconfig. Ne do të krijojmë kartën tonë, duke e kopjuar atë nga konfigurimi:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Menjëherë do të krijojmë një katalog të kartës për ruajtjen e skripteve tona, rootfs-overlay dhe skedarëve të tjerë të nevojshëm:

mkdir board/my_x86_board

Kalojmë në këtë defconfig:

krijo my_x86_board_defconfig

Kështu, tani konfigurimi i ndërtimit (ruhet në .config në rrënjën e katalogut buildroot) përputhet me makinën e synuar x86-64 legacy(bios) boot.

Do të kopjojmë konfigurimin linux-kernel (do të na nevojitet më vonë):

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

Konfigurimi i parametrave të ndërtimit përmes KConfig

Nisim konfigurimin:

krijo menuconfig 

Do të hapet një dritare KConfig. Ka mundësi të konfigurohet me një ndërfaqe grafike (krijo nconfig, krijo xconfig, krijo gconfig):

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Shkruajmë në seksionin e parë Target Options. Këtu mund të zgjidhni arkitekturën e synuar për të cilën do të bëhet ndërtimi.

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Opcione ndërtimi — këtu ka konfigurime të ndryshme të ndërtimit. Mund të përcaktoni katalogët me kodin burimor, numrin e proceseve të ndërtimit, pasqyrat për shkarkimin e kodeve burimore dhe konfigurime të tjera. Do t’i lëmë cilësimet siç janë.

Toolchain – këtu konfigurohet angazhimi i vetë ndërtimit. Më shumë për këtë më vonë.

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Lloji i toolchain - lloji i toolchain-it të përdorur. Mund të jetë e integruar në buildroot ose një toolchain i jashtëm (mund të specifikoni katalogun me një toolchain të ndërtuar tashmë ose url për shkarkim). Për arkitekturë të ndryshme ka opsione të tjera. Për shembull, për arm mund të zgjidhni thjesht versionin e toolchain-it të jashtëm Linaro.

Biblioteka C - përzgjedhja e bibliotekës C. Kjo ndikon në funksionimin e tërë sistemit. Zakonisht përdoret glibc, e cila mbështet të gjitha funksionalitetet e mundshme. Por ajo mund të jetë shumë e madhe për një sistem të integruar, kështu që shpesh zgjidhen uglibc ose musl. Ne do të zgjedhim glibc (kjo do të nevojitet për përdorimin e systemd).

Krenat e Kernelit dhe seritë e Krenave të Personalizuara - duhet të përputhen me versionin e kernelit që do të jetë në sistemin e ndërtuar. Për krenat e kernelit mund të specifikoni gjithashtu rrugën për tarball ose një repo git.

VERSIONET E KOMPILATORIT GCC - përzgjedhja e versionit të kompajlerit që do të përdoret për ndërtim.
Aktivizo mbështetje për C++ - do të zgjedhim për ndërtim me mbështetje për bibliotekat C++ në sistem. Kjo do të na nevojitet më pas.

Opsionet shtesë të gcc - mund të specifikoni opsione të tjera për kompajlerin. Në këtë moment nuk kemi nevojë për to.

Konfigurimi i sistemit lejon të përcaktoni parametrat e ardhshëm të sistemit të krijuar:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Shumica e pikave janë të qarta nga emri. Le të kushtojmë vëmendje për piketat e mëposhtme:
Rruga për tabelat e përdoruesve - tabela me përdoruesit e krijuar (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Shembulli i skedarit. Do të krijohet një përdorues user me fjalëkalimin admin, automatikisht gid/uid, shelly /bin/sh, grupi default user, anëtar i grupit root, komenti 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

Direktoritë e mbështjelljes së sistemit të skedarëve të Root - katalogu, që mbulohet mbi target-fs të ndërtuar. Shton skedarë të rinj dhe zëvendëson ato ekzistues.

Skripte të personalizuara për t'u ekzekutuar para krijimit të imazheve të sistemit të skedarëve - Skripte, që ekzekutohen drejtpërdrejt para paketimit të sistemit të skedarëve në imazhe. Ne do ta lëmë skriptin aktualisht bosh.

Të kalojmë në seksionin Kernel

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Këtu përcaktohen cilësimet e kernelit. Kerneli konfigurrohet përmes make linux-menuconfig.
Versioni i kernelit mund të përcaktohet në shumë mënyra: duke zgjedhur nga të ofruara, duke shkruar versionin manualisht, duke specifikuar një repo ose një tarball të gatshëm.

Konfigurimi i kernelit - rruga për config-un e kernelit. Mund të zgjidhni konfigurimin default për arkitekturën e zgjedhur ose defconfig nga Linux. Në burimet e Linux ka një grup defconfig’esh për sisteme të ndryshme të synuara. Mund të gjeni atë që ju nevojitet, duke parë drejtpërdrejt në burimet këtu. Për shembull, për bordin beagle bone black mund të zgjidhni konfigurimin.

Sekcioni Target packages lejon të zgjidhni se cilat paketa do të instalohen në sistemin e ndërtuar. Për momentin do ta lëmë pa ndryshime. Më vonë do të shtojmë paketat tona në këtë listë.
Imazhet e sistemit files – lista e imazheve të sistemeve të skedarëve që do të mblidhen. Do të shtojmë imazhin iso

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Bootloaders – zgjedhja e bootloader-ëve që do të mblidhen. Do të zgjedhim isolinix

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Konfigurimi i Systemd

Systemd bëhet një nga shtyllat e linux-it, përveç kernel dhe glibc. Prandaj e kam nxjerrë konfigurimin e tij në një pikë të veçantë.

Konfigurohet nëpërmjet make menuconfig, më pas Target packages → System tools → systemd. Këtu mund të specifikoni se cilat shërbime systemd do të instalohen dhe nisen kur të fillojë sistemi.

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Ruajtja e konfiguracionit të sistemit

E ruajmë këtë konfigurim përmes KConfig.

Pas kësaj do ta ruajmë defconfig-in tonë:

make savedefconfig

Konfigurimi i kernel-it Linux

Konfigurimi i kernel-it linux thirret me komandën e mëposhtme:

make linux-menuconfig

Do të shtojmë mbështetje për kartën grafike Virtualbox

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Do të shtojmë mbështetje për Virtualbox Guest integration

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

E ruajmë dhe dalim. E rëndësishme: konfigurimi do të ruhet në output/build/linux-$version/config, por jo në board/my_x86_board/linux.config

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Prandaj duhet ta kopjonim manualisht konfigurimin në vendin e ruajtjes:

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

Pas kësaj do të kryejmë një rindërtim të plotë të gjithë sistemit. Duke qenë se buildroot nuk rindërton atë që është ndërtuar tashmë, duhet specifikuar manualisht paketa për rindërtim. Për të mos humbur kohë dhe nerva, një sistem të vogël është më e lehtë ta rindërtoni tërësisht):

make clean; make

Pas përfundimit të ndërtimit, nisi VirtualBox (testuar në versionin 5.2 dhe 6.0) me ngarkesë nga cd-disk. Parametrat e sistemit:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Nisja nga iso e ndërtuar:

Buildroot — pjesa 1. Informacione të përgjithshme, ndërtimi i një sistemi minimal, konfigurimi përmes menusë

Lista e materialeve të përdorura

  1. Buildroot manual

Burimi: habr.com

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster