Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Indledning

I denne serie af artikler vil jeg se på buildroot distributions montagesystemet og dele min erfaring med at tilpasse det. Her får du praktisk erfaring med at skabe et lille OS med en grafisk grænseflade og minimal funktionalitet.

Først og fremmest bør du ikke forveksle byggesystemet og distributionen. Buildroot kan bygge et system ud fra et sæt pakker, der tilbydes til det. Buildroot er bygget på makefiler og har derfor enorme tilpasningsmuligheder. Erstatte en pakke med en anden version, tilføje din egen pakke, ændre pakkeopbygningsreglerne, tilpasse filsystemet efter installation af alle pakker? Buildroot kan alt dette.

I Rusland bruges buildroot, men efter min mening er der lidt russisksproget information til begyndere.

Målet med arbejdet er at bygge en distribution med live boot, icewm interface og browser. Målplatformen er virtualbox.

Hvorfor bygge din egen distribution? Ofte er der brug for begrænset funktionalitet med begrænsede ressourcer. Endnu oftere i automatisering er det nødvendigt at oprette firmware. At tilpasse en distribution til generelle formål, rydde ud i unødvendige pakker og omdanne den til firmware er en mere arbejdskrævende vej end at samle en ny distribution. Brug af Gentoo har også sine begrænsninger.

Buildroot er et meget kraftfuldt system, men det vil ikke gøre noget for dig. Det kan kun aktivere og automatisere monteringsprocessen.

Alternative byggesystemer (yocto, åbent byggesystem osv.) tages ikke i betragtning eller sammenlignes.

Hvor man kan få fat og hvordan man starter

Projektets hjemmeside - buildroot.org. Her kan du downloade den seneste version og læse manualen. Der kan du også kontakte fællesskabet, der er en bug tracker, mail-lister og en irc-kanal.

Buildroot fungerer på defconfigs for målbyggekortet. Defconfig er en konfigurationsfil, der kun gemmer indstillinger, der ikke har en standardværdi. Det er ham, der bestemmer, hvad og hvordan der skal indsamles. I dette tilfælde kan du separat konfigurere busybox, linux-kernel, uglibc, u-boot og barebox bootloader-konfigurationerne, men de vil alle være bundet til målkortet.
Efter udpakning af det downloadede arkiv eller kloning fra git får vi en buildroot, der er klar til brug. Du kan læse om mappestrukturen i detaljer i manualen, jeg vil fortælle dig om de vigtigste:

board — en mappe med filer, der er specifikke for hvert bord. Disse kan være scripts til generering af systembilleder (iso, sdcart, cpio osv.), overlay-mappe, kernekonfiguration osv.
configs — selve defconfig af tavlen. Defconfig er en ufuldstændig kortkonfiguration. Den gemmer kun parametre, der adskiller sig fra standardindstillingerne.
dl — bibliotek med downloadede kildekoder/filer til samling
output/mål — det samlede filsystem for det modtagne OS. Senere oprettes billeder til download/installation af den.
output/vært — værtsværktøjer til montering
output/byg — indsamlede pakker

Konfiguration af samlingen udføres via KConfig. Det samme system bruges til at bygge Linux-kernen. Liste over oftest brugte kommandoer (kør i buildroot-mappen):

  • make menuconfig — kald build-konfiguration. Det er også muligt at bruge den grafiske grænseflade (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig — start kernekonfiguration.
  • gør rent — rens byggeresultaterne (alt gemt i output)
  • lave — byg systemet. I dette tilfælde samles allerede samlede processer ikke igen.
  • make defconfig_name — skift konfiguration til en specifik defconfig
  • make list-defconfigs — vis liste over defconfigs
  • lav kilde - download kun installationsfiler uden montering.
  • lav hjælp — angiv mulige kommandoer

Vigtige bemærkninger og nyttige tip

Buildroot genopbygger ikke allerede byggede pakker! Derfor kan der opstå en situation, hvor en fuldstændig genmontering er påkrævet.

Du kan genopbygge en separat pakke med kommandoen lav pakkenavn-genopbygning. For eksempel kan du genopbygge Linux-kernen:

make linux-rebuild

Buildroot gemmer tilstanden for enhver pakke ved at oprette .stamp-filer i mappen output/build/$pakkenavn:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Derfor er det muligt at genopbygge root-f'er og billeder uden at genopbygge 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 sæt variabler for nem konfiguration.

  • $TOPDIR — buildroot rodmappe
  • $BASEDIR - OUTPUT bibliotek
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — vært fs, iscenesættelse fs, mål fs build mapper.
  • $BUILD_DIR — mappe med udpakkede og indbyggede pakker

Visualisering

Buildroot har en visualiseringsfunktion. Du kan bygge et afhængighedsdiagram, en byggetidsgraf, en graf over størrelsen af ​​pakker i det endelige system. Resultater i form af pdf-filer (du kan vælge svn, png) i output/graf-mappen.

Eksempler på visualiseringskommandoer:

  • make graph-depends bygge et afhængighedstræ
  • make <pkg>-graph-depends bygge et afhængighedstræ af en specifik pakke
  • BR2_GRAPH_OUT=png make graph-build plot byggetidsgraf med png-output
  • make graph-size plot pakkestørrelse graf

Nyttige scripts

Der er en undermappe i buildroot-mappen utils med nyttige scripts. For eksempel er der et script, der kontrollerer rigtigheden af ​​pakkebeskrivelsen. Dette kan være nyttigt, når du tilføjer dine egne pakker (det gør jeg senere). Filen utils/readme.txt indeholder en beskrivelse af disse scripts.

Lad os bygge en aktiefordeling

Det er vigtigt at huske, at alle handlinger udføres på vegne af en almindelig bruger, ikke root.
Alle kommandoer udføres i buildroden. Byggerodsleveringen indeholder allerede et sæt konfigurationer til mange almindelige boards og virtualisering.

Lad os se på listen over konfigurationer:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Skift til qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

Og vi starter byggeriet

make

Monteringen er gennemført med succes, lad os se på resultaterne:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Buildroot har bygget billeder, som du kan køre i Qemu for at se, om de virker.

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

Resultatet er et system, der kører i qemu:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Oprettelse af din egen tavlekonfiguration

Tilføjelse af tavlefiler

Lad os se på listen over konfigurationer:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

På listen ser vi pc_x86_64_efi_defconfig. Vi vil oprette vores eget board ved at kopiere det fra konfigurationen:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Lad os straks oprette en board-mappe til at gemme vores scripts, rootfs-overlay og andre nødvendige filer:

mkdir board/my_x86_board

Skift til denne defconfig:

make my_x86_board_defconfig

Således matcher build-konfigurationen (gemt i .config i roden af ​​buildroot-mappen) målet x86-64 legacy(bios) boot-maskinen.

Lad os kopiere linux-kerne-konfigurationen (det vil være nyttigt senere):

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

Opsætning af byggeindstillinger via KConfig

Lad os starte opsætningen:

make menuconfig 

KConfig-vinduet åbnes. Det er muligt at konfigurere med en grafisk grænseflade (make nconfig, make xconfig, make gconfig):

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Vi går ind i det første afsnit Målindstillinger. Her kan du vælge den målarkitektur, som bygningen skal udføres for.

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Byg muligheder - her kan du finde forskellige byggeindstillinger. Du kan angive mapper med kildekoder, antallet af build-tråde, spejle til download af kildekoder og andre indstillinger. Lad os forlade standardindstillingerne.

Værktøjskæde – det er her selve byggeværktøjskæden er konfigureret. Mere om ham.

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Værktøjskædetype – den anvendte type værktøjskæde. Dette kan være en indbygget buildroot eller ekstern værktøjskæde (du kan angive en mappe med en allerede bygget eller en download-URL). Der er yderligere muligheder for forskellige arkitekturer. For eksempel kan du til arm blot vælge versionen af ​​den eksterne Linaro værktøjskæde.

C-bibliotek – valg af C-bibliotek. Driften af ​​hele systemet afhænger af dette. Typisk bruges glibc, som understøtter al mulig funktionalitet. Men det kan være for stort til et indlejret system, så uglibc eller musl bliver ofte valgt. Vi vælger glibc (dette vil være nødvendigt senere for at bruge systemd).

Kernel Headers og Custom Kernel Headers-serien – skal matche den kerneversion, der vil være i det system, der bygges. For kerneoverskrifter kan du også angive stien til et tarball- eller git-lager.

GCC COMPILER VERSIONS - vælg den compiler version, der skal bruges til build
Aktiver C++-understøttelse – vælg for at bygge med understøttelse af C++-biblioteker i systemet. Det får vi brug for senere.

Yderligere gcc-indstillinger – du kan indstille yderligere kompileringsindstillinger. Vi har ikke brug for det lige nu.

Systemkonfiguration giver dig mulighed for at indstille fremtidige parametre for det oprettede system:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

De fleste af pointerne fremgår tydeligt af titlen. Lad os være opmærksomme på følgende punkter:
Sti til brugertabellerne — tabel med oprettede brugere (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Eksempel fil. En bruger bruger vil blive oprettet med adgangskode admin, automatisk gid/uid, /bin/sh shell, standard gruppebruger, gruppemedlems rod, kommentar Foo bruger

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

Root-filsystem-overlejringsmapper - en mappe overlejret oven på de samlede target-fs. Tilføjer nye filer og erstatter eksisterende.

Brugerdefinerede scripts, der skal køres før oprettelse af filsystembilleder — Scripts, der udføres umiddelbart før filsystemet skjules til billeder. Vi lader selve scriptet være tomt indtil videre.

Lad os gå videre til Kernel-sektionen

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Kernelindstillinger konfigureres her. Selve kernen konfigureres via make linux-menuconfig.
Du kan indstille kerneversionen på forskellige måder: vælg blandt de foreslåede, indtast versionen manuelt, angiv et lager eller en færdiglavet tarball.

Kernekonfiguration — stien til kernekonfigurationen. Du kan vælge standardkonfigurationen for den valgte arkitektur eller defocnfig fra LinuxI kildekoden Linux Der findes et sæt defconfigs til forskellige målsystemer. Du kan finde den, du har brug for. ser direkte på kilden her. For eksempel, for beagle bone sorte tavle kan du vælg config.

Sektionen Målpakker giver dig mulighed for at vælge, hvilke pakker der skal installeres på det indbyggede system. Lad os lade det være uændret indtil videre. Vi tilføjer vores pakker til denne liste senere.
Filsystembilleder - liste over filsystembilleder, der skal bygges. Lad os tilføje et iso-billede

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Bootloadere - vælg bootloadere, der skal bygges. Lad os vælge isolinix

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Konfiguration af Systemd

Systemd er ved at blive en af ​​grundpillerne i Linux sammen med kerne og glibc. Det er derfor, jeg flyttede dens indstilling til en separat sektion.

Konfigureret via make menuconfig, derefter Target-pakker → Systemværktøjer → systemd. Her kan du angive, hvilke systemd-tjenester, der skal installeres og startes ved systemstart.

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Gemmer systemkonfiguration

Vi gemmer denne opsætning via KConfig.

Derefter gemmer vi vores defconfig:

make savedefconfig

Konfiguration af kernen Linux

Linux-kernekonfigurationen kaldes af følgende kommando:

make linux-menuconfig

Lad os tilføje understøttelse af Virtualbox-skærmkortet

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Lad os tilføje Virtualbox Guest-integrationssupport

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Gem og afslut. VIGTIGT: konfigurationen vil blive gemt i output/build/linux-$version/config, men ikke i board/my_x86_board/linux.config

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Derfor skal du manuelt kopiere konfigurationen til lagerplaceringen:

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

Hvorefter vi vil udføre en komplet genmontering af hele systemet. Fordi buildroot ikke genopbygger det, der allerede er blevet bygget, så du skal manuelt angive de pakker, der skal genopbygges. For ikke at spilde tid og nerver er det lettere at genopbygge et lille system helt):

make clean;make

Når opbygningen er færdig, skal du starte VirtualBox (testet på version 5.2 og 6.0) og starte fra cd'en. Systemparametre:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Start fra den kompilerede iso:

Buildroot - Del 1 - Oversigt, minimal systemopbygning, menuopsætning

Liste over anvendte materialer

  1. Buildroot manual

Kilde: www.habr.com

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster