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

Indledning

I denne serie af artikler vil jeg gennemgå buildroot-distributionens byggesystem og dele min erfaring med at tilpasse det. Der vil være 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 reglerne for at bygge en pakke, tilpasse filsystemet efter installation af alle pakkerne? buildroot kan alt dette.

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

Formålet med arbejdet er at bygge et distributionssæt med live download, 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 skal du oprette firmware. At tilpasse en distribution til generelle formål ved at rense unødvendige pakker og omdanne den til firmware er mere arbejdskrævende end at bygge en ny distribution. Brug af Gentoo har også sine begrænsninger.

Buildroot-systemet er meget kraftfuldt, 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 med defconfigs til målbyggekortet. Defconfig er en konfigurationsfil, der kun indeholder 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-konfigurationer, 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 mere om mappestrukturen i manualen; jeg fortæller dig om de vigtigste:

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

Monteringskonfiguration udføres via KConfig. Det samme system bruges til at bygge linux-kernen. Liste over de mest brugte kommandoer (udfør i buildroot-mappen):

  • lav menuconfig - kald build-konfigurationen. Du kan også bruge GUI'en (lav nconfig, lav xconfig, lav gconfig)
  • lav linux-menuconfig - kald kernekonfiguration.
  • gør rene - rene byggeresultater (alt, der er gemt i output)
  • lave - opbygge et system. Dette samler ikke allerede samlede processer igen.
  • make defconfig_name - skift konfiguration til specifik defconfig
  • make list-defconfigs - vis en liste over defconfigs
  • lav kilde - download kun installationsfilerne, ingen samling.
  • lav hjælp - vis en liste over 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 enkelt 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 - host fs, staging fs, target fs build mapper.
  • $BUILD_DIR - mappe med udpakkede og indbyggede pakker

Visualisering

buildroot har en visualiseringsfunktion. Du kan bygge et afhængighedsdiagram, en byggetidsgraf og en graf over pakkestørrelser i det endelige system. Resultater som pdf-filer (du kan vælge fra svn,png) i output/graf-mappen.

Eksempler på gengivelseskommandoer:

  • make graph-depends bygge et afhængighedstræ
  • make <pkg>-graph-depends opbygge afhængighedstræet for en specifik pakke
  • BR2_GRAPH_OUT=png make graph-build plot byggetidsgraf med PNG-output
  • make graph-size plotte pakkestørrelsen

Nyttige scripts

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

Lad os bygge en aktiefordeling

Det er vigtigt at huske på, at alle operationer udføres på vegne af en almindelig bruger, ikke root.
Alle kommandoer udføres i buildroot. Buildroot-pakken inkluderer allerede et sæt konfigurationer til mange fælles boards og virtualisering.

Se 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 samlingen

make

Opbygningen fuldføres med succes, se på resultaterne:

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

Buildroot har sammensat billeder, som du kan køre i Qemu og 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

Opret din egen tavlekonfiguration

Tilføjelse af tavlefiler

Se listen over konfigurationer:

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

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

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Opret straks 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å nu matcher build-konfigurationen (lagret i .config i roden af ​​buildroots bibliotek) den x86-64 legacy(bios)-målmaskine ved boot.

Kopier linux-kerne-konfigurationen (nyttigt senere):

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

Konfiguration 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 montagen skal udføres for.

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

Byggemuligheder - her er der forskellige byggemuligheder. 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 - selve byggeværktøjssættet er konfigureret her. 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 værktøjskæde indbygget i buildroot eller en ekstern (du kan angive mappen med den allerede indbyggede eller url til download). Der er yderligere muligheder for forskellige arkitekturer. For eksempel, for arm, kan du 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. Normalt 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 version af kernen, der vil være i det samlede system. For kerneoverskrifter kan du også angive stien til tarballen eller git-lageret.

GCC COMPILER VERSIONER - vælg den compiler version, der skal bruges til at bygge
Aktiver C++-understøttelse - vælg 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 på fil. Brugerbrugeren oprettes med adgangskoden 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, der er overlejret oven på de kompilerede target-fs. Tilføjer nye filer og erstatter eksisterende.

Brugerdefinerede scripts til at køre før oprettelse af filsystembilleder - Scripts udført umiddelbart før foldning af filsystemet til billeder. Lad scriptet være tomt indtil videre.

Lad os gå til Kernel-sektionen

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

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

Kernekonfiguration — sti til kernekonfigurationen. Du kan vælge standardkonfigurationen for den valgte arkitektur eller defocnfig fra Linux. Linux-kilden indeholder et sæt defconfigs til forskellige målsystemer. Du kan finde den, du skal bruge ser direkte på kilden her. For eksempel, for en beagle bone sort tavle, kan du vælg config.

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

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

Bootloadere - valget af indsamlede bootloadere. Vælg isolinix

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

Konfiguration af Systemd

Systemd bliver en af ​​grundpillerne i linux sammen med kernel og glibc. Derfor tog jeg dens indstilling ud i et separat afsnit.

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

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

Gemmer systemkonfigurationen

Vi gemmer denne opsætning via KConfig.

Så gemmer vi vores defconfig:

make savedefconfig

Linux-kernekonfiguration

Linux-kernekonfigurationen på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

Tilføj Virtualbox Guest-integrationssupport

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

Gem og luk. 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

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

make clean;make

Efter færdiggørelse af montagen starter vi VirtualBox (testet på version 5.2 og 6.0) med opstart fra cd-disken Systemparametre:

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

Starter fra den indbyggede iso:

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

Liste over anvendte materialer

  1. Buildroot manual

Kilde: www.habr.com

Tilføj en kommentar