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 - . 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-rebuildBuildroot stoor die toestand van enige pakket deur .stamp-lĂȘers in die output/build/$packagename-gids te skep:

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 ; makeNuttige 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-dependsafhanklikheidsboom boumake <pkg>-graph-dependsbou die afhanklikheidsboom van 'n spesifieke pakketBR2_GRAPH_OUT=png make graph-buildplot bou tyd grafiek met PNG uitsetmake graph-sizeplot 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:

Skakel oor na qemu_x86_64_defconfig config
make qemu_x86_64_defconfigEn begin met die bou
makeDie bou voltooi suksesvol, kyk na die resultate:
![]()
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 -SDie resultaat is 'n stelsel wat in qemu loop:

Skep jou eie bordkonfigurasie
Voeg bordlĂȘers by
Sien die lys van konfigurasies:

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_defconfigSkep onmiddellik 'n bordgids om ons skrifte, rootfs-overlay en ander nodige lĂȘers te stoor:
mkdir board/my_x86_boardSkakel oor na hierdie defconfig:
make my_x86_board_defconfigSo 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):

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

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.

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:

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 ().
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 userWortellĂȘ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

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.
Kernkonfigurasie â die pad na die kernkonfigurasie. Jy kan die standaardkonfigurasie vir die gekose argitektuur kies of defocnfig van LinuxIn die bronkode Linux Daar is 'n stel defconfigs vir verskillende teikenstelsels. Jy kan die een vind wat jy benodig, . Byvoorbeeld, vir 'n beagle been swart bord, kan jy .
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

Selflaailaaiers - die keuse van versamelde selflaailaaiers. Kies isolinix

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.

Stoor die stelselkonfigurasie
Ons stoor hierdie konfigurasie via KConfig.
Dan stoor ons ons defconfig:
make savedefconfigKonfigurasie van die kern Linux
Die linux-kernkonfigurasie word deur die volgende opdrag aangeroep:
make linux-menuconfigVoeg ondersteuning by vir Virtualbox-videokaart

Voeg Virtualbox Guest-integrasie-ondersteuning by

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

Daarom moet u die konfigurasie handmatig na die stoorplek kopieer:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.configDaarna 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;makeNa voltooiing van die samestelling, begin ons VirtualBox (getoets op weergawes 5.2 en 6.0) met selflaai vanaf die cd-skyf. Stelselparameters:

Begin van die ingeboude ISO:

Lys van materiale wat gebruik word
- Buildroot handleiding
Bron: will.com
