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 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:
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 boumake <pkg>-graph-depends
bou die afhanklikheidsboom van 'n spesifieke pakketBR2_GRAPH_OUT=png make graph-build
plot bou tyd grafiek met PNG uitsetmake 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:
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 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:
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_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):
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 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
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
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 savedefconfig
Linux kern konfigurasie
Die linux-kernkonfigurasie word deur die volgende opdrag aangeroep:
make linux-menuconfig
Voeg 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.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:
Begin van die ingeboude ISO:
Lys van materiale wat gebruik word
- Buildroot handleiding
Bron: will.com