Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Inleiding

In hierdie reeks artikels wil ek die boustelsel van die buildroot-verspreiding hersien en my ervaring met die aanpassing daarvan deel. Daar sal praktiese ondervinding wees in die skep van 'n klein bedryfstelsel met 'n grafiese koppelvlak en minimale funksionaliteit.

Eerstens, moenie die boustelsel met die verspreiding verwar nie. Buildroot kan 'n stelsel bou uit 'n stel pakkette wat daaraan gebied word. Buildroot is gebou op make-lêers en het dus baie aanpassingsopsies. Vervang die pakket met 'n ander weergawe, voeg u eie pakket by, verander die reëls vir die bou van die pakket, pas die lêerstelsel aan nadat u al die pakkette geïnstalleer het? Dit alles kan wortel bou.

In Rusland word buildroot gebruik, maar na my mening is daar min Russiese-talige inligting vir beginners.

Die doel van die werk is om 'n verspreidingskit te bou met lewendige aflaai, icewm-koppelvlak en blaaier. Die teikenplatform is virtualbox.

Hoekom jou eie verspreiding bou? Dikwels benodig jy beperkte funksionaliteit met beperkte hulpbronne. Meer dikwels in outomatisering moet jy firmware skep. Om 'n algemene doelverspreiding aan te pas deur oortollige pakkette skoon te maak en dit in firmware te omskep, is 'n meer tydrowende manier as om 'n nuwe verspreiding saam te stel. Die gebruik van Gentoo het ook sy beperkings.

Die Buildroot-stelsel is baie kragtig, maar dit sal niks vir jou doen nie. Dit kan slegs die monteringsproses aktiveer en outomatiseer.

Alternatiewe boustelsels (yocto, oopboustelsel, ens.) word nie oorweeg of vergelyk nie.

Waar om te kry en hoe om te begin

Projek webwerf - buildroot.org. Hier kan jy die nuutste weergawe aflaai en die handleiding lees. Daar kan jy ook die gemeenskap kontak, daar is 'n foutspoorder, poslyste en 'n irc-kanaal.

Buildroot werk met defconfigs vir die teikenboubord. Defconfig is 'n konfigurasielêer wat slegs opsies bevat wat nie 'n verstekwaarde het nie. Dit is hy wat bepaal wat en hoe ingesamel sal word. In hierdie geval kan u die busybox, linux-kernel, uglibc, u-boot en barebox selflaaiprogram-konfigurasies afsonderlik opstel, maar hulle sal almal aan die teikenbord gekoppel wees.
Nadat ons die afgelaaide argief uitgepak het of vanaf git gekloning het, maak ons ​​buildroot gereed vir werk. Jy kan meer lees oor die gidsstruktuur in die handleiding, ek sal jou vertel van die belangrikstes:

raad - gids met lêers spesifiek vir elke bord. Dit kan stelselbeeldingsskrifte (iso, sdcart, cpio en ander), oorleggids, kernkonfigurasie, ens.
configs - die werklike defconfig van die bord. Defconfig is 'n onvolledige bordkonfigurasie. Dit stoor slegs ander parameters as die verstekinstellings.
dl - gids met afgelaaide bronkodes / lêers vir samestelling
uitset/teiken - die saamgestelde lêerstelsel van die ontvangde bedryfstelsel. In die toekoms word beelde daaruit geskep vir aflaai / installasie
uitset/gasheer - gasheerhulpmiddels vir montering
uitset/bou - saamgestelde pakkette

Montering opstelling word gedoen via KConfig. Dieselfde stelsel word gebruik om die Linux-kern te bou. Lys van die mees gebruikte opdragte (voer in die buildroot-gids):

  • maak menuconfig - roep die bou-konfigurasie. Jy kan ook die GUI gebruik (maak nconfig, maak xconfig, maak gconfig)
  • maak linux-menuconfig - roep kernkonfigurasie.
  • maak skoon - skoon bou resultate (alles wat in uitvoer gestoor word)
  • maak - bou die stelsel. Dit herbou nie reeds geboude prosesse nie.
  • maak defconfig_name - skakel konfigurasie na spesifieke defconfig
  • maak lys-defconfigs - wys 'n lys van defconfigs
  • maak bron - laai slegs die installasielêers af, geen samestelling nie.
  • maak hulp - vertoon 'n lys van moontlike opdragte

Belangrike notas en nuttige wenke

Buildroot herbou nie reeds geboude pakkette nie! Daarom kan 'n situasie ontstaan ​​wanneer 'n volledige hersamestelling vereis word.

U kan 'n enkele pakket met die opdrag herbou maak pakketnaam-herbou. Byvoorbeeld, jy kan die Linux-kern herbou:

make linux-rebuild

Buildroot stoor die toestand van enige pakket deur .stamp-lêers in die output/build/$packagename-gids te skep:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Daarom is dit moontlik om root-fs en beelde te herbou sonder om pakkette te herbou:

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

Nuttige veranderlikes

buildroot het 'n stel veranderlikes vir maklike konfigurasie

  • $TOPDIR - buildroot wortelgids
  • $BASEDIR - UITVOER-gids
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, target fs build directories.
  • $BUILD_DIR - gids met uitgepakte en geboude pakkette

Visualisering

buildroot het die vermoë om te visualiseer Jy kan 'n afhanklikheidsdiagram bou, tydgrafiek bou, pakketgrootte grafiek in die finale stelsel. Resultate as pdf-lêers (jy kan kies uit svn,png) in die uitvoer/grafiekgids.

Voorbeelde van lewer opdragte:

  • make graph-depends afhanklikheidsboom bou
  • make <pkg>-graph-depends bou die afhanklikheidsboom van 'n spesifieke pakket
  • BR2_GRAPH_OUT=png make graph-build plot bou tyd grafiek met PNG uitset
  • make graph-size plot die pakkiegrootte

Nuttige skrifte

Die buildroot-gids het 'n subgids utils met nuttige skrifte. Daar is byvoorbeeld 'n skrip wat die korrektheid van pakketbeskrywings kontroleer. Dit kan nuttig wees wanneer gepasmaakte pakkette bygevoeg word (ek sal dit later doen). Die utils/readme.txt-lêer het 'n beskrywing van hierdie skrifte.

Kom ons bou 'n voorraadverspreiding

Dit is belangrik om te onthou dat alle bewerkings namens 'n gereelde gebruiker uitgevoer word, nie wortel nie.
Alle opdragte word in buildroot uitgevoer. Die bouwortelverspreiding het reeds 'n stel konfigurasies vir baie algemene borde en virtualisering.

Sien die lys van konfigurasies:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Skakel oor na qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

En begin met die bou

make

Die bou voltooi suksesvol, kyk na die resultate:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Buildroot het beelde saamgestel wat jy in Qemu kan laat loop en kyk of hulle werk.

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

Die resultaat is 'n stelsel wat in qemu loop:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Skep jou eie bordkonfigurasie

Voeg bordlêers by

Sien die lys van konfigurasies:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

In die lys sien ons pc_x86_64_efi_defconfig. Ons sal ons bord skep deur dit vanaf die konfigurasie te kopieer:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Skep onmiddellik 'n bordgids om ons skrifte, rootfs-overlay en ander nodige lêers te stoor:

mkdir board/my_x86_board

Skakel oor na hierdie defconfig:

make my_x86_board_defconfig

So nou pas die build config (geberg in .config aan die wortel van buildroot se gids) by die x86-64 legacy(bios) teikenmasjien deur selflaai.

Kopieer die linux-kern-konfigurasie (later nuttig):

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

Konfigureer Bou-opsies via KConfig

Kom ons begin die opstelling:

make menuconfig 

Die KConfig-venster sal oopmaak. Dit is moontlik om te konfigureer met 'n grafiese koppelvlak (maak nconfig, maak xconfig, maak gconfig):

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Ons betree die eerste afdeling Teikenopsies. Hier kan u die teikenargitektuur kies waarvoor die samestelling uitgevoer sal word.

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Bou-opsies - hier is verskeie bou-opsies. Jy kan gidse met bronkodes, die aantal boudrade, spieëls vir die aflaai van bronkodes en ander instellings spesifiseer. Kom ons verlaat die verstek instellings.

Gereedskapsketting - die bougereedskapstel self word hier gekonfigureer. Meer oor hom.

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Tipe gereedskapketting - die tipe gereedskapketting wat gebruik word. Dit kan ingebou word in buildroot of 'n eksterne toolchain (jy kan 'n gids spesifiseer met 'n reeds ingeboude een of 'n url vir aflaai). Daar is bykomende opsies vir verskillende argitekture. Byvoorbeeld, vir arm, kan jy eenvoudig die weergawe van die eksterne Linaro-gereedskapsketting kies.

C-biblioteek - keuse van die C-biblioteek Die werking van die hele stelsel hang hiervan af. Gewoonlik word glibc gebruik, wat alle moontlike funksionaliteit ondersteun. Maar dit kan te groot wees vir 'n ingebedde stelsel, so uglibc of musl word dikwels gekies. Ons sal glibc kies (dit sal later vereis word om systemd te gebruik).

Kernel Headers en Custom Kernel Headers reekse - moet ooreenstem met die weergawe van die kern wat in die stelsel sal wees wat gebou word. Vir kernopskrifte kan u ook die pad na die tarball of die git-bewaarplek spesifiseer.

GCC-samestellerweergawes - kies die samestellerweergawe wat vir die bou gebruik sal word
Aktiveer C++-ondersteuning - kies om te bou met ondersteuning vir c++-biblioteke in die stelsel. Ons sal dit later nodig hê.

Bykomende gcc-opsies - jy kan addisionele samesteller-opsies stel. Ons het dit nie vir nou nodig nie.

Stelselkonfigurasie laat jou toe om die toekomstige parameters van die geskepde stelsel in te stel:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Die meeste van die punte is duidelik uit die titel. Kom ons let op die volgende punte:
Pad na die gebruikerstabelle - tabel met geskepte gebruikers (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Lêer voorbeeld. Die gebruiker gebruiker sal geskep word met wagwoord admin, outomaties gid/uid, /bin/sh dop, verstek groep gebruiker, lid van groep wortel, kommentaar 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

Wortellêerstelsel-oorleggidse - 'n gids wat bo-op die saamgestelde target-fs oorgelê word. Voeg nuwe lêers by en vervang bestaandes.

Pasgemaakte skrifte om uit te voer voordat lêerstelselbeelde geskep word Laat die skrif vir eers leeg.

Kom ons gaan na die Kernel-afdeling

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Dit is waar die kerninstellings ingestel word. Die kern self word gekonfigureer via make linux-menuconfig.
Jy kan die kernweergawe op verskillende maniere stel: kies uit dié wat aangebied word, voer die weergawe handmatig in, spesifiseer 'n bewaarplek of 'n klaargemaakte tarball.

Kernelkonfigurasie - pad na die kernkonfigurasie. U kan die verstekkonfigurasie vir die geselekteerde argitektuur kies of defocnfig vanaf Linux. Die Linux-bronne het 'n stel defconfigs vir verskillende teikenstelsels. Jy kan die een vind wat jy nodig het kyk direk na die bron hier. Byvoorbeeld, vir 'n beagle been swart bord, kan jy kies config.

Die Teikenpakkette-afdeling laat jou toe om te kies watter pakkette op die teikenstelsel geïnstalleer sal word. Kom ons laat dit vir eers onveranderd. Later sal ons ons pakkette by hierdie lys voeg.
Lêerstelsel beelde - Lys van lêerstelsel beelde wat gebou moet word. Voeg 'n ISO-beeld by

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Selflaailaaiers - die keuse van versamelde selflaailaaiers. Kies isolinix

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Stel Systemd op

Systemd word een van die pilare van Linux, saam met kern en glibc. Daarom het ek die instelling daarvan in 'n aparte paragraaf uitgehaal.

Dit word gekonfigureer via make menuconfig, dan Target packages → System tools → systemd. Hier kan jy spesifiseer watter stelseldienste geïnstalleer en begin sal word wanneer die stelsel begin.

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Stoor die stelselkonfigurasie

Ons stoor hierdie konfigurasie via KConfig.

Dan stoor ons ons defconfig:

make savedefconfig

Linux kern konfigurasie

Die linux-kernkonfigurasie word deur die volgende opdrag aangeroep:

make linux-menuconfig

Voeg ondersteuning by vir Virtualbox-videokaart

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Voeg Virtualbox Guest-integrasie-ondersteuning by

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Ons spaar en gaan uit. BELANGRIK: konfigurasie sal gestoor word in output/build/linux-$version/config maar nie in board/my_x86_board/linux.config

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Daarom moet u die konfigurasie handmatig na die stoorplek kopieer:

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

Daarna sal ons 'n volledige hersamestelling van die hele stelsel uitvoer. buildroot herbou nie wat reeds gebou is nie, jy moet die pakkette om te herbou met die hand spesifiseer. Om nie tyd en senuwees te mors nie, is dit makliker om 'n klein stelsel as geheel te herbou):

make clean;make

Na voltooiing van die samestelling, begin ons VirtualBox (getoets op weergawes 5.2 en 6.0) met selflaai vanaf die cd-skyf. Stelselparameters:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Begin van die ingeboude ISO:

Buildroot - Deel 1 - Oorsig, minimale stelselbou, spyskaartopstelling

Lys van materiale wat gebruik word

  1. Buildroot handleiding

Bron: will.com

Voeg 'n opmerking