Guida al progetto Yocto open source
Guida open source Yocto Project per Linux personalizzato su Raspberry Pi con suggerimenti per la configurazione di Docker
Immergiti nel progetto Yocto per sistemi Linux personalizzati su qualsiasi hardware. Perfetto per sviluppatori e appassionati di sistemi embedded . Inizia subito a costruire!
Esplora il progetto Yocto, un'iniziativa open source per la creazione di sistemi Linux personalizzati per qualsiasi architettura hardware. Scopri come usare CROPS per lo sviluppo multipiattaforma, configurare i container Docker e creare immagini Linux personalizzate per dispositivi embedded e IoT. La nostra guida illustra l'installazione su macOS, la configurazione degli ambienti di compilazione e l'ottimizzazione per Raspberry Pi. Che tu sia un principiante o un esperto, trova le best practice, gli strumenti e il supporto della community per le esigenze del tuo progetto Linux.
Yocto in esecuzione in container docker
Nei documenti yocto c'è un capitolo (2.2.2) per impostare CROss PlatformS (CROPS) come alternativa alla configurazione di un pc Linux nativo. Questa alternativa utilizza il container docker per creare un'immagine di sistema personalizzata, ad esempio per il Raspberry Pi.
Purtroppo ci sono alcuni piccoli errori nella documentazione per la configurazione di questo ambiente per me su Mac OS X (Monterey).### Configurazione del container docker per Mac OS X
Per utilizzare il docker CROPS su Linux, Windows e Mac OS X, sono necessarie alcune impostazioni speciali. Prima di cofigurare il container per Yocto, è necessario creare un volume docker per archiviare i risultati. Anche un container docker samba viene utilizzato per fornire i file in Mac OS X.
Crea volume docker
In una finestra di terminale, digita i seguenti comandi:
docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir
Crea ed esegui un container samba
OSX non ti permetterà di connetterti a una condivisione samba in esecuzione localmente. Pertanto, è innanzitutto necessario creare un alias per 127.0.0.1 di 127.0.0.2.
sudo ifconfig lo0 127.0.0.2 alias up
Quindi crea il container samba, che consente di visualizzare i file nel volume docker:
docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba
Poiché sarà sempre necessario avere l'alias per connettersi al container samba, è possibile combinare l'inizio di samba e l'alias in questo modo:
docker start samba && sudo ifconfig lo0 127.0.0.2 alias up
Ora è possibile aprire il workdir nel browser dei file. Nel finder premi "Command-K" e nella casella dell'indirizzo del server digita "smb://127.0.0.2/workdir" e fai clic su "Connect". Ora dovresti vedere il contenuto del volume del docker nel finder.
Crea e avvia il container Yocto
Per creare e/o avviare il container Yocto digita in una finestra terminale:
docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir
Impostazione dell'ambiente di generazione nel container
Quando il container docker viene avviato, viene visualizzato un prompt del terminale simile al seguente: "pokyuser@d4ddfe042587:/workdir".
Ora è possibile configurare l'ambiente di generazione.
Clone versione poky
Nel mio caso uso la versione 3.4 Yocto con il nome "Honister", perché i livelli meta-raspberry non sono disponibili per le versioni più recenti poky in questo momento. Per la prima volta è necessario clonare il repository poky:
git clone -b honister git://git.yoctoproject.org/poky poky-honister
Se si desidera aggiornare poky all'ultima versione:
cd poky-honister
git pull --all --prune
Meta layer aggiuntivi per Raspberry Pi
Passa a "poky-honister" e clona i seguenti repository: meta-raspberry, meta-openembedded e, se necessario, meta-qt5
cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git
Imposta configurazione build
Lascia la directory poky-honister, in modo da trovarti in /workdir. Ora crea l'ambiente di compilazione con lo script oe-init-build-env.
cd ..
source poky-honister/oe-init-build-env rpi-build
Viene creata una nuova directory "rpi-build", che è possibile denominare come si desidera, e una directory conf con i file bblayers.conf, local.conf e templateconf.cfg.
Poiché nel container non è installato alcun editor di testo, è necessario modificare i file di configurazione nel volume samba montato in Mac OS X oppure installare un editor di testo nel container. Per fare ciò, è necessario aprire una seconda finestra del terminale, mentre il contenitore yocto è in esecuzione, e avviare una shell bash nel container con privilegi di root:
docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Quindi è possibile modificare i file di configurazione nel container yocto come pokyuser.
Nota:
L'editor non è installato in modo permanente. Dopo aver lasciato il container e rientrare, è necessario installarlo di nuovo
Aggiungi prima il meta-raspberry nel file bblayers.conf
nano conf/bblayers.conf
Aggiungi "/workdir/poky-honister/ meta-raspberrypi " in modo che sembri
BBLAYERS ?= " \
/workdir/poky-honister/meta \
/workdir/poky-honister/meta-poky \
/workdir/poky-honister/meta-yocto-bsp \
/workdir/poky-honister/meta-raspberrypi \
"
e salvalo.
Quindi modifica il local.conf
Modifica il file local.conf:
nano conf/local.conf
Modifica le seguenti righe:
- MACCHINA ??= "qemux86-64" -> MACCHINA ??= "raspberrypi4-64"
A seconda di quale Raspberry desideri utilizzare (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, ecc.)
Decommenta le seguenti righe:
- DL_DIR ?= "${TOPDIR}/downloads"
- SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
- TMPDIR = "${TOPDIR}/tmp"
Aggiungi le seguenti righe alla fine, per ottenere uno sdimg che lampeggi su una scheda SD:
- IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
- SDIMG_ROOTFS_TYPE = "ext4.xz"
Salva il file local.conf.
Prepara la prima immagine
Ora hai le impostazioni minime per creare la prima immagine:
bitbake -k core-image-minimal
Nella documentazione Yocto si trova una breve descrizione delle descrizioni delle immagini disponibili.Ad esempio:
- core-image-minimal: una piccola immagine in grado di consentire l'avvio di un dispositivo.
- core-image-base: un'immagine di sola console che supporta completamente l'hardware del dispositivo di destinazione.
- core-image-full-cmdline: un'immagine di sola console con funzionalità di sistema Linux più complete installate.
Dopo un po' (si potrebbe trattare di diverse ore per la prima volta, il bitbake finisce e si trova il file sdimg nella seguente directory:
/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64
Configurazioni extra
Configurazioni hardware aggiuntive per Raspberry
Per impostare impostazioni hardware specifiche, puoi dare un'occhiata a extra-apps.md e extra-build-config.md.Trovi questi file anche nella directory meta-raspberrypi/docs.
Il meta layer fornisce anche una configurazione di immagine "rpi-test-image" da utilizzare con bitbake. L'immagine è basata su "core-image-base" che include la maggior parte dei pacchetti in meta-raspberrypi e alcuni campioni multimediali.
bitbake -k rpi-test-image
Configurazioni software aggiuntive
A seconda della configurazione di generazione delle immagini in uso, potrebbe essere necessario installare pacchetti software aggiuntivi.
A tale scopo, è possibile aggiungere alcune impostazioni al file local.conf.
Ad esempio aggiungi le seguenti righe, per impostare ssh-server, pi-user e systemd:
## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"
## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"
Oppure aggiungi python:
IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"
Nota:
Lo spazio iniziale in "python3 python3-pip rpi-gpio raspi-gpio" è importante, perché il testo è aggiunto alla configurazione esistente e deve essere separato con questo spazio.
Licenza sul diritto d'autore
Copyright © 2022 Interelectronix e.K.
Questo codice sorgente del Progetto è concesso in licenza sotto la licenza **GPL-3.0 * *.
Riconoscimenti
Sorgenti utilizzate per creare queste istruzioni:
Grazie a tutti.