Introduzione
In questa serie di articuli, vogliu vede u sistema di creazione di distribuzione di buildroot è sparte a mo sperienza in persunalizà. Ci sarà una sperienza pratica in a creazione di un picculu OS cù una interfaccia grafica è funziunalità minima.
Prima di tuttu, ùn deve micca cunfundà u sistema di custruzzione è a distribuzione. Buildroot pò custruisce un sistema da un inseme di pacchetti chì sò offerti à ellu. Buildroot hè custruitu nantu à i makefiles è dunque hà enormi capacità di persunalizazione. Sustituisce un pacchettu cù una altra versione, aghjunghje u vostru propiu pacchettu, cambiate e regule per custruisce un pacchettu, persunalizà u sistema di fugliale dopu avè installatu tutti i pacchetti? buildroot pò fà tuttu questu.
In Russia, buildroot hè utilizatu, ma in u mo scusa ci hè pocu infurmazione in lingua russa per i principianti.
U scopu di u travagliu hè di assemblà un kit di distribuzione cù scaricamentu live, interfaccia icewm è navigatore. A piattaforma di destinazione hè virtualbox.
Perchè custruisce a vostra propria distribuzione? Spessu una funziunalità limitata hè necessaria cù risorse limitate. Ancu più spessu in l'automatizazione avete bisognu di creà firmware. L'adattazione di una distribuzione generale per purificà i pacchetti innecessarii è trasfurmendu in firmware hè più intensivu di travagliu chè a custruisce una nova distribuzione. Utilizà Gentoo hà ancu e so limitazioni.
U sistema Buildroot hè assai putente, ma ùn farà nunda per voi. Puderà solu attivà è automatizà u prucessu di assemblea.
Sistemi di custruzzione alternativu (yocto, sistema di custruzzione aperta è altri) ùn sò micca cunsiderati o paragunati.
Induve uttene è cumu principià
U situ di u prughjettu -
Buildroot opera defconfigs per a tavola di destinazione di a custruzione. Defconfig hè un schedariu di cunfigurazione chì guarda solu opzioni chì ùn anu micca valori predeterminati. Hè ellu chì determina ciò chì serà recullatu è cumu. In questu casu, pudete cunfigurà separatamente i cunfigurazioni di busybox, linux-kernel, uglibc, u-boot è barebox bootloaders, ma tutti seranu ligati à u pianu di destinazione.
Dopu avè sbulicatu l'archiviu scaricatu o a clonazione da git, avemu un buildroot prontu per aduprà. Pudete leghje più nantu à a struttura di u repertoriu in u manuale; vi dicu i più impurtanti:
bordu - un repertoriu cù schedarii specifichi per ogni bordu. Questi ponu esse scripts per furmà l'imaghjini di u sistema (iso, sdcart, cpio è altri), un repertoriu overlay, cunfigurazione di kernel, etc.
cunfrunti - a defconfig attuale di u bordu. Defconfig hè una cunfigurazione di scheda incompleta. Memorizza solu paràmetri chì differenu da i paràmetri predeterminati
dl - repertoriu cù codici fonte / fugliali scaricati per l'assemblea
output/destinazione - u sistema di fugliale assemblatu di u SO risultatu. In seguitu, l'imaghjini sò creati da ellu per scaricamentu / installazione
output/host - utilità d'ospiti per l'assemblea
output/build - pacchetti assemblati
L'assemblea hè cunfigurata via KConfig. U listessu sistema hè utilizatu per custruisce u kernel Linux. Lista di i cumandamenti più cumunimenti usati (eseguite in u cartulare buildroot):
- fate menuconfig - chjamate a cunfigurazione di creazione. Pudete ancu aduprà l'interfaccia gràfica (make nconfig, make xconfig, make gconfig)
- fate linux-menuconfig - chjamate a cunfigurazione di u kernel.
- rende pulita - pulisce i risultati di custruzzione (tuttu ciò chì hè almacenatu in output)
- fà - custruisce un sistema. Questu ùn riunisce micca i prucessi digià assemblati.
- make defconfig_name - cambia a cunfigurazione à un defconfig specificu
- make list-defconfigs - mostra una lista di defconfigs
- fà surghjente - basta à scaricà i schedari di stallazione, senza custruisce.
- fate l'aiutu - liste i cumandamenti pussibuli
Note impurtanti è cunsiglii utili
Buildroot ùn ricustruisce micca i pacchetti chì sò digià stati custruiti! Per quessa, pò esse una situazione induve hè necessariu un riassemblamentu cumpletu.
Pudete ricustruisce un pacchettu separatu cù u cumandimu fate packagename-rebuild. Per esempiu, pudete ricustruisce u kernel Linux:
make linux-rebuild
Buildroot guarda u statu di qualsiasi pacchettu creendu schedarii .stamp in u cartulare output/build/$packagename:
Dunque, pudete ricustruisce root-fs è images senza ricustruisce i pacchetti:
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
Variabili utili
buildroot hà un inseme di variàbili per una cunfigurazione faciule
- $TOPDIR - buildroot directory
- $BASEDIR - annuariu OUTPUT
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, target fs build directories.
- $BUILD_DIR - repertoriu cù pacchetti sbulicati è custruitu
Visualizazione
buildroot hà una funzione di visualizazione. Pudete custruisce un diagramma di dipendenza, un graficu di u tempu di creazione, è un graficu di dimensioni di pacchettu in u sistema finali. I risultati sò in forma di fugliali pdf (pudete sceglie da svn, png) in u cartulare output / graph.
Esempii di cumandamenti di visualizazione:
make graph-depends
custruisce un arbre di dependenzamake <pkg>-graph-depends
custruisce un arbulu di dependenza per un pacchettu specificuBR2_GRAPH_OUT=png make graph-build
trama u tempu di creazione cù output PNGmake graph-size
dimensione di u pacchettu
Scripts utili
Ci hè un subdirectory in u cartulare buildroot utili cù script utili. Per esempiu, ci hè un script chì verifica a correttezza di e descrizzioni di u pacchettu. Questu pò esse utile quandu aghjunghje i vostri pacchetti (faraghju questu dopu). U schedariu utils/readme.txt cuntene una descrizzione di sti scripts.
Custruemu una distribuzione di stock
Hè impurtante di ricurdà chì tutte e operazioni sò realizate in nome di un utilizatore regulare, micca root.
Tutti i cumandamenti sò eseguiti in u buildroot. U pacchettu buildroot include digià un set di cunfigurazioni per parechje schede cumuni è virtualizazione.
Fighjemu a lista di cunfigurazioni:
Cambia à a cunfigurazione qemu_x86_64_defconfig
make qemu_x86_64_defconfig
È cuminciamu l'assemblea
make
A custruzione hè cumpleta cù successu, fighjate i risultati:
Buildroot hà compilatu l'imaghjini chì pudete eseguisce in Qemu è verificate chì funzionanu.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
U risultatu hè un sistema chì funziona in qemu:
Crea a vostra propria cunfigurazione di bordu
Aghjunghjite i schedarii di bordu
Fighjemu a lista di cunfigurazioni:
In a lista vedemu pc_x86_64_efi_defconfig. Creemu a nostra propria tavola copiendu da a cunfigurazione:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
Creemu immediatamente un cartulare di bordu per almacenà i nostri scripts, rootfs-overlay è altri schedarii necessarii:
mkdir board/my_x86_board
Cambia à questu defconfig:
make my_x86_board_defconfig
Cusì, avà a cunfigurazione di custruzzione (almacenata in .config in a ràdica di u repertoriu di buildroot) currisponde à a macchina di destinazione d'avvio x86-64 legacy (bios).
Copiemu a cunfigurazione linux-kernel (utile dopu):
cp board/pc/linux.config board/my_x86_board/
Impostazione di i paràmetri di creazione via KConfig
Cuminciamu a cunfigurazione:
make menuconfig
A finestra di KConfig si apre. Hè pussibule cunfigurà cù una interfaccia grafica (make nconfig, make xconfig, make gconfig):
Entremu in a prima sezione Opzioni di destinazione. Quì pudete selezziunà l'architettura di destinazione per quale a custruzione serà realizata.
Opzioni di creazione - ci sò diverse paràmetri di custruzzione quì. Pudete specificà cartulari cù codici fonte, u numeru di fili di custruzzione, specchi per scaricà codici fonte è altri paràmetri. Lasciamu i paràmetri predeterminati.
Toolchain - l'arnesi di custruzzione stessi sò cunfigurati quì. Leghjite più nantu à ellu.
Toolchain type - tipu di toolchain utilizatu. Questu pò esse un toolchain integratu in buildroot o un esternu (pudete specificà u cartulare cù quellu chì hè digià custruitu o l'url per scaricà). Ci sò opzioni supplementari per diverse architetture. Per esempiu, per u bracciu pudete simpricimenti selezziunate a versione Linaro di u toolchain esternu.
Biblioteca C - selezzione di a biblioteca C. L'operazione di tuttu u sistema dipende da questu. Di genere, glibc hè utilizatu, chì sustene tutte e funziunalità pussibuli. Ma pò esse troppu grande per un sistema incrustatu, cusì uglibc o musl sò spessu scelti. Selezziemu glibc (questu serà necessariu più tardi per aduprà systemd).
Kernel Headers è Custom Kernel Headers serie - deve currisponde à a versione di u kernel chì serà in u sistema assemblatu. Per l'intestazione di u kernel, pudete ancu specificà u percorsu à u repository tarball o git.
GCC COMPILER VERSIONS - selezziunate a versione di compilatore per esse aduprata per a custruzione
Abilita u supportu C++ - selezziunate per custruisce cù supportu per e librerie C++ in u sistema. Questu serà utile per noi in u futuru.
Opzioni gcc supplementari - pudete stabilisce opzioni di compilatore supplementari. Ùn avemu micca bisognu per avà.
A cunfigurazione di u sistema permette di stabilisce i parametri futuri di u sistema creatu:
A maiò parte di i punti sò chjaru da u titulu. Fighjemu attente à i seguenti punti:
Percorsu à e tavule di l'utilizatori - tavula cù l'utilizatori da creà (
File d'esempiu. L'utilizatore d'utilizatore serà creatu cù a password admin, automaticamente gid/uid, /bin/sh shell, utilizatore di gruppu predeterminatu, root di u membru di u gruppu, cummentari Foo user
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
Cartulari di overlay di sistema di file di root - repertoriu sovrapposto sopra u target-fs assemblatu. Aggiunge novi fugliali è rimpiazza quelli esistenti.
Scripts persunalizati per eseguisce prima di creà l'imagine di u sistema di filesystem - Scripts eseguiti immediatamente prima di plegà u sistema di filesystem in imagine. Lascemu u script stessu viotu per avà.
Andemu à a sezione Kernel
I paràmetri di u kernel sò stallati quì. U kernel stessu hè cunfiguratu via make linux-menuconfig.
Pudete stabilisce a versione di u kernel in diverse manere: selezziunate da quelli offerti, inserite a versione manualmente, specificà un repository o un tarball ready-made.
Configurazione di u kernel - percorsu à a cunfigurazione di u kernel. Pudete selezziunate a cunfigurazione predeterminata per l'architettura scelta o defocnfig da Linux. A fonte Linux cuntene un set di defconfigs per diversi sistemi di destinazione. Pudete truvà quellu chì avete bisognu
A sezione Pacchetti Target permette di selezziunà quali pacchetti seranu installati in u sistema chì hè custruitu. Lasciamu per avà invariatu. Avemu aghjunghje i nostri pacchetti à sta lista più tardi.
L'imaghjini di u sistema di schedari - una lista di l'imaghjini di u sistema di schedari chì seranu cullate. Aghjunghjite una maghjina iso
Bootloaders - selezzione di bootloaders da cullà. Scegliemu isolinix
Configurazione di Systemd
Systemd hè diventatu unu di i pilastri di Linux, cù u kernel è glibc. Dunque, aghju spustatu u so paràmetru à un articulu separatu.
Configuratu via make menuconfig, poi Pacchetti di destinazione → Strumenti di sistema → systemd. Quì pudete specificà quale servizii di sistema seranu installati è cuminciati quandu u sistema principia.
Salvà a cunfigurazione di u sistema
Salvemu sta cunfigurazione via KConfig.
Allora salvate a nostra defconfig:
make savedefconfig
Configurazione di u Kernel Linux
A cunfigurazione di u kernel Linux hè chjamata da u cumandimu seguente:
make linux-menuconfig
Aghjunghjemu u supportu per a carta video Virtualbox
Aghjunghjemu u supportu di integrazione Virtualbox Guest
Salvà è esci. IMPORTANT: a cunfigurazione serà salvata in output/build/linux-$version/config, ma micca in board/my_x86_board/linux.config
Dunque, avete bisognu di cupià manualmente a cunfigurazione in un locu di almacenamiento:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Dopu à quale avemu da fà una riunione cumpleta di tuttu u sistema. buildroot ùn ricustruisce micca ciò chì hè digià statu custruitu, duvete specificà manualmente i pacchetti per a ricustruzione. Per ùn perde u tempu è i nervi, hè più faciule per ricustruisce un sistema chjucu cumpletamente):
make clean;make
À a fine di a custruzione, lanciate VirtualBox (pruvatu nantu à e versioni 5.2 è 6.0) da u CD. Parametri di u sistema:
Esce da l'iso assemblatu:
Lista di materiali utilizati
- Manuale di buildroot
Source: www.habr.com