Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Introduktion

I denne artikelserie vil jeg undersĂžge buildroot-distributionssamlesystemet og dele erfaringer med dets tilpasning. Her vil jeg prĂŠsentere praktisk erfaring med at oprette et lille operativsystem med grafisk grĂŠnseflade og minimal funktionalitet.

FÞrst og fremmest bÞr man ikke forveksle et samlesystem med en distribution. Buildroot kan samle et system fra et sÊt pakker, som det har fÄet foreslÄet. Buildroot er baseret pÄ make-filer og har derfor enorme tilpasningsmuligheder. At erstatte en pakke med en anden version, tilfÞje sin egen pakke, Êndre byggebestemmelserne for pakken, tilpasse filsystemet efter installation af alle pakker? Alt dette kan buildroot.

I Rusland anvendes buildroot, men efter min mening er der for lidt information pÄ russisk for nybegyndere.

MÄlet med arbejdet er at samle en distribution med live-boot, icewm-grÊnseflade og en browser. Den mÄlrettede platform er virtualbox.

Hvorfor samle sin egen distribution? Ofte er der behov for begrÊnset funktionalitet ved begrÊnsede ressourcer. Endnu oftere krÊves det i automatisering at skabe firmware. At tilpasse en generel distributionssystem ved at fjerne unÞdvendige pakker og forvandle det til firmware er en langt mere arbejdskrÊvende proces 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 give muligheder og automatisere byggeprocessen.

Alternative samlesystemer (yocto, open build system osv.) overvejes ikke og sammenlignes ikke.

Hvor kan man finde og hvordan kan man komme i gang

Projektets hjemmeside — buildroot.org. Her kan man downloade den aktuelle version og lĂŠse vejledningen. Der kan man ogsĂ„ kontakte fĂŠllesskabet, finde bug-tracker, maillister og IRC-kanal.

Buildroot opererer med defconfig'er til den mÄlrettede byggemaskine. Defconfig er en konfigurationsfil, der kun indeholder indstillinger, der ikke har standardvÊrdier. Det er netop denne, der definerer, hvad og hvordan der skal bygges. Samtidig kan man separat tilpasse konfigurationerne for busybox, linux-kernel, uclibc, bootloaders u-boot og barebox, men alle vil vÊre knyttet til den mÄlrettede maskine.
Efter udpakning af den downloadede arkiv eller kloning fra git fÄr man en funktionsdygtig buildroot. Detaljer om katalogstrukturen kan findes i vejledningen; jeg vil fortÊlle om de vigtigste:

board — katalog med filer, der er specifikke for hvert bundkort. Dette kan vére scripts til at oprette systembilleder (iso, sdcart, cpio osv.), overlay-katalog, kerneindstillinger osv.
configs — det egentlige defconfig for bundkortet. Defconfig er en ufuldsténdig konfiguration for bundkortet. Den indeholder kun parametre, der afviger fra de standardindstillinger.
dl — katalog med downloadede kildekoder/filer til bygningen
output/target — det samlede filsystem for det opnĂ„ede operativsystem. Herfra oprettes der billeder til opstart/installering.
output/host — vérktþjer til at samle hosten
output/build — samlede pakker

Konfigurationen af bygningen udfĂžres via KConfig. Det samme system bruges til at opbygge Linux-kernen. Liste over de mest anvendte kommandoer (udfĂžres i kataloget buildroot):

  • make menuconfig — Ă„bne bygningens indstillinger. Man kan ogsĂ„ bruge grafisk interface (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig — Ă„bne kernekonfigurationen.
  • make clean — rydde op i bygningens resultater (alt hvad der er gemt i output)
  • make — bygge systemet. Under dette udfĂžres der ikke en genbygning af allerede opbyggede processer.
  • make defconfig_name — skifte konfiguration til en bestemt defconfig
  • make list-defconfigs — vise listen over defconfig'er
  • make source — kun hente installationsfiler uden bygning.
  • make help — vise listen over mulige kommandoer

Vigtige bemĂŠrkninger og nyttige tips

Buildroot genopbygger ikke allerede opbyggede pakker! Derfor kan der opstÄ en situation, hvor der krÊves en fuld genbygning.

Man kan genopbygge en bestemt pakke med kommandoen make packagename-rebuild. For eksempel kan man genopbygge Linux-kernen:

make linux-rebuild

Buildroot gemmer tilstanden af enhver pakke ved at oprette .stamp-filer i kataloget output/build/$packagename:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Derfor kan man genopbygge root-fs 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 variable

I buildroot er der et sĂŠt variabler til nem konfiguration.

  • $TOPDIR — rodkataloget for buildroot
  • $BASEDIR — OUTPUT-kataloget
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — kataloger for opbygning af host fs, staging fs, target fs.
  • $BUILD_DIR — katalog med udpakkede og opbyggede pakker

Visualisering

I buildroot er der mulighed for visualisering. Man kan bygge et afhÊngighedsschema, et tidsplan for bygningen, et diagram for pakke stÞrrelser i det endelige system. Resultaterne fÄs som pdf-filer (valg mellem svn, png) i kataloget output/graph.

Eksempler pÄ visualiseringskommandoer:

  • make graph-depends bygge afhĂŠngighedstrĂŠ
  • make -graph-depends bygge afhĂŠngighedstrĂŠ for en bestemt pakke
  • BR2_GRAPH_OUT=png make graph-build bygge et tidsdiagram med output i PNG
  • make graph-size bygge et diagram over pakkerstĂžrrelser

Nyttige scripts

I buildroot-katalogen er der en undermappe utils c med nyttige scripts. For eksempel er der et script, der kontrollerer korrektheden af pakke beskrivelsen. Dette kan vÊre nyttigt, nÄr man tilfÞjer sine egne pakker (det vil jeg gÞre senere). I filen utils/readme.txt er der en beskrivelse af disse scripts.

Lad os samle en lagerdistribution

Det er vigtigt at huske, at alle operationer udfĂžres som en almindelig bruger, ikke root.
Alle kommandoer udfĂžres i rodmappen af buildroot. I buildroot-pakken er der allerede et sĂŠt konfigurationer til mange almindelige boards og virtualisering.

Lad os se listen over konfigurationer:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Skifter til konfig qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Og starter build-processen

make

Bygningen afsluttes succesfuldt, lad os se resultaterne:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Buildroot har samlet billeder, som kan kĂžres i Qemu for at sikre, 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, der kĂžrer i qemu:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Oprettelse af konfiguration til eget board

TilfĂžjelse af boardfiler

Lad os se listen over konfigurationer:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Vi ser pc_x86_64_efi_defconfig i listen. Vi vil skabe 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 mappe til boardet til opbevaring af vores scripts, rootfs-overlay og andre nĂždvendige filer:

mkdir board/my_x86_board

Skift til denne defconfig:

make my_x86_board_defconfig

Dermed svarer build-konfigurationen (gemt i .config i rodmappen af buildroot) nu til mÄlmaskinen x86-64 legacy(bios) boot.

Lad os kopiere linux-kernel konfigurationen (den vil blive nyttig senere):

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

Konfigurering af bygningsparametre gennem KConfig

Vi starter konfigurationen:

make menuconfig 

KConfig-vinduet Äbnes. Der er mulighed for at konfigurere med grafisk grÊnseflade (make nconfig, make xconfig, make gconfig):

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Vi gÄr ind i den fÞrste sektion Target Options. Her kan du vÊlge mÄlarkitekturen, som bygningen skal laves til.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Bygningsmuligheder — her er der forskellige bygningsindstillinger. Du kan angive kataloger med kildekoder, antal bygge-trĂ„de, spejle til download af kildekoder og andre indstillinger. Lad os beholde standardindstillingerne.

Toolchain – her indstilles selve bygningsvérktþjet. Mere om det senere.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Toolchain type – typen af den anvendte vérktþjskéde. Dette kan vére den indbyggede i buildroot eller en ekstern vérktþjskéde (du kan angive en mappe med allerede konstrueret eller en URL til download). Der er yderligere muligheder for forskellige arkitekturer. For eksempel, for arm kan du blot vélge versionen af den eksterne vérktþjskéde Linaro.

C library – valg af C-bibliotek. Dette afhĂŠnger af hele systemets funktionalitet. Normalt anvendes glibc, som understĂžtter al mulig funktionalitet. Men den kan vise sig at vĂŠre for stor til indbyggede systemer, sĂ„ der vĂŠlges ofte uglibc eller musl. Vi vĂŠlger glibc (det vil vĂŠre nĂždvendigt senere for at bruge systemd).

Kernel Headers og Custom Kernel Headers series – skal matche versionen af kernen, der vil vĂŠre i det konstruerede system. For kernel headers kan du ogsĂ„ angive stien til tarballen eller git-repositoriet.

GCC COMPILER VERSIONS – valg af version af compiler, der vil blive brugt til bygningen.
Enable C++ support – vi vĂŠlger at bygge med understĂžttelse af C++-biblioteker i systemet. Det vil vi fĂ„ brug for senere.

Additional gcc options – du kan angive yderligere compilerindstillinger. Det er ikke nþdvendigt for nu.

System configuration tillader at angive fremtidige parametre for det oprettede system:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

De fleste punkter er forstÄelige ud fra titlen. Lad os tage et kig pÄ fÞlgende punkter:
Path to the users tables — tabellen med de oprettede brugere (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Eksempel pÄ en fil. Brugeren user vil blive oprettet med adgangskoden admin, automatisk gid/uid, /bin/sh som shell, gruppen user som standard, medlem af gruppen root, kommentaren Foo user.

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

Root filesystem overlay directories — katalog, der lĂŠgges oven pĂ„ det samlede target-fs. TilfĂžjer nye filer og erstatter eksisterende.

Custom scripts to run before creating filesystem images — Skripter, der kþres lige fþr filesystemet laves til billeder. Lad os for nu lade skripterne vére tomme.

Lad os gÄ til sektionen Kernel.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Her indstilles kernelindstillingerne. Selve kernen konfigureres via make linux-menuconfig.
Du kan angive kernelens version pÄ forskellige mÄder: vÊlge fra de foreslÄede, indtaste versionen manuelt, angive et repository eller en klar tarball.

Kernel configuration — sti til kernelkonfigurationen. Du kan vĂŠlge standardkonfigurationen for den valgte arkitektur eller defconfig fra Linux. I Linux-kilderne findes der et sĂŠt defconfig'er for forskellige mĂ„lrettede systemer. Du kan finde den nĂždvendige ved at se direkte i kilderne her. For eksempel, for BeagleBone Black-boardet kan du vĂŠlg konfiguration.

Afsnittet MÄlpakker gÞr det muligt at vÊlge, hvilke pakker der skal installeres i det samlede system. Lad os lade det vÊre uÊndret for nu. Senere vil vi tilfÞje vores egne pakker til denne liste.
Filssystembilleder — en liste over filsystembilleder, der vil blive samlet. Lad os tilfþje iso-billedet

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Bootloaders — valg af de bootloadere, der skal samles. Vélg isolinix

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Konfigurering af Systemd

Systemd er blevet en af sÞjlerne i linux, lige sÄ vigtig som kernel og glibc. Derfor har jeg adskilt dens opsÊtning i et sÊrskilt punkt.

Konfigureres gennem make menuconfig, derefter MĂ„lpakker → SystemvĂŠrktĂžjer → systemd. Her kan du angive, hvilke systemd-tjenester der skal installeres og startes ved opstart af systemet.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Gem af systemkonfiguration

Vi gemmer denne konfiguration via KConfig.

Derefter gemmer vi vores defconfig:

make savedefconfig

Konfigurering af Linux-kernen

Konfigurering af linux-kernen udfĂžres med fĂžlgende kommando:

make linux-menuconfig

Lad os tilfĂžje stĂžtte til Virtualbox-grafikkort.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Lad os tilfĂžje support til Virtualbox Guest integration.

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

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

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Derfor skal vi manuelt kopiere konfigurationen til opbevaringsstedet:

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

Derefter udfĂžrer vi en fuld genopbygning af hele systemet. Da buildroot ikke genopbygger allerede samlede, skal vi manuelt angive pakker til genopbygning. For ikke at miste tid og sind, er det lettere at genopbygge et lille system helt):

make clean; make

Ved afslutningen af bygningen starter vi VirtualBox (testet pÄ version 5.2 og 6.0) med opstart fra cd-disk. Systemparametre:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Start fra det samlede iso:

Buildroot — del 1. Generel information, opbygning af et minimalt system, konfiguration via menu

Liste over anvendte materialer

  1. Buildroot manual

Kilde: habr.com

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster