Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Paraqitje

Në këtë seri artikujsh, unë dua të shikoj sistemin e ndërtimit të shpërndarjes buildroot dhe të ndaj përvojën time në përshtatjen e tij. Do të ketë përvojë praktike në krijimin e një OS të vogël me një ndërfaqe grafike dhe funksionalitet minimal.

Para së gjithash, nuk duhet të ngatërroni sistemin e ndërtimit dhe shpërndarjen. Buildroot mund të ndërtojë një sistem nga një grup paketash që i ofrohen. Buildroot është ndërtuar mbi skedarë make-files dhe për këtë arsye ka aftësi të mëdha personalizimi. Zëvendësoni një paketë me një version tjetër, shtoni paketën tuaj, ndryshoni rregullat për ndërtimin e një pakete, personalizoni sistemin e skedarëve pas instalimit të të gjitha paketave? buildroot mund t'i bëjë të gjitha këto.

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

Qëllimi i punës është të grumbullojë një komplet shpërndarës me shkarkim të drejtpërdrejtë, ndërfaqe icewm dhe shfletues. Platforma e synuar është virtualbox.

Pse të ndërtoni shpërndarjen tuaj? Shpesh nevojitet funksionalitet i kufizuar me burime të kufizuara. Edhe më shpesh në automatizim ju duhet të krijoni firmware. Përshtatja e një shpërndarjeje për qëllime të përgjithshme duke pastruar paketat e panevojshme dhe duke e kthyer atë në firmware kërkon më shumë punë sesa ndërtimi i një shpërndarjeje të re. Përdorimi i Gentoo ka gjithashtu kufizimet e veta.

Sistemi Buildroot është shumë i fuqishëm, por nuk do të bëjë asgjë për ju. Mund të aktivizojë dhe automatizojë vetëm procesin e montimit.

Sistemet alternative të ndërtimit (yocto, sistemi i ndërtimit të hapur dhe të tjera) nuk merren parasysh ose krahasohen.

Ku ta merrni dhe si të filloni

Faqja e internetit e projektit - buildroot.org. Këtu mund të shkarkoni versionin aktual dhe të lexoni manualin. Aty mund të kontaktoni komunitetin, ka një gjurmues të gabimeve, lista postare dhe një kanal irc.

Buildroot operon defconfigs për tabelën e synuar të ndërtimit. Defconfig është një skedar konfigurimi që ruan vetëm opsionet që nuk kanë vlera të paracaktuara. Është ai që përcakton se çfarë do të mblidhet dhe si. Në këtë rast, ju mund të konfiguroni veçmas konfigurimet e ngarkuesve busybox, linux-kernel, uglibc, u-boot dhe barebox, por të gjitha ato do të lidhen me tabelën e synuar.
Pas shpaketimit të arkivit të shkarkuar ose klonimit nga git, marrim një buildroot të gatshëm për përdorim. Mund të lexoni më shumë rreth strukturës së drejtorisë në manual; unë do t'ju tregoj për më të rëndësishmet:

Bordi — një direktori me skedarë specifikë për çdo bord. Këto mund të jenë skriptet për formimin e imazheve të sistemit (iso, sdcart, cpio dhe të tjera), një direktori mbivendosje, konfigurim kernel, etj.
konfiguron — konfigurimi aktual i bordit. Defconfig është një konfigurim jo i plotë i bordit. Ai ruan vetëm parametra që ndryshojnë nga cilësimet e paracaktuara
dl — drejtori me kodet burimore të shkarkuara/skedarët për montim
output/objektiv - sistemi i skedarëve të mbledhur të sistemit operativ që rezulton. Më pas, prej tij krijohen imazhe për shkarkim/instalim
output/host - shërbimet pritëse për montim
dalje/ndërtim - pako të montuara

Asambleja konfigurohet nëpërmjet KConfig. I njëjti sistem përdoret për të ndërtuar kernelin Linux. Lista e komandave më të përdorura (ekzekutoni në direktorinë buildroot):

  • bëni menuconfig - thirrni konfigurimin e ndërtimit. Ju gjithashtu mund të përdorni ndërfaqen grafike (bëni nconfig, bëni xconfig, bëni gconfig)
  • bëni linux-menuconfig - thirrni konfigurimin e kernelit.
  • bëj pastër - pastro rezultatet e ndërtimit (gjithçka e ruajtur në dalje)
  • bëj - ndërto një sistem. Kjo nuk ribashkon proceset tashmë të montuara.
  • make defconfig_name - kaloni konfigurimin në një defconfig specifik
  • make list-defconfigs - shfaq një listë të defconfigs
  • bëni burimin - thjesht shkarkoni skedarët e instalimit, pa ndërtuar.
  • bëni ndihmë - listoni komandat e mundshme

Shënime të rëndësishme dhe këshilla të dobishme

Buildroot nuk rindërton paketat që janë ndërtuar tashmë! Prandaj, mund të lindë një situatë kur kërkohet një rimontim i plotë.

Ju mund të rindërtoni një paketë të veçantë me komandën bëj rindërtimin e emrit të paketës. Për shembull, mund të rindërtoni kernelin Linux:

make linux-rebuild

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

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Prandaj, mund të rindërtoni root-fs dhe imazhe pa rindërtuar paketa:

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

Variabla të dobishëm

buildroot ka një grup variablash për konfigurim të lehtë

  • $TOPDIR - direktoria buildroot
  • $BASEDIR - drejtoria OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — fs pritës, vënie në skenë fs, synoni direktoritë e ndërtimit të fs.
  • $BUILD_DIR - drejtori me paketa të papaketuara dhe të ndërtuara

Vizualizimi

buildroot ka një veçori vizualizimi. Mund të ndërtoni një diagram varësie, një grafik të kohës së ndërtimit dhe një grafik të madhësive të paketave në sistemin përfundimtar. Rezultatet janë në formën e skedarëve pdf (mund të zgjidhni nga svn, png) në direktorinë output/graph.

Shembuj të komandave të vizualizimit:

  • make graph-depends ndërtoni pemën e varësisë
  • make <pkg>-graph-depends ndërtoni një pemë varësie për një paketë specifike
  • BR2_GRAPH_OUT=png make graph-build Koha e ndërtimit të komplotit me dalje PNG
  • make graph-size madhësia e paketës së komplotit

Skriptet e dobishme

Ekziston një nëndrejtori në direktorinë buildroot Utils me skriptet e dobishme. Për shembull, ekziston një skript që kontrollon korrektësinë e përshkrimeve të paketës. Kjo mund të jetë e dobishme kur shtoni paketat tuaja (do ta bëj këtë më vonë). Skedari utils/readme.txt përmban një përshkrim të këtyre skripteve.

Le të ndërtojmë një shpërndarje të aksioneve

Është e rëndësishme të mbani mend se të gjitha operacionet kryhen në emër të një përdoruesi të rregullt, jo në emër të root.
Të gjitha komandat ekzekutohen në buildroot. Paketa buildroot tashmë përfshin një grup konfigurimesh për shumë borde të zakonshme dhe virtualizim.

Le të shohim listën e konfigurimeve:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Kalo te konfigurimi qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Dhe ne fillojmë asamblenë

make

Ndërtimi përfundon me sukses, shikoni rezultatet:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Buildroot ka përpiluar imazhe që mund t'i ekzekutoni në Qemu dhe të verifikoni që ato funksionojnë.

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

Rezultati është një sistem që funksionon në qemu:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Krijimi i konfigurimit tuaj të bordit

Shtimi i skedarëve të bordit

Le të shohim listën e konfigurimeve:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

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

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Le të krijojmë menjëherë një drejtori bordi për të ruajtur skriptet tona, rootfs-overlay dhe skedarët e tjerë të nevojshëm:

mkdir board/my_x86_board

Kalo në këtë defconfig:

make my_x86_board_defconfig

Kështu, tani konfigurimi i ndërtimit (i ruajtur në .config në rrënjën e direktoriumit buildroot) korrespondon me makinën e synuar të nisjes së trashëgimisë (bios) x86-64.

Le të kopjojmë konfigurimin e kernelit linux (i dobishëm më vonë):

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

Vendosja e parametrave të ndërtimit nëpërmjet KConfig

Le të fillojmë konfigurimin:

make menuconfig 

Dritarja KConfig do të hapet. Është e mundur të konfiguroni me një ndërfaqe grafike (bëni nconfig, bëni xconfig, bëni gconfig):

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Hyjmë në seksionin e parë Opsionet e synuara. Këtu mund të zgjidhni arkitekturën e synuar për të cilën do të kryhet ndërtimi.

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Opsionet e ndërtimit - këtu ka cilësime të ndryshme ndërtimi. Ju mund të specifikoni drejtoritë me kodet burimore, numrin e temave të ndërtimit, pasqyrat për shkarkimin e kodeve burimore dhe cilësime të tjera. Le t'i lëmë cilësimet në parazgjedhje.

Toolchain – Veglat e ndërtimit janë konfiguruar këtu. Lexoni më shumë rreth tij.

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Lloji i zinxhirit të veglave - lloji i zinxhirit të veglave të përdorura. Ky mund të jetë një zinxhir mjetesh i integruar në buildroot ose një i jashtëm (mund të specifikoni direktorinë me atë të ndërtuar tashmë ose url-në për shkarkim). Ka mundësi shtesë për arkitektura të ndryshme. Për shembull, për krahun, thjesht mund të zgjidhni versionin Linaro të zinxhirit të mjeteve të jashtme.

Biblioteka C – zgjedhja e bibliotekës C. Funksionimi i të gjithë sistemit varet nga kjo. Në mënyrë tipike, përdoret glibc, i cili mbështet të gjithë funksionalitetin e mundshëm. Por mund të jetë shumë i madh për një sistem të integruar, kështu që shpesh zgjidhen uglibc ose musl. Ne do të zgjedhim glibc (kjo do të kërkohet më vonë për të përdorur systemd).

Seritë e titujve të kernelit dhe titujve të personalizuar të kernelit – duhet të përputhen me versionin e kernelit që do të jetë në sistemin e montuar. Për kokat e kernelit, mund të specifikoni gjithashtu shtegun për në depo tarball ose git.

VERSIONET E KOMPILERIT GCC – zgjidhni versionin e përpiluesit që do të përdoret për ndërtim
Aktivizo mbështetjen e C++ – zgjidhni për të ndërtuar me mbështetje për bibliotekat C++ në sistem. Kjo do të jetë e dobishme për ne në të ardhmen.

Opsione shtesë gcc – mund të vendosni opsione shtesë të përpiluesit. Nuk na duhet për momentin.

Konfigurimi i sistemit ju lejon të vendosni parametrat e ardhshëm të sistemit të krijuar:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Shumica e pikëve janë të qarta nga titulli. Le t'i kushtojmë vëmendje pikave të mëposhtme:
Rruga drejt tabelave të përdoruesve - tabela me përdoruesit që do të krijohen (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Shembull skedar. Përdoruesi i përdoruesit do të krijohet me fjalëkalimin admin, automatikisht gid/uid, guaskën /bin/sh, përdoruesin e parazgjedhur të grupit, rrënjën e anëtarit të grupit, përdoruesin e komentit Foo

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

Drejtoritë e mbivendosjes së sistemit të skedarëve rrënjë - drejtoria e mbivendosur në krye të target-fs të montuar. Shton skedarë të rinj dhe zëvendëson ato ekzistuese.

Skriptet e personalizuara për të ekzekutuar përpara krijimit të imazheve të sistemit të skedarëve - Skriptet ekzekutohen menjëherë përpara se të palosni sistemin e skedarëve në imazhe. Le ta lëmë skenarin bosh për momentin.

Le të shkojmë në seksionin Kernel

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Cilësimet e kernelit janë vendosur këtu. Vetë kerneli është konfiguruar nëpërmjet make linux-menuconfig.
Mund ta vendosni versionin e kernelit në mënyra të ndryshme: zgjidhni nga ato të ofruara, futni versionin manualisht, specifikoni një depo ose një tarball të gatshëm.

Konfigurimi i kernelit - rruga për në konfigurimin e kernelit. Ju mund të zgjidhni konfigurimin e paracaktuar për arkitekturën e zgjedhur ose defocnfig nga Linux. Burimi Linux përmban një grup defconfigs për sisteme të ndryshme të synuara. Ju mund të gjeni atë që ju nevojitet duke parë drejtpërdrejt burimet këtu. Për shembull, për një dërrasë të zezë kockash beagle mundeni zgjidhni konfigurimin.

Seksioni i paketave të synuara ju lejon të zgjidhni se cilat paketa do të instalohen në sistemin që po ndërtohet. Le ta lëmë të pandryshuar për momentin. Ne do t'i shtojmë paketat tona në këtë listë më vonë.
Imazhet e sistemit të skedarëve - një listë e imazheve të sistemit të skedarëve që do të mblidhen. Shtoni një imazh iso

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Bootloaders - përzgjedhja e ngarkuesve për të mbledhur. Le të zgjedhim isolinix

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Konfigurimi i Sistemit

Systemd po bëhet një nga shtyllat e Linux, së bashku me kernel dhe glibc. Prandaj, e zhvendosa cilësimin e tij në një artikull të veçantë.

Konfigurohet nëpërmjet menuconfig make, pastaj Target paketat → Veglat e sistemit → systemd. Këtu mund të specifikoni se cilat shërbime systemd do të instalohen dhe do të fillojnë kur sistemi të fillojë.

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Ruajtja e konfigurimit të sistemit

Ne e ruajmë këtë konfigurim nëpërmjet KConfig.

Pastaj ruani defconfig-un tonë:

make savedefconfig

Konfigurimi i kernel Linux

Konfigurimi i kernelit Linux thirret me komandën e mëposhtme:

make linux-menuconfig

Le të shtojmë mbështetje për kartën video Virtualbox

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Le të shtojmë mbështetjen e integrimit të Virtualbox Guest

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Ruaje dhe dil. 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. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Prandaj, duhet të kopjoni manualisht konfigurimin në një vend ruajtjeje:

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

Pas së cilës do të kryejmë një rimontim të plotë të të gjithë sistemit. buildroot nuk rindërton atë që është ndërtuar tashmë, duhet të specifikoni manualisht paketat për rindërtim. Për të mos humbur kohë dhe nerva, është më e lehtë të rindërtoni plotësisht një sistem të vogël):

make clean;make

Pas përfundimit të ndërtimit, nisni VirtualBox (e testuar në versionet 5.2 dhe 6.0) duke nisur nga CD. Parametrat e sistemit:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Duke u nisur nga iso e mbledhur:

Buildroot - pjesa 1. Informacion i përgjithshëm, montimi i një sistemi minimal, konfigurimi përmes menysë

Lista e materialeve të përdorura

  1. Manuali i Buildroot

Burimi: www.habr.com

Shto një koment