Innledning
I denne serien med artikler Þnsker jeg Ä se pÄ byggesystemet for byggerotdistribusjon og dele min erfaring med Ä tilpasse det. Det vil vÊre praktisk erfaring med Ä lage et lite OS med et grafisk grensesnitt og minimal funksjonalitet.
FÞrst og fremst bÞr du ikke forveksle byggesystemet og distribusjonen. Buildroot kan bygge et system fra et sett med pakker som tilbys til det. Buildroot er bygget pÄ makefiler og har derfor enorme tilpasningsmuligheter. Erstatte en pakke med en annen versjon, legge til din egen pakke, endre reglene for Ä bygge en pakke, tilpasse filsystemet etter Ä ha installert alle pakkene? buildroot kan gjÞre alt dette.
I Russland brukes buildroot, men etter min mening er det lite russisksprÄklig informasjon for nybegynnere.
MÄlet med arbeidet er Ä sette sammen et distribusjonssett med live nedlasting, icewm-grensesnitt og nettleser. MÄlplattformen er virtualbox.
Hvorfor bygge din egen distribusjon? Ofte er det nÞdvendig med begrenset funksjonalitet med begrensede ressurser. Enda oftere i automatisering mÄ du lage firmware. à tilpasse en generell distribusjon ved Ä rense ut unÞdvendige pakker og gjÞre den om til fastvare er mer arbeidskrevende enn Ä bygge en ny distribusjon. à bruke Gentoo har ogsÄ sine begrensninger.
Buildroot-systemet er veldig kraftig, men det vil ikke gjĂžre noe for deg. Den kan bare aktivere og automatisere monteringsprosessen.
Alternative byggesystemer (yocto, Äpent byggesystem og andre) vurderes eller sammenlignes ikke.
Hvor du fÄr tak i det og hvordan du starter
Prosjektnettsted - . Her kan du laste ned gjeldende versjon og lese manualen. Der kan du kontakte fellesskapet, det er en feilsporer, e-postlister og en irc-kanal.
Buildroot driver defconfigs for mÄltavlen til bygningen. Defconfig er en konfigurasjonsfil som bare lagrer alternativer som ikke har standardverdier. Det er han som bestemmer hva som skal samles inn og hvordan. I dette tilfellet kan du separat konfigurere konfigurasjonene til busybox, linux-kernel, uglibc, u-boot og barebox bootloaders, men alle vil vÊre knyttet til mÄlkortet.
Etter Ä ha pakket ut det nedlastede arkivet eller kloning fra git, fÄr vi en klar til bruk byggerot. Du kan lese mer om katalogstrukturen i manualen; jeg skal fortelle deg om de viktigste:
borde â en katalog med filer som er spesifikke for hvert brett. Dette kan vĂŠre skript for Ă„ lage systembilder (iso, sdcart, cpio og andre), en overleggskatalog, kjernekonfigurasjon, etc.
configs â selve defconfig av brettet. Defconfig er en ufullstendig kortkonfigurasjon. Den lagrer kun parametere som avviker fra standardinnstillingene
dl â katalog med nedlastede kildekoder/filer for montering
utgang/mĂ„l â det sammensatte filsystemet til det resulterende operativsystemet. Deretter lages bilder fra den for nedlasting/installasjon
utgang/vert - vertsverktĂžy for montering
utgang/bygg - sammensatte pakker
Sammenstillingen konfigureres via KConfig. Det samme systemet brukes til Ă„ bygge Linux-kjernen. Liste over de mest brukte kommandoene (utfĂžr i buildroot-katalogen):
- lage menuconfig - kall opp byggekonfigurasjonen. Du kan ogsÄ bruke det grafiske grensesnittet (lag nconfig, lag xconfig, lag gconfig)
- lag linux-menuconfig - kall opp kjernekonfigurasjonen.
- gjĂžr rent - rengjĂžr byggeresultatene (alt lagret i utdata)
- lage - bygge et system. Dette setter ikke sammen allerede sammensatte prosesser.
- make defconfig_name - bytt konfigurasjonen til en spesifikk defconfig
- make list-defconfigs - vis en liste over defconfigs
- lag kilde - bare last ned installasjonsfilene, uten Ă„ bygge.
- lag hjelp - liste opp mulige kommandoer
Viktige merknader og nyttige tips
Buildroot bygger ikke om pakker som allerede er bygget! Derfor kan det oppstÄ en situasjon hvor en fullstendig remontering er nÞdvendig.
Du kan gjenoppbygge en egen pakke med kommandoen gjĂžre pakkenavn-rebuild. For eksempel kan du gjenoppbygge Linux-kjernen:
make linux-rebuildBuildroot lagrer tilstanden til enhver pakke ved Ă„ lage .stamp-filer i katalogen output/build/$packagename:

Derfor kan du gjenoppbygge root-fs og bilder uten Ă„ gjenoppbygge pakker:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; makeNyttige variabler
buildroot har et sett med variabler for enkel konfigurasjon
- $TOPDIR - byggerotkatalog
- $BASEDIR - OUTPUT-katalog
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR â vert fs, iscenesettelse fs, mĂ„l fs byggekataloger.
- $BUILD_DIR - katalog med utpakkede og bygde pakker
Visualisering
buildroot har en visualiseringsfunksjon. Du kan bygge et avhengighetsdiagram, en byggetidsgraf og en graf over pakkestĂžrrelser i det endelige systemet. Resultatene er i form av pdf-filer (du kan velge fra svn,png) i output/graph-katalogen.
Eksempler pÄ visualiseringskommandoer:
make graph-dependsbygge avhengighetstremake <pkg>-graph-dependsbygge et avhengighetstre for en bestemt pakkeBR2_GRAPH_OUT=png make graph-buildplot byggetid med PNG-utdatamake graph-sizeplott pakkestĂžrrelse
Nyttige skript
Det er en underkatalog i byggerotkatalogen utils med nyttige skript. For eksempel er det et skript som kontrollerer at pakkebeskrivelsene er korrekte. Dette kan vÊre nyttig nÄr du legger til dine egne pakker (jeg skal gjÞre dette senere). Filen utils/readme.txt inneholder en beskrivelse av disse skriptene.
La oss bygge en aksjefordeling
Det er viktig Ä huske at alle operasjoner utfÞres pÄ vegne av en vanlig bruker, ikke root.
Alle kommandoer utfĂžres i buildroten. Byggrotpakken inkluderer allerede et sett med konfigurasjoner for mange vanlige brett og virtualisering.
La oss se pÄ listen over konfigurasjoner:

Bytt til qemu_x86_64_defconfig-konfigurasjonen
make qemu_x86_64_defconfigOg vi starter monteringen
makeByggingen fullfÞres vellykket, se pÄ resultatene:
![]()
Buildroot har kompilert bilder som du kan kjĂžre i Qemu og verifisere at de fungerer.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -SResultatet er et system som kjĂžrer i qemu:

Lag din egen styrekonfigurasjon
Legge til tavlefiler
La oss se pÄ listen over konfigurasjoner:

I listen ser vi pc_x86_64_efi_defconfig. Vi vil lage vÄrt eget styre ved Ä kopiere det fra konfigurasjonen:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfigLa oss umiddelbart lage en brettkatalog for Ä lagre skriptene vÄre, rootfs-overlegget og andre nÞdvendige filer:
mkdir board/my_x86_boardBytt til denne defconfig:
make my_x86_board_defconfigDermed tilsvarer nÄ build-konfigurasjonen (lagret i .config i roten til buildroot-katalogen) den gamle x86-64 (bios) oppstartsmÄlmaskinen.
La oss kopiere linux-kjernekonfigurasjonen (nyttig senere):
cp board/pc/linux.config board/my_x86_board/Angi byggeparametere via KConfig
La oss starte oppsettet:
make menuconfig KConfig-vinduet Äpnes. Det er mulig Ä konfigurere med et grafisk grensesnitt (make nconfig, make xconfig, make gconfig):

Vi gÄr inn i den fÞrste delen MÄlalternativer. Her kan du velge mÄlarkitekturen som byggingen skal utfÞres for.

Byggealternativer - det er forskjellige byggeinnstillinger her. Du kan spesifisere kataloger med kildekoder, antall byggetrÄder, speil for nedlasting av kildekoder og andre innstillinger. La oss la innstillingene stÄ som standard.
VerktĂžykjede â selve byggeverktĂžyene konfigureres her. Les mer om ham.

VerktĂžykjedetype â type verktĂžykjede som brukes. Dette kan vĂŠre en verktĂžykjede innebygd i buildroot eller en ekstern (du kan spesifisere katalogen med den allerede bygde eller url for nedlasting). Det er flere alternativer for forskjellige arkitekturer. For eksempel, for arm kan du ganske enkelt velge Linaro-versjonen av den eksterne verktĂžykjeden.
C-bibliotek â valg av C-bibliotek Driften av hele systemet avhenger av dette. Vanligvis brukes glibc, som stĂžtter all mulig funksjonalitet. Men det kan vĂŠre for stort for et innebygd system, sĂ„ uglibc eller musl blir ofte valgt. Vi vil velge glibc (dette vil vĂŠre nĂždvendig senere for Ă„ bruke systemd).
Kernel Headers og Custom Kernel Headers-serien â mĂ„ samsvare med versjonen av kjernen som vil vĂŠre i det sammensatte systemet. For kjerneoverskrifter kan du ogsĂ„ spesifisere banen til tarball- eller git-depotet.
GCC COMPILER VERSIONS â velg kompilatorversjonen som skal brukes til bygging
Aktiver C++-stĂžtte â velg Ă„ bygge med stĂžtte for C++-biblioteker i systemet. Dette vil vĂŠre nyttig for oss i fremtiden.
Ytterligere gcc-alternativer â du kan angi flere kompilatoralternativer. Vi trenger det ikke akkurat nĂ„.
Systemkonfigurasjon lar deg angi fremtidige parametere for det opprettede systemet:

De fleste punktene er tydelige fra tittelen. La oss ta hensyn til fĂžlgende punkter:
Sti til brukertabellene - tabell med brukere som skal opprettes ().
Eksempelfil. Brukerbrukeren opprettes med passordadmin, automatisk gid/uid, /bin/sh-skall, standard gruppebruker, gruppemedlemsrot, kommentar Foo-bruker
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo userRotfilsystemoverleggskataloger - katalog lagt over de sammensatte target-fs. Legger til nye filer og erstatter eksisterende.
Egendefinerte skript som skal kjÞres fÞr du lager filsystembilder - Skript som kjÞres rett fÞr filsystemet brettes til bilder. La oss la skriptet stÄ tomt for nÄ.
La oss gÄ til kjernedelen

Kjerneinnstillinger angis her. Selve kjernen konfigureres via make linux-menuconfig.
Du kan stille inn kjerneversjonen pÄ forskjellige mÄter: velg blant de som tilbys, skriv inn versjonen manuelt, spesifiser et depot eller en ferdig tarball.
Kjernekonfigurasjon â banen til kjernekonfigurasjonen. Du kan velge standardkonfigurasjonen for den valgte arkitekturen eller defocnfig fra LinuxI kildekoden Linux Det finnes et sett med defconfigs for forskjellige mĂ„lsystemer. Du kan finne den du trenger, . For eksempel, for en beagle bein svart tavle kan du .
MÄlpakker-delen lar deg velge hvilke pakker som skal installeres pÄ systemet som bygges. La oss la det vÊre uendret forelÞpig. Vi legger pakkene vÄre til denne listen senere.
Filsystembilder - en liste over filsystembilder som vil bli samlet inn. Legg til et iso-bilde

Bootloaders - utvalg av bootloadere Ă„ samle. La oss velge isolinix

Konfigurere Systemd
Systemd er i ferd med Ă„ bli en av grunnpilarene i Linux, sammen med kjerne og glibc. Derfor flyttet jeg innstillingen til et eget element.
Konfigurert via make menuconfig, deretter Target-pakker â SystemverktĂžy â systemd. Her kan du spesifisere hvilke systemd tjenester som skal installeres og startes nĂ„r systemet starter.

Lagrer systemkonfigurasjon
Vi lagrer denne konfigurasjonen via KConfig.
Lagre deretter vÄr defconfig:
make savedefconfigKonfigurering av kjernen Linux
Linux-kjernekonfigurasjonen pÄkalles med fÞlgende kommando:
make linux-menuconfigLa oss legge til stĂžtte for Virtualbox-skjermkortet

La oss legge til Virtualbox Guest-integrasjonsstĂžtte

Lagre og lukk. VIKTIG: konfigurasjonen vil bli lagret i output/build/linux-$version/config, men ikke i board/my_x86_board/linux.config

Derfor mÄ du manuelt kopiere konfigurasjonen til et lagringssted:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.configDeretter vil vi utfÞre en fullstendig remontering av hele systemet. buildroot gjenoppbygger ikke det som allerede er bygget, du mÄ manuelt spesifisere pakker for gjenoppbygging. For ikke Ä kaste bort tid og nerver, er det lettere Ä gjenoppbygge et lite system helt):
make clean;makeNÄr bygget er fullfÞrt, start VirtualBox (testet pÄ versjon 5.2 og 6.0) ved oppstart fra CD-en. Systemparametere:

Start fra den sammensatte isoen:

Liste over brukte materialer
- Buildroot manual
Kilde: www.habr.com
