Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Introductie

In deze serie artikelen wil ik kijken naar het buildroot-distributiebouwsysteem en mijn ervaringen delen met het aanpassen ervan. Er zal praktische ervaring worden opgedaan met het creëren van een klein besturingssysteem met een grafische interface en minimale functionaliteit.

Allereerst moet je het bouwsysteem en de distributie niet verwarren. Buildroot kan een systeem bouwen uit een reeks pakketten die eraan worden aangeboden. Buildroot is gebouwd op makefiles en heeft daarom enorme aanpassingsmogelijkheden. Een pakket vervangen door een andere versie, uw eigen pakket toevoegen, de regels voor het bouwen van een pakket wijzigen, het bestandssysteem aanpassen nadat u alle pakketten hebt geïnstalleerd? buildroot kan dit allemaal.

In Rusland wordt buildroot gebruikt, maar naar mijn mening is er weinig Russischtalige informatie voor beginners.

Het doel van het werk is het samenstellen van een distributiekit met live download, icewm-interface en browser. Het doelplatform is virtualbox.

Waarom uw eigen distributie bouwen? Vaak is beperkte functionaliteit nodig met beperkte middelen. Nog vaker moet je bij automatisering firmware maken. Het aanpassen van een algemene distributie door onnodige pakketten op te schonen en deze in firmware om te zetten is arbeidsintensiever dan het bouwen van een nieuwe distributie. Het gebruik van Gentoo heeft ook zijn beperkingen.

Het Buildroot-systeem is erg krachtig, maar het zal niets voor je doen. Het kan alleen het assemblageproces mogelijk maken en automatiseren.

Alternatieve bouwsystemen (yocto, open bouwsysteem en andere) worden niet overwogen of vergeleken.

Waar je het kunt krijgen en hoe je moet beginnen

Projectwebsite - buildroot.org. Hier kunt u de actuele versie downloaden en de handleiding lezen. Daar kun je contact opnemen met de community, er is een bugtracker, maillijsten en een irc-kanaal.

Buildroot voert defconfigs uit voor het doelbord van de build. Defconfig is een configuratiebestand waarin alleen opties worden opgeslagen die geen standaardwaarden hebben. Hij is degene die bepaalt wat er wordt verzameld en hoe. In dit geval kun je de configuraties van busybox, linux-kernel, uglibc, u-boot en barebox bootloaders afzonderlijk configureren, maar ze zullen allemaal aan het doelbord gekoppeld zijn.
Na het uitpakken van het gedownloade archief of het klonen van git, krijgen we een kant-en-klare buildroot. Meer over de directorystructuur lees je in de handleiding; ik vertel je de belangrijkste:

boord — een map met bestanden die specifiek zijn voor elk bord. Dit kunnen scripts zijn voor het vormen van systeemimages (iso, sdcart, cpio en andere), een overlay-map, kernelconfiguratie, enz.
configs — de daadwerkelijke defconfig van het bord. Defconfig is een onvolledige bordconfiguratie. Er worden alleen parameters opgeslagen die afwijken van de standaardinstellingen
dl — map met gedownloade broncodes/bestanden voor montage
uitgang/doel — het samengestelde bestandssysteem van het resulterende besturingssysteem. Vervolgens worden er afbeeldingen van gemaakt om te downloaden/installeren
uitvoer/host - hosthulpprogramma's voor montage
uitvoer/opbouw - samengestelde pakketten

De assembly wordt geconfigureerd via KConfig. Hetzelfde systeem wordt gebruikt om de Linux-kernel te bouwen. Lijst met de meest gebruikte opdrachten (uitvoeren in de buildroot-directory):

  • make menuconfig - roep de build-configuratie aan. U kunt ook de grafische interface gebruiken (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - roep de kernelconfiguratie aan.
  • make clean - maak de buildresultaten schoon (alles opgeslagen in de uitvoer)
  • maak - bouw een systeem. Hiermee worden reeds samengestelde processen niet opnieuw samengesteld.
  • make defconfig_name - schakel de configuratie naar een specifieke defconfig
  • make list-defconfigs - toon een lijst met defconfigs
  • maak bron - download gewoon de installatiebestanden, zonder te bouwen.
  • help maken - lijst mogelijke opdrachten op

Belangrijke opmerkingen en nuttige tips

Buildroot bouwt geen pakketten opnieuw op die al zijn gebouwd! Daarom kan er een situatie ontstaan ​​waarin een volledige hermontage vereist is.

Met de opdracht kunt u een afzonderlijk pakket opnieuw opbouwen maak pakketnaam-rebuild. U kunt bijvoorbeeld de Linux-kernel opnieuw opbouwen:

make linux-rebuild

Buildroot slaat de status van elk pakket op door .stamp-bestanden te maken in de directory output/build/$packagename:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Daarom kunt u root-fs en images opnieuw opbouwen zonder pakketten opnieuw op te bouwen:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Nuttige variabelen

buildroot heeft een reeks variabelen voor eenvoudige configuratie

  • $TOPDIR - buildroot-map
  • $BASEDIR - OUTPUT-map
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, doel fs build-mappen.
  • $BUILD_DIR - map met uitgepakte en gebouwde pakketten

Visualisatie

buildroot heeft een visualisatiefunctie. U kunt een afhankelijkheidsdiagram, een bouwtijdgrafiek en een grafiek van pakketgroottes in het uiteindelijke systeem bouwen. De resultaten zijn in de vorm van pdf-bestanden (u kunt kiezen uit svn,png) in de map output/graph.

Voorbeelden van visualisatieopdrachten:

  • make graph-depends afhankelijkheidsboom bouwen
  • make <pkg>-graph-depends bouw een afhankelijkheidsboom voor een specifiek pakket
  • BR2_GRAPH_OUT=png make graph-build plot bouwtijd met PNG-uitvoer
  • make graph-size pakketgrootte plotten

Handige scripts

Er is een submap in de buildroot-map utils met handige scripts. Zo is er een script dat de juistheid van pakketbeschrijvingen controleert. Dit kan handig zijn als u uw eigen pakketten toevoegt (ik zal dit later doen). Het bestand utils/readme.txt bevat een beschrijving van deze scripts.

Laten we een aandelendistributie bouwen

Het is belangrijk om te onthouden dat alle bewerkingen worden uitgevoerd namens een gewone gebruiker en niet namens de root.
Alle opdrachten worden uitgevoerd in de buildroot. Het buildroot-pakket bevat al een set configuraties voor veel gangbare borden en virtualisatie.

Laten we eens kijken naar de lijst met configuraties:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Schakel over naar de configuratie qemu_x86_64_defconfig

make qemu_x86_64_defconfig

En we beginnen met de montage

make

De build is succesvol voltooid, bekijk de resultaten:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Buildroot heeft afbeeldingen samengesteld die u in Qemu kunt uitvoeren en kunt verifiëren dat ze werken.

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

Het resultaat is een systeem dat draait in qemu:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Creëer uw eigen bordconfiguratie

Bordbestanden toevoegen

Laten we eens kijken naar de lijst met configuraties:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

In de lijst zien we pc_x86_64_efi_defconfig. We zullen ons eigen bord maken door het uit de configuratie te kopiëren:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Laten we onmiddellijk een boarddirectory maken om onze scripts, rootfs-overlay en andere noodzakelijke bestanden op te slaan:

mkdir board/my_x86_board

Schakel over naar deze defconfig:

make my_x86_board_defconfig

Dus nu komt de build-configuratie (opgeslagen in .config in de root van de buildroot-map) overeen met de x86-64 legacy (bios) opstartdoelmachine.

Laten we de Linux-kernelconfiguratie kopiëren (later nuttig):

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

Bouwparameters instellen via KConfig

Laten we beginnen met de installatie:

make menuconfig 

Het KConfig-venster wordt geopend. Het is mogelijk om te configureren met een grafische interface (make nconfig, make xconfig, make gconfig):

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

We komen in de eerste sectie Doelopties. Hier kunt u de doelarchitectuur selecteren waarvoor de build wordt uitgevoerd.

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Bouwopties - er zijn hier verschillende bouwinstellingen. U kunt mappen met broncodes, het aantal build-threads, mirrors voor het downloaden van broncodes en andere instellingen opgeven. Laten we de instellingen op de standaard laten staan.

Toolchain – de bouwtools zelf worden hier geconfigureerd. Lees meer over hem.

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Type gereedschapsketting – type gereedschapsketting dat wordt gebruikt. Dit kan een toolchain zijn die is ingebouwd in buildroot of een externe toolchain (u kunt de map opgeven met de reeds gebouwde of de URL om te downloaden). Er zijn extra opties voor verschillende architecturen. Voor arm kunt u bijvoorbeeld eenvoudig de Linaro-versie van de externe toolchain selecteren.

C-bibliotheek – selectie van de C-bibliotheek. De werking van het hele systeem is hiervan afhankelijk. Meestal wordt glibc gebruikt, dat alle mogelijke functionaliteit ondersteunt. Maar het kan te groot zijn voor een embedded systeem, daarom wordt vaak gekozen voor uglibc of musl. We zullen glibc selecteren (dit is later nodig om systemd te gebruiken).

Kernel Headers en Custom Kernel Headers-series - moeten overeenkomen met de versie van de kernel die zich in het geassembleerde systeem zal bevinden. Voor kernelheaders kun je ook het pad naar de tarball- of git-repository opgeven.

GCC COMPILERVERSIES – selecteer de compilerversie die moet worden gebruikt voor het bouwen
Schakel C++-ondersteuning in – selecteer om te bouwen met ondersteuning voor C++-bibliotheken in het systeem. Dit zal voor ons in de toekomst nuttig zijn.

Extra gcc-opties – u kunt extra compileropties instellen. Wij hebben het voorlopig niet nodig.

Met systeemconfiguratie kunt u toekomstige parameters van het gemaakte systeem instellen:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

De meeste punten worden duidelijk uit de titel. Laten we op de volgende punten letten:
Pad naar de gebruikerstabellen - tabel met aan te maken gebruikers (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Voorbeeld bestand. De gebruiker-gebruiker wordt aangemaakt met het wachtwoord admin, automatisch gid/uid, /bin/sh shell, standaardgroepsgebruiker, groepslid root, commentaar Foo-gebruiker

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

Overlay-mappen voor het rootbestandssysteem - map als overlay bovenop de samengestelde target-fs. Voegt nieuwe bestanden toe en vervangt bestaande.

Aangepaste scripts die moeten worden uitgevoerd voordat bestandssysteemafbeeldingen worden gemaakt - Scripts die worden uitgevoerd onmiddellijk voordat het bestandssysteem in afbeeldingen wordt gevouwen. Laten we het script voorlopig leeg laten.

Laten we naar de Kernel-sectie gaan

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Hier worden de kernelinstellingen ingesteld. De kernel zelf wordt geconfigureerd via make linux-menuconfig.
U kunt de kernelversie op verschillende manieren instellen: kies uit de aangeboden versies, voer de versie handmatig in, specificeer een repository of een kant-en-klare tarball.

Kernelconfiguratie — pad naar de kernelconfiguratie. U kunt de standaardconfiguratie voor de geselecteerde architectuur of defocnfig vanuit Linux selecteren. De Linux-bron bevat een set defconfigs voor verschillende doelsystemen. Je kunt degene vinden die je nodig hebt door hier rechtstreeks naar de bronnen te kijken. Voor een beagle bone blackboard kan dat bijvoorbeeld selecteer configuratie.

In de sectie Doelpakketten kunt u selecteren welke pakketten worden geïnstalleerd op het systeem dat wordt gebouwd. Laten we het voorlopig ongewijzigd laten. We zullen onze pakketten later aan deze lijst toevoegen.
Bestandssysteemafbeeldingen - een lijst met bestandssysteemafbeeldingen die worden verzameld. Voeg een ISO-afbeelding toe

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Bootloaders - selectie van bootloaders om te verzamelen. Laten we isolinix kiezen

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Systemd configureren

Systemd wordt een van de pijlers van Linux, samen met kernel en glibc. Daarom heb ik de instelling ervan naar een apart item verplaatst.

Geconfigureerd via make menuconfig, vervolgens Doelpakketten → Systeemhulpmiddelen → systemd. Hier kunt u opgeven welke systeemservices worden geïnstalleerd en gestart wanneer het systeem opstart.

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Systeemconfiguratie opslaan

We slaan deze configuratie op via KConfig.

Sla vervolgens onze defconfig op:

make savedefconfig

Linux-kernelconfiguratie

De Linux-kernelconfiguratie wordt aangeroepen met de volgende opdracht:

make linux-menuconfig

Laten we ondersteuning toevoegen voor de Virtualbox-videokaart

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Laten we Virtualbox Guest-integratieondersteuning toevoegen

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Opslaan en afsluiten. BELANGRIJK: configuratie wordt opgeslagen in output/build/linux-$version/config, maar niet in board/my_x86_board/linux.config

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Daarom moet u de configuratie handmatig naar een opslaglocatie kopiëren:

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

Daarna zullen wij een volledige hermontage van het gehele systeem uitvoeren. buildroot bouwt niet opnieuw op wat al is gebouwd; u moet handmatig pakketten opgeven om opnieuw te bouwen. Om geen tijd en zenuwen te verspillen, is het gemakkelijker om een ​​klein systeem volledig opnieuw op te bouwen):

make clean;make

Na voltooiing van de build start u VirtualBox (getest op versies 5.2 en 6.0) en start u op vanaf de cd.

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Lopend vanaf de samengestelde ISO:

Buildroot - deel 1. Algemene informatie, een minimaal systeem samenstellen, configuratie via het menu

Lijst met gebruikte materialen

  1. Buildroot-handleiding

Bron: www.habr.com

Voeg een reactie