Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Uvod

U ovoj seriji članaka želim da pregledam sistem izgradnje distribucije buildroot i podijelim svoje iskustvo u njegovom prilagođavanju. Biće praktičnog iskustva u kreiranju malog OS-a sa grafičkim interfejsom i minimalnom funkcionalnošću.

Prije svega, nemojte brkati sistem izgradnje sa distribucijom. Buildroot može izgraditi sistem iz skupa paketa koji su mu ponuđeni. Buildroot je izgrađen na make fajlovima i stoga ima mnogo opcija prilagođavanja. Zamijeniti paket drugom verzijom, dodati svoj paket, promijeniti pravila za pravljenje paketa, prilagoditi sistem datoteka nakon instaliranja svih paketa? Sve ovo može izgraditi root.

U Rusiji se koristi buildroot, ali po mom mišljenju ima malo informacija na ruskom jeziku za početnike.

Svrha rada je da se napravi distributivni komplet sa preuzimanjem uživo, icewm interfejsom i pretraživačem. Ciljna platforma je virtualbox.

Zašto izgraditi vlastitu distribuciju? Često vam je potrebna ograničena funkcionalnost sa ograničenim resursima. Češće u automatizaciji morate kreirati firmver. Prilagođavanje distribucije opće namjene čišćenjem suvišnih paketa i pretvaranjem u firmver je način koji oduzima više vremena od sastavljanja nove distribucije. Upotreba Gentooa takođe ima svoja ograničenja.

Buildroot sistem je veoma moćan, ali vam neće ništa učiniti. Može samo omogućiti i automatizirati proces montaže.

Alternativni sistemi izgradnje (yocto, open build system, itd.) se ne razmatraju niti upoređuju.

Gdje doći i kako početi

Web stranica projekta - buildroot.org. Ovdje možete preuzeti najnoviju verziju i pročitati priručnik. Tamo također možete kontaktirati zajednicu, postoji bug tracker, mail-liste i irc-kanal.

Buildroot radi sa defconfigama za ciljnu ploču za izgradnju. Defconfig je konfiguracijska datoteka koja sadrži samo opcije koje nemaju zadanu vrijednost. On je taj koji određuje šta i kako će biti prikupljeno. U ovom slučaju, možete zasebno konfigurirati konfiguracije busybox, linux-kernel, uglibc, u-boot i barebox bootloader-a, ali će sve one biti vezane za ciljnu ploču.
Nakon raspakivanja preuzete arhive ili kloniranja sa git-a, dobijamo buildroot spreman za rad. Više o strukturi direktorija možete pročitati u priručniku, a ja ću vam reći o najvažnijim:

odbor — direktorij sa datotekama specifičnim za svaku ploču. To mogu biti skripte za snimanje sistema (iso, sdcart, cpio i druge), direktorij za prekrivanje, konfiguracija kernela itd.
configs - stvarni defconfig ploče. Defconfig je nekompletna konfiguracija ploče. Pohranjuje samo parametre osim zadanih postavki.
dl - direktorij sa preuzetim izvornim kodovima / datotekama za sklapanje
izlaz/cilj - sastavljeni sistem datoteka primljenog OS-a. U budućnosti se iz njega kreiraju slike za preuzimanje / instalaciju
izlaz/host - host uslužni programi za sklapanje
output/build - sastavljena pakovanja

Konfiguracija montaže se vrši preko KConfig-a. Isti sistem se koristi za izgradnju linux kernela. Lista najčešće korišćenih naredbi (izvršite u buildroot direktoriju):

  • make menuconfig - pozvati konfiguraciju izgradnje. Također možete koristiti GUI (napravi nconfig, napravi xconfig, napravi gconfig)
  • make linux-menuconfig - pozvati konfiguraciju kernela.
  • napravi čiste - čiste rezultate izgradnje (sve što je pohranjeno u izlazu)
  • napravi - izgradi sistem. Ovo ne obnavlja već izgrađene procese.
  • make defconfig_name - prebaciti konfiguraciju na određeni defconfig
  • make list-defconfigs - prikaži listu defconfigs
  • make source - preuzimajte samo instalacione datoteke, bez sklapanja.
  • make help - prikaz liste mogućih komandi

Važne napomene i korisni savjeti

Buildroot ne obnavlja već izgrađene pakete! Stoga može doći do situacije kada je potrebna potpuna ponovna montaža.

Možete ponovo izgraditi jedan paket pomoću naredbe napravi naziv paketa-rebuild. Na primjer, možete ponovo izgraditi linux kernel:

make linux-rebuild

Buildroot pohranjuje stanje bilo kojeg paketa kreiranjem .stamp fajlova u direktoriju output/build/$packagename:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Stoga je moguće ponovo izgraditi root-fs i slike bez ponovne izgradnje paketa:

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

Korisne varijable

buildroot ima skup varijabli za jednostavnu konfiguraciju

  • $TOPDIR - korijenski direktorij izgradnje
  • $BASEDIR - IZLAZNI direktorij
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, ciljni fs build direktoriji.
  • $BUILD_DIR - direktorij sa raspakovanim i izgrađenim paketima

Vizualizacija

buildroot ima mogućnost vizualizacije.Možete napraviti dijagram zavisnosti, graf vremena izgradnje, graf veličine paketa u konačnom sistemu. Rezultati kao pdf fajlovi (možete birati između svn,png) u izlaznom/grafskom direktorijumu.

Primjeri naredbi za renderiranje:

  • make graph-depends izgraditi stablo zavisnosti
  • make <pkg>-graph-depends izgraditi stablo zavisnosti određenog paketa
  • BR2_GRAPH_OUT=png make graph-build iscrtati vremenski graf izgradnje sa PNG izlazom
  • make graph-size nacrtajte veličinu paketa

Korisne skripte

Buildroot direktorij ima poddirektorij komunalne usluge sa korisnim skriptama. Na primjer, postoji skripta koja provjerava ispravnost opisa paketa. Ovo može biti korisno prilikom dodavanja prilagođenih paketa (to ću učiniti kasnije). Datoteka utils/readme.txt ima opis ovih skripti.

Hajde da napravimo distribuciju zaliha

Važno je podsjetiti da se sve operacije izvode u ime redovnog korisnika, a ne u ime root-a.
Sve naredbe se izvršavaju u buildroot-u. Distribucija buildroot već ima skup konfiguracija za mnoge uobičajene ploče i virtuelizaciju.

Pogledajte listu konfiguracija:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Prebacite se na qemu_x86_64_defconfig konfiguraciju

make qemu_x86_64_defconfig

I započnite izgradnju

make

Izgradnja je uspješno završena, pogledajte rezultate:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Buildroot je sastavio slike koje možete pokrenuti u Qemu-u i vidjeti da li rade.

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

Rezultat je sistem koji radi u qemu:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Kreirajte vlastitu konfiguraciju ploče

Dodavanje fajlova na ploči

Pogledajte listu konfiguracija:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Na listi vidimo pc_x86_64_efi_defconfig. Napravit ćemo našu ploču kopirajući je iz konfiguracije:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Odmah kreirajte direktorij na ploči za pohranjivanje naših skripti, rootfs-overlay-a i drugih potrebnih datoteka:

mkdir board/my_x86_board

Prebacite se na ovu defconfifikaciju:

make my_x86_board_defconfig

Dakle, sada se konfiguracija izgradnje (pohranjena u .config u korijenu buildroot direktorija) podudara sa x86-64 naslijeđenom (bios) ciljnom mašinom pri pokretanju.

Kopirajte konfiguraciju linux kernela (korisno kasnije):

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

Konfigurisanje opcija izgradnje putem KConfig

Započnimo postavljanje:

make menuconfig 

Otvoriće se prozor KConfig. Moguće je konfigurirati pomoću grafičkog interfejsa (napraviti nconfig, napraviti xconfig, napraviti gconfig):

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Ulazimo u prvi odjeljak Target Options. Ovdje možete odabrati ciljnu arhitekturu za koju će se sklopiti.

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Opcije izgradnje - ovdje postoje različite opcije za izradu. Možete odrediti direktorije s izvornim kodovima, brojem niti izgradnje, ogledalima za preuzimanje izvornih kodova i drugim postavkama. Ostavimo zadane postavke.

Toolchain - ovdje je konfiguriran sam komplet alata za izgradnju. Više o njemu.

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Tip lanca alata - tip lanca alata koji se koristi. Ovo može biti ugrađeno u buildroot ili eksterni lanac alata (možete odrediti direktorij s već izgrađenim ili url za preuzimanje). Postoje dodatne opcije za različite arhitekture. Na primjer, za ruku, možete jednostavno odabrati verziju vanjskog Linaro lanca alata.

C biblioteka - izbor biblioteke C. Od toga zavisi rad celog sistema. Obično se koristi glibc, koji podržava sve moguće funkcionalnosti. Ali može biti prevelik za ugrađeni sistem, pa se često biraju uglibc ili musl. Mi ćemo izabrati glibc (ovo će biti potrebno kasnije za korištenje systemd).

Zaglavlja jezgra i serija prilagođenih zaglavlja kernela - moraju odgovarati verziji kernela koja će biti u sistemu koji se gradi. Za zaglavlja kernela, također možete odrediti putanju do tarball-a ili git spremišta.

VERZIJE GCC COMPILER - izaberite verziju kompajlera koja će se koristiti za izgradnju
Omogući podršku za C++ - odaberite za izgradnju s podrškom za C++ biblioteke u sistemu. Ovo će nam trebati kasnije.

Dodatne gcc opcije - možete postaviti dodatne opcije kompajlera. Ne treba nam za sada.

Konfiguracija sistema vam omogućava da postavite buduće parametre kreiranog sistema:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Većina poenta je jasna iz naslova. Obratimo pažnju na sljedeće tačke:
Put do tabela korisnika - tabela sa kreiranim korisnicima (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Primjer datoteke. Korisnički korisnik će biti kreiran sa lozinkom admin, automatski gid/uid, /bin/sh shell, default korisnik grupe, član root grupe, komentar Foo korisnik

[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 direktoriji - direktorij koji je prekriven na vrhu prevedenog target-fs. Dodaje nove datoteke i zamjenjuje postojeće.

Prilagođene skripte za pokretanje prije kreiranja slika sistema datoteka Ostavite skriptu praznom za sada.

Idemo na odjeljak Kernel

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Ovdje se postavljaju postavke kernela. Sam kernel se konfiguriše preko make linux-menuconfig.
Verziju kernela možete podesiti na različite načine: izaberite neku od ponuđenih, unesite verziju ručno, navedite spremište ili gotov tarball.

Konfiguracija kernela - put do konfiguracije kernela. Možete odabrati zadanu konfiguraciju za odabranu arhitekturu ili defocnfig iz Linuxa. Linux izvori imaju skup defconfigova za različite ciljne sisteme. Možete pronaći onaj koji vam je potreban gledajući direktno na izvor ovdje. Na primjer, za crnu ploču beagle kosti, možete izaberite konfiguraciju.

Odjeljak Ciljni paketi vam omogućava da odaberete koji će paketi biti instalirani na ciljnom sistemu. Ostavimo to za sada nepromijenjeno. Kasnije ćemo dodati naše pakete ovoj listi.
Slike sistema datoteka - Lista slika sistema datoteka koje treba izgraditi. Dodajte iso sliku

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Bootloaderi - izbor prikupljenih pokretačkih programa. Odaberite isolinix

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Konfiguriranje Systemd

Systemd postaje jedan od stubova linuxa, zajedno sa kernelom i glibc-om. Stoga sam njegovu postavku izdvojio u posebnom pasusu.

Konfiguriše se preko make menuconfig, zatim Target paketi → Sistemski alati → systemd. Ovdje možete odrediti koji će systemd servisi biti instalirani i pokrenuti pri pokretanju sistema.

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Čuvanje konfiguracije sistema

Ovu konfiguraciju čuvamo preko KConfig.

Zatim spremamo našu defconfig:

make savedefconfig

Konfiguracija Linux kernela

Konfiguracija linux kernela se poziva sljedećom naredbom:

make linux-menuconfig

Dodajte podršku za Virtualbox video karticu

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Dodajte podršku za integraciju Virtualbox Guest

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Čuvamo i izlazimo. VAŽNO: konfiguracija će biti sačuvana u output/build/linux-$version/config, ali ne u board/my_x86_board/linux.config

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Stoga morate ručno kopirati konfiguraciju na lokaciju za pohranu:

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

Nakon toga ćemo izvršiti kompletnu remontažu cijelog sistema. buildroot ne obnavlja ono što je već izgrađeno, morate ručno navesti pakete za ponovnu izgradnju. Da ne biste gubili vrijeme i živce, lakše je obnoviti mali sistem u cjelini):

make clean;make

Po završetku sklapanja pokrećemo VirtualBox (testiran na verzijama 5.2 i 6.0) sa dizanjem sa cd-diska. Sistemski parametri:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Počevši od izgrađenog iso-a:

Buildroot - Dio 1 - Pregled, Minimalna izgradnja sistema, Podešavanje menija

Spisak korišćenih materijala

  1. Buildroot priručnik

izvor: www.habr.com

Dodajte komentar