Yocto Project è un costruttore di distribuzioni Linux incorporato che fa uso di molti altri progetti open source. Una distribuzione Linux è una raccolta di pacchetti software e criteri e sono disponibili centinaia di distribuzioni Linux. La maggior parte di questi non sono progettati per sistemi embedded e non hanno la flessibilità necessaria per ottenere dimensioni di ingombro target e modifiche alla funzionalità, oltre a non soddisfare bene i sistemi con risorse limitate.
Il Progetto Yocto, al contrario, non è una distribuzione di per sé; ti permette di creare una distribuzione Linux progettata per il tuo particolare sistema embedded. Il progetto Yocto fornisce una distribuzione di riferimento per Linux embedded, chiamata Poky.
Il progetto Yocto ha alla base i progetti BitBake e OpenEmbedded-Core (OE-Core). Insieme formano il sistema di compilazione Yocto che costruisce i componenti necessari per un prodotto Linux embedded, vale a dire:
- Un'immagine del bootloader
- Un'immagine del kernel Linux
- Un'immagine del filesystem radice
- Toolchain e kit di sviluppo software (SDK) per lo sviluppo di applicazioni
Con questi, il progetto Yocto copre le esigenze sia degli sviluppatori di sistemi che di applicazioni. Quando Yocto Project viene utilizzato come ambiente di integrazione per bootloader, kernel Linux e applicazioni per lo spazio utente, lo chiamiamo sviluppo del sistema.
1. Per aprire il menuconfig del kernel Linux (qui sto usando il livello meta-intel), esegui i seguenti comandi.
bitbake -c menuconfig linux-intel
Se stai usando yocto kernel sarà:
bitbake -c menuconfig linux-yocto
2. Per verificare se la tua ricetta bbappend viene analizzata da bitbake, esegui il seguente comando:
bitbake-layers show-appends
3. Per aggiungere un particolare pacchetto nel tuo file system di root.
Apri il tuo file local.conf e aggiungi il nome della ricetta qui sotto:
IMAGE_INSTALL += "recipe-name"
Ad esempio:
IMAGE_INSTALL += "libusb"
o
IMAGE_INSTALL_append = "libusb"
Se vuoi che questo pacchetto sia incluso solo in una particolare immagine,
IMAGE_INSTALL_append_pn-[image-name] = "recipe-name"
Ad esempio:
IMAGE_INSTALL_append_pn-core-image-sato = "libusb"
4. Per includere un modulo del kernel nel file system di root:
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-module-cp210x"
5. Per caricare automaticamente il modulo all'avvio:
KERNEL_MODULE_AUTOLOAD += "cp210x"
6. Comando per controllare l'elenco delle immagini disponibili.
Esegui il seguente comando nella directory di origine:
$ ls meta*/recipes*/images/*.bb
7. Comando per eseguire l'immagine generata in QEMU:
$ runqemu [machine] [zImage] [filesystem]
Ad esempio:
$ runqemu qemux86 core-image-minimal
8. Comando per elencare le macchine disponibili:
$ ls meta*/conf/machine/*.conf
9. Comando per generare SDK per una particolare immagine:
$ bitbake [imagename] -c populate_sdk
Ad esempio:
$ bitbake core-image-full-cmdline -c populate_sdk
10. Ordine in cui tutte le attività eseguite sono archiviate in:
[build directory]/tmp/work/[machine toolchain]/[package name]/[package version]/temp/log.task_order
Ad esempio:
build/tmp/work/corei7-64-poky-linux/grep/3.1-r0/temp/log.task_order
11. Genera informazioni sull'albero delle dipendenze nella sintassi del punto:
$ bitbake -g core-image-minimal
Il comando precedente genera un grafico delle dipendenze. Bitbake crea file pn-buildlist, ricetta-depends.dot e task-depends.dot.
- elenco di compilazione pn :Semplice elenco di pacchetti che verranno compilati
- ricetta-dipende.dot :mostra le dipendenze tra le ricette
- attività-dipende.dot :mostra le dipendenze tra le attività.
12. Visualizza le variabili ambientali:
$ bitbake -e [recipe/target name]
Ad esempio:
$ bitbake -e core-image-minimal | grep ^SDKMACHINE
13. Abilita output dettagliato delle attività della shell:
$ bitbake -v [recipe/target name]
Ad esempio:
$ bitbake -v core-image-minimal
14. Continua bitbake anche dopo l'errore. Questo sarà utile quando hai avviato una build e sei andato a pranzo e non vuoi che bitbake si interrompa se non è in grado di recuperare un file su Internet.
$ bitbake -k [target]
Ad esempio:
$ bitbake -k core-image-minimal
15. Forza l'esecuzione della destinazione anche se è disponibile una cache di stato.
$ bitbake -f [target/recipe name]
Ad esempio:
$ bitbake -f busybox