Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Introducere

În această serie de articole, vreau să mă uit la sistemul de construire a distribuției buildroot și să împărtășesc experiența mea în personalizarea acestuia. Va exista experiență practică în crearea unui sistem de operare mic, cu o interfață grafică și funcționalitate minimă.

În primul rând, nu trebuie să confundați sistemul de construcție și distribuția. Buildroot poate construi un sistem dintr-un set de pachete care îi sunt oferite. Buildroot este construit pe makefiles și, prin urmare, are capabilități enorme de personalizare. Înlocuiți un pachet cu o altă versiune, adăugați propriul pachet, modificați regulile pentru construirea unui pachet, personalizați sistemul de fișiere după instalarea tuturor pachetelor? buildroot poate face toate acestea.

În Rusia, se folosește buildroot, dar în opinia mea există puține informații în limba rusă pentru începători.

Scopul lucrării este asamblarea unui kit de distribuție cu descărcare live, interfață icewm și browser. Platforma țintă este virtualbox.

De ce să vă construiți propria distribuție? Adesea este nevoie de funcționalitate limitată cu resurse limitate. Chiar mai des în automatizare trebuie să creați firmware. Adaptarea unei distribuții de uz general prin curățarea pachetelor inutile și transformarea acesteia în firmware necesită mai multă muncă decât construirea unei noi distribuții. Utilizarea Gentoo are și limitările sale.

Sistemul Buildroot este foarte puternic, dar nu va face nimic pentru tine. Acesta poate activa și automatiza doar procesul de asamblare.

Sistemele alternative de construcție (yocto, open build system și altele) nu sunt luate în considerare sau comparate.

De unde să-l obțineți și cum să începeți

Site-ul proiectului - buildroot.org. Aici puteți descărca versiunea actuală și puteți citi manualul. Acolo puteți contacta comunitatea, există un bug tracker, liste de e-mail și un canal irc.

Buildroot operează defconfigs pentru placa țintă a build-ului. Defconfig este un fișier de configurare care stochează numai opțiuni care nu au valori implicite. El este cel care stabilește ce va fi colectat și cum. În acest caz, puteți configura separat configurațiile busybox, linux-kernel, uglibc, u-boot și barebox, dar toate vor fi legate de placa țintă.
După despachetarea arhivei descărcate sau clonarea din git, obținem un buildroot gata de utilizat. Puteți citi mai multe despre structura directoarelor în manual; vă voi spune despre cele mai importante:

bord — un director cu fișiere specifice fiecărei plăci. Acestea pot fi scripturi pentru formarea imaginilor de sistem (iso, sdcart, cpio și altele), un director de suprapunere, configurație kernel etc.
configuri — defconfig reală a plăcii. Defconfig este o configurație incompletă a plăcii. Stochează doar parametrii care diferă de setările implicite
dl — director cu codurile/fișierele sursă descărcate pentru asamblare
ieșire/țintă — sistemul de fișiere asamblat al sistemului de operare rezultat. Ulterior, imaginile sunt create din acesta pentru descărcare/instalare
ieșire/gazdă - gazdă utilitare pentru asamblare
ieșire/construire - pachete asamblate

Ansamblul este configurat prin KConfig. Același sistem este folosit pentru a construi nucleul Linux. Lista celor mai frecvent utilizate comenzi (executate în directorul buildroot):

  • make menuconfig - apelați configurația de construcție. De asemenea, puteți utiliza interfața grafică (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - apelați configurația kernelului.
  • make clean - curățați rezultatele construcției (tot ce este stocat în ieșire)
  • face - construi un sistem. Acest lucru nu reasambla procesele deja asamblate.
  • make defconfig_name - comută configurația la o anumită defconfig
  • make list-defconfigs - arată o listă de defconfigs
  • make source - doar descărcați fișierele de instalare, fără a construi.
  • make help - enumerați comenzile posibile

Note importante și sfaturi utile

Buildroot nu reconstruiește pachetele care au fost deja construite! Prin urmare, poate apărea o situație în care este necesară o reasamblare completă.

Puteți reconstrui un pachet separat cu comanda make packagename-rebuild. De exemplu, puteți reconstrui nucleul Linux:

make linux-rebuild

Buildroot stochează starea oricărui pachet prin crearea fișierelor .stamp în directorul output/build/$packagename:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Prin urmare, puteți reconstrui root-fs și imagini fără a reconstrui pachete:

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

Variabile utile

buildroot are un set de variabile pentru o configurare ușoară

  • $TOPDIR - directorul buildroot
  • $BASEDIR - directorul OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — gazdă fs, staging fs, țintă fs build directoare.
  • $BUILD_DIR - director cu pachete dezambalate și construite

Vizualizare

buildroot are o caracteristică de vizualizare. Puteți construi o diagramă de dependență, un grafic al timpului de construire și un grafic al dimensiunilor pachetelor în sistemul final. Rezultatele sunt sub formă de fișiere pdf (puteți alege dintre svn, png) în directorul output/graph.

Exemple de comenzi de vizualizare:

  • make graph-depends construiți un arbore de dependență
  • make <pkg>-graph-depends construiți un arbore de dependență pentru un anumit pachet
  • BR2_GRAPH_OUT=png make graph-build trasați timpul de construire cu ieșire PNG
  • make graph-size reprezentați dimensiunea pachetului

Scripturi utile

Există un subdirector în directorul buildroot utils cu scripturi utile. De exemplu, există un script care verifică corectitudinea descrierilor pachetelor. Acest lucru poate fi util atunci când adăugați propriile pachete (voi face asta mai târziu). Fișierul utils/readme.txt conține o descriere a acestor scripturi.

Să construim o distribuție de stoc

Este important să rețineți că toate operațiunile sunt efectuate în numele unui utilizator obișnuit, nu în numele root.
Toate comenzile sunt executate în buildroot. Pachetul buildroot include deja un set de configurații pentru multe plăci comune și virtualizare.

Să ne uităm la lista de configurații:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Comutați la configurația qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Și începem asamblarea

make

Construirea se finalizează cu succes, uită-te la rezultate:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Buildroot a compilat imagini pe care le puteți rula în Qemu și verifica dacă funcționează.

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

Rezultatul este un sistem care rulează în qemu:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Crearea propriei configurații de placă

Adăugarea fișierelor de bord

Să ne uităm la lista de configurații:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

În listă vedem pc_x86_64_efi_defconfig. Ne vom crea propria placă prin copierea din configurație:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Să creăm imediat un director de bord pentru a stoca scripturile noastre, rootfs-overlay și alte fișiere necesare:

mkdir board/my_x86_board

Comutați la această defconfig:

make my_x86_board_defconfig

Astfel, acum configurația build (stocat în .config în rădăcina directorului buildroot) corespunde mașinii țintă de pornire x86-64 legacy(bios).

Să copiem configurația linux-kernel (utilă mai târziu):

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

Setarea parametrilor de compilare prin KConfig

Să începem configurarea:

make menuconfig 

Se va deschide fereastra KConfig. Este posibil să se configureze cu o interfață grafică (make nconfig, make xconfig, make gconfig):

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Intrăm în prima secțiune Opțiuni țintă. Aici puteți selecta arhitectura țintă pentru care va fi realizată construcția.

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Opțiuni de construcție - există diferite setări de construcție aici. Puteți specifica directoare cu coduri sursă, numărul de fire de execuție, oglinzi pentru descărcarea codurilor sursă și alte setări. Să lăsăm setările implicite.

Toolchain – instrumentele de construcție în sine sunt configurate aici. Citiți mai multe despre el.

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Tip de lanț de instrumente – tipul de lanț de instrumente utilizat. Acesta poate fi un lanț de instrumente încorporat în buildroot sau unul extern (puteți specifica directorul cu cel deja construit sau adresa URL pentru descărcare). Există opțiuni suplimentare pentru diferite arhitecturi. De exemplu, pentru arm puteți selecta pur și simplu versiunea Linaro a lanțului de instrumente extern.

Biblioteca C – selectarea bibliotecii C. Funcționarea întregului sistem depinde de aceasta. De obicei, se folosește glibc, care acceptă toate funcționalitățile posibile. Dar poate fi prea mare pentru un sistem încorporat, așa că uglibc sau musl sunt adesea alese. Vom selecta glibc (acest lucru va fi necesar mai târziu pentru a utiliza systemd).

Seria Antete kernel și Anteturi kernel personalizate – trebuie să se potrivească cu versiunea nucleului care va fi în sistemul asamblat. Pentru anteturile nucleului, puteți specifica și calea către depozitul tarball sau git.

GCC COMPILER VERSIONS – selectați versiunea compilatorului care va fi folosită pentru creare
Activați suportul C++ – selectați pentru a construi cu suport pentru bibliotecile C++ din sistem. Acest lucru ne va fi de folos în viitor.

Opțiuni suplimentare gcc – puteți seta opțiuni suplimentare pentru compilator. Nu avem nevoie de el deocamdată.

Configurarea sistemului vă permite să setați parametrii viitori ai sistemului creat:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Majoritatea punctelor sunt clare din titlu. Să acordăm atenție următoarelor puncte:
Calea către tabelele utilizatorilor - tabel cu utilizatorii de creat (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Fișier exemplu. Utilizatorul va fi creat cu parola admin, automat gid/uid, /bin/sh shell, utilizatorul implicit al grupului, root membru al grupului, comentariul utilizatorului Foo

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Directoare de suprapunere a sistemului de fișiere rădăcină - director suprapus deasupra țintei-fs asamblate. Adaugă fișiere noi și le înlocuiește pe cele existente.

Scripturi personalizate de rulat înainte de a crea imagini ale sistemului de fișiere - Scripturi executate imediat înainte de a plia sistemul de fișiere în imagini. Să lăsăm scriptul gol deocamdată.

Să mergem la secțiunea Kernel

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Setările kernelului sunt setate aici. Nucleul în sine este configurat prin make linux-menuconfig.
Puteți seta versiunea de kernel în diferite moduri: selectați dintre cele oferite, introduceți versiunea manual, specificați un depozit sau un tarball gata făcut.

Kernel configuration — calea către configurația kernelului. Puteți selecta configurația implicită pentru arhitectura selectată sau defocnfig din Linux. Sursa Linux conține un set de defconfigs pentru diferite sisteme țintă. Îl poți găsi pe cel de care ai nevoie privind direct sursele de aici. De exemplu, pentru o tablă neagră cu os de beagle puteți selectați config.

Secțiunea Pachete țintă vă permite să selectați ce pachete vor fi instalate pe sistemul în curs de construire. Să o lăsăm neschimbată deocamdată. Vom adăuga pachetele noastre la această listă mai târziu.
Imagini ale sistemului de fișiere - o listă de imagini ale sistemului de fișiere care vor fi colectate. Adăugați o imagine ISO

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Bootloaders - selecție de bootloadere de colectat. Să alegem isolinix

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Configurarea Systemd

Systemd devine unul dintre pilonii Linux, alături de kernel și glibc. Prin urmare, am mutat setarea pe un element separat.

Configurat prin make menuconfig, apoi Target packages → System tools → systemd. Aici puteți specifica ce servicii systemd vor fi instalate și pornite la pornirea sistemului.

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Salvarea configurației sistemului

Salvăm această configurație prin KConfig.

Apoi salvați defconfig:

make savedefconfig

Configurarea kernelului Linux

Configurația nucleului Linux este invocată cu următoarea comandă:

make linux-menuconfig

Să adăugăm suport pentru placa video Virtualbox

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Să adăugăm suport pentru integrarea Virtualbox Guest

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Salvează și ieși. IMPORTANT: configurația va fi salvată în output/build/linux-$version/config, dar nu în board/my_x86_board/linux.config

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Prin urmare, trebuie să copiați manual configurația într-o locație de stocare:

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

După care vom efectua o reasamblare completă a întregului sistem. buildroot nu reconstruiește ceea ce a fost deja construit, trebuie să specificați manual pachetele pentru reconstrucție. Pentru a nu pierde timpul și nervii, este mai ușor să reconstruiți în întregime un mic sistem):

make clean;make

La finalizarea build-ului, lansați VirtualBox (testat pe versiunile 5.2 și 6.0) pornind de pe CD. Parametri de sistem:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Pornind de la ISO asamblat:

Buildroot - partea 1. Informații generale, asamblarea unui sistem minim, configurarea prin meniu

Lista materialelor folosite

  1. Buildroot manual

Sursa: www.habr.com

Adauga un comentariu