Software incorporato - Yocto costruire Raspberry Pi 4 uno screenshot di un computer

Yocto build Raspberry Pi 4

in un ambiente docker

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.