Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Uvod

U ovoj seriji članaka želim pregledati sustav izgradnje buildroot distribucije i podijeliti svoje iskustvo u njegovoj prilagodbi. Postojat će praktično iskustvo u stvaranju malog OS-a s grafičkim sučeljem i minimalnom funkcionalnošću.

Prije svega, nemojte brkati sustav izgradnje s distribucijom. Buildroot može izgraditi sustav iz skupa paketa koji su mu ponuđeni. Buildroot je izgrađen na make datotekama i stoga ima puno mogućnosti prilagodbe. Zamijeniti paket drugom verzijom, dodati vlastiti paket, promijeniti pravila za izgradnju paketa, prilagoditi datotečni sustav nakon instaliranja svih paketa? Sve ovo može izgraditi korijen.

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

Svrha rada je izgraditi distribucijski komplet sa live downloadom, icewm sučeljem i preglednikom. Ciljana platforma je virtualbox.

Zašto izgraditi vlastitu distribuciju? Često vam je potrebna ograničena funkcionalnost s ograničenim resursima. Češće u automatizaciji morate izraditi firmware. Prilagodba distribucije opće namjene čišćenjem suvišnih paketa i pretvaranjem u firmware je dugotrajniji način od sastavljanja nove distribucije. Korištenje Gentooa također ima svoja ograničenja.

Buildroot sustav je vrlo moćan, ali neće učiniti ništa za vas. Može samo omogućiti i automatizirati proces montaže.

Alternativni sustavi izrade (yocto, otvoreni sustav izrade itd.) se ne razmatraju niti uspoređuju.

Gdje nabaviti i kako započ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 alat za praćenje grešaka, mail-liste i irc-kanal.

Buildroot radi s defconfigs 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 što će se i kako prikupljati. U ovom slučaju, možete zasebno konfigurirati konfiguracije busyboxa, linux-kernela, uglibc, u-boot i barebox bootloadera, ali sve će one biti povezane s ciljnom pločom.
Nakon raspakiranja preuzete arhive ili kloniranja iz gita, dobivamo buildroot spreman za rad. Više o strukturi imenika možete pročitati u priručniku, a ja ću vam reći o najvažnijima:

odbor — direktorij s datotekama specifičnim za svaku ploču. To mogu biti skripte za slike sustava (iso, sdcart, cpio i druge), direktorij preklapanja, konfiguracija kernela itd.
Konfiguracije - stvarna defconfig ploče. Defconfig je nepotpuna konfiguracija ploče. Pohranjuje samo parametre osim zadanih postavki.
dl - direktorij s preuzetim izvornim kodovima / datotekama za montažu
izlaz/cilj - sastavljeni datotečni sustav primljenog OS-a. U budućnosti se iz njega stvaraju slike za preuzimanje / instalaciju
izlaz/domaćin - pomoćni programi domaćina za montažu
izlaz/izgradnja - sklopljeni paketi

Konfiguracija sklopa se vrši preko KConfig. Isti sustav se koristi za izgradnju Linux kernela. Popis najčešće korištenih naredbi (izvršite u buildroot direktoriju):

  • make menuconfig - pozivanje konfiguracije izgradnje. Također možete koristiti GUI (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - poziv konfiguracije jezgre.
  • make clean - čisti rezultate izgradnje (sve što je pohranjeno u izlazu)
  • napraviti - izgraditi sustav. Time se ne obnavljaju već izgrađeni procesi.
  • make defconfig_name - prebaci konfiguraciju na određeni defconfig
  • make list-defconfigs - prikaži popis defconfigs
  • make source - preuzmite samo instalacijske datoteke, bez sklapanja.
  • napraviti pomoć - prikazati popis mogućih naredbi

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 ponovno izgraditi jedan paket s naredbom napravi paketnaziv-rebuild. Na primjer, možete ponovno izgraditi jezgru linuxa:

make linux-rebuild

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

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Stoga je moguće ponovno 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 za izgradnju
  • $BASEDIR - IZLAZNI direktorij
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, target fs build direktoriji.
  • $BUILD_DIR - direktorij s raspakiranim i izgrađenim paketima

Vizualizacija

buildroot ima mogućnost vizualizacije. Možete izgraditi dijagram ovisnosti, vremenski grafikon izgradnje, grafikon veličine paketa u konačnom sustavu. Rezultati kao pdf datoteke (možete birati između svn,png) u direktoriju output/graph.

Primjeri naredbi renderiranja:

  • make graph-depends izgraditi stablo ovisnosti
  • make <pkg>-graph-depends izgraditi stablo ovisnosti određenog paketa
  • BR2_GRAPH_OUT=png make graph-build grafikon vremena izgradnje parcele s PNG izlazom
  • make graph-size iscrtajte veličinu paketa

Korisne skripte

Direktorij buildroot ima poddirektorij utils s korisnim skriptama. Na primjer, postoji skripta koja provjerava ispravnost opisa paketa. Ovo može biti korisno prilikom dodavanja prilagođenih paketa (učinit ću to kasnije). Datoteka utils/readme.txt sadrži opis ovih skripti.

Izgradimo distribuciju dionica

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

Pogledajte popis konfiguracija:

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Prebacite se na konfiguraciju qemu_x86_64_defconfig

make qemu_x86_64_defconfig

I započnite izgradnju

make

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

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Buildroot je sastavio slike koje možete pokrenuti u Qemuu i vidjeti rade li.

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

Rezultat je sustav koji radi u qemu:

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Napravite vlastitu konfiguraciju ploče

Dodavanje datoteka ploče

Pogledajte popis konfiguracija:

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Na popisu vidimo pc_x86_64_efi_defconfig. Napravit ćemo našu ploču kopiranjem iz konfiguracije:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Odmah stvorite direktorij ploče za pohranjivanje naših skripti, rootfs-prekrivanja i drugih potrebnih datoteka:

mkdir board/my_x86_board

Prebacite se na ovu defconfig:

make my_x86_board_defconfig

Dakle, sada konfiguracija izgradnje (pohranjena u .config u korijenu buildroot direktorija) odgovara ciljnom stroju x86-64 legacy (bios) pokretanjem.

Kopirajte konfiguraciju linux kernela (korisno kasnije):

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

Konfiguriranje opcija izgradnje preko KConfig

Započnimo postavljanje:

make menuconfig 

Otvorit će se prozor KConfig. Moguće je konfigurirati pomoću grafičkog sučelja (make nconfig, make xconfig, make gconfig):

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Ulazimo u prvi odjeljak Target Options. Ovdje možete odabrati ciljnu arhitekturu za koju će se izvršiti sklop.

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Mogućnosti izrade - ovdje postoje različite mogućnosti izrade. Možete odrediti direktorije s izvornim kodovima, broj niti za izgradnju, zrcala za preuzimanje izvornih kodova i druge postavke. Ostavimo zadane postavke.

Toolchain - ovdje se konfigurira sam skup alata za izradu. Više o njemu.

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Vrsta alatnog lanca - tip alatnog lanca koji se koristi. Ovo se može ugraditi u buildroot ili vanjski alatni lanac (možete odrediti direktorij s već izgrađenim ili url za preuzimanje). Postoje dodatne mogućnosti za različite arhitekture. Na primjer, za ruku možete jednostavno odabrati verziju vanjskog lanca alata Linaro.

C biblioteka - odabir biblioteke C. O tome ovisi rad cijelog sustava. Obično se koristi glibc koji podržava sve moguće funkcionalnosti. Ali može biti prevelik za ugrađeni sustav, pa se često bira uglibc ili musl. Odabrat ćemo glibc (ovo će biti potrebno kasnije za korištenje systemd).

Kernel Headers i Custom Kernel Headers serije - moraju odgovarati verziji kernela koja će biti u sustavu koji se gradi. Za zaglavlja kernela također možete navesti stazu do tarball-a ili git repozitorija.

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

Dodatne gcc opcije - možete postaviti dodatne opcije kompilatora. Za sada nam ne treba.

Konfiguracija sustava omogućuje vam postavljanje budućih parametara stvorenog sustava:

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Većina točaka je jasna iz naslova. Obratimo pozornost na sljedeće točke:
Put do tablica korisnika - tablica sa kreiranim korisnicima (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Primjer datoteke. Korisnik korisnik bit će kreiran s lozinkom admin, automatski gid/uid, /bin/sh shell, zadani 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

Preklopni direktoriji korijenskog datotečnog sustava - direktorij koji je prekriven povrh kompajliranog target-fs-a. Dodaje nove datoteke i zamjenjuje postojeće.

Prilagođene skripte za pokretanje prije stvaranja slika datotečnog sustava Za sada ostavite skriptu praznu.

Idemo u odjeljak Kernel

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Ovdje se postavljaju postavke kernela. Sam kernel se konfigurira preko make linux-menuconfig.
Verziju kernela možete postaviti na različite načine: birati između ponuđenih, ručno unijeti verziju, odrediti repozitorij ili gotovu arhivu.

Konfiguracija jezgre - put do konfiguracije jezgre. Možete odabrati zadanu konfiguraciju za odabranu arhitekturu ili defocnfig iz Linuxa. Linux izvori imaju skup defconfigova za različite ciljne sustave. Možete pronaći onu koja vam je potrebna gledajući izravno na izvor ovdje. Na primjer, za crnu ploču od beagle kosti, možete odaberite konfiguraciju.

Odjeljak Ciljni paketi omogućuje vam da odaberete koji će paketi biti instalirani na ciljni sustav. Ostavimo to za sada nepromijenjeno. Kasnije ćemo dodati naše pakete na ovaj popis.
Slike datotečnog sustava - popis slika datotečnog sustava koje treba izgraditi. Dodajte iso sliku

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Bootloaderi - izbor prikupljenih bootloadera. Odaberite isolinix

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Konfiguriranje Systemd

Systemd postaje jedan od stupova linuxa, zajedno s kernelom i glibc-om. Stoga sam njegovu postavku izdvojio u zasebnom paragrafu.

Konfigurira se preko make menuconfig, zatim Target packages → System tools → systemd. Ovdje možete odrediti koji će se systemd servisi instalirati i pokrenuti pri pokretanju sustava.

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Spremanje konfiguracije sustava

Ovu konfiguraciju spremamo putem KConfiga.

Zatim spremamo naš defconfig:

make savedefconfig

Konfiguracija jezgre Linuxa

Konfiguracija jezgre linuxa poziva se sljedećom naredbom:

make linux-menuconfig

Dodajte podršku za Virtualbox video karticu

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Dodajte podršku za integraciju Virtualbox Guest

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Spremamo i izlazimo. VAŽNO: konfiguracija će biti spremljena u output/build/linux-$version/config, ali ne u board/my_x86_board/linux.config

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Stoga trebate 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 sustava. buildroot ne obnavlja ono što je već izgrađeno, morate ručno specificirati pakete za obnovu. Kako ne biste gubili vrijeme i živce, lakše je ponovno izgraditi mali sustav u cjelini):

make clean;make

Po završetku montaže pokrećemo VirtualBox (testiran na verzijama 5.2 i 6.0) s boot-om s cd-diska Parametri sustava:

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

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

Buildroot - Dio 1 - Pregled, Minimalna izrada sustava, Postavljanje izbornika

Popis korištenih materijala

  1. Buildroot priručnik

Izvor: www.habr.com

Dodajte komentar