Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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 - buildroot.org. 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-rebuild

Buildroot lagrer tilstanden til enhver pakke ved å lage .stamp-filer i katalogen output/build/$packagename:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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 ; make

Nyttige 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-depends bygge avhengighetstre
  • make <pkg>-graph-depends bygge et avhengighetstre for en bestemt pakke
  • BR2_GRAPH_OUT=png make graph-build plot byggetid med PNG-utdata
  • make graph-size plott 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:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Bytt til qemu_x86_64_defconfig-konfigurasjonen

make qemu_x86_64_defconfig

Og vi starter monteringen

make

Byggingen fullføres vellykket, se på resultatene:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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 -S

Resultatet er et system som kjører i qemu:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Lag din egen styrekonfigurasjon

Legge til tavlefiler

La oss se på listen over konfigurasjoner:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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_defconfig

La oss umiddelbart lage en brettkatalog for å lagre skriptene våre, rootfs-overlegget og andre nødvendige filer:

mkdir board/my_x86_board

Bytt til denne defconfig:

make my_x86_board_defconfig

Dermed 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):

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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.

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

De fleste punktene er tydelige fra tittelen. La oss ta hensyn til følgende punkter:
Sti til brukertabellene - tabell med brukere som skal opprettes (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

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 user

Rotfilsystemoverleggskataloger - 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

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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 — bane til kjernekonfigurasjonen. Du kan velge standardkonfigurasjonen for den valgte arkitekturen eller defocnfig fra Linux. Linux-kilden inneholder et sett med defconfigs for forskjellige målsystemer. Du kan finne den du trenger ved å se direkte på kildene her. For eksempel, for en beagle bein svart tavle kan du velg konfig.

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

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Bootloaders - utvalg av bootloadere å samle. La oss velge isolinix

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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.

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Lagrer systemkonfigurasjon

Vi lagrer denne konfigurasjonen via KConfig.

Lagre deretter vår defconfig:

make savedefconfig

Linux-kjernekonfigurasjon

Linux-kjernekonfigurasjonen påkalles med følgende kommando:

make linux-menuconfig

La oss legge til støtte for Virtualbox-skjermkortet

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

La oss legge til Virtualbox Guest-integrasjonsstøtte

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

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

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Derfor må du manuelt kopiere konfigurasjonen til et lagringssted:

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

Deretter 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;make

Når bygget er fullført, start VirtualBox (testet på versjon 5.2 og 6.0) ved oppstart fra CD-en. Systemparametere:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Start fra den sammensatte isoen:

Buildroot - del 1. Generell informasjon, bygge et minimalt system, sette opp gjennom menyen

Liste over brukte materialer

  1. Buildroot manual

Kilde: www.habr.com

Legg til en kommentar