Software încorporat - Yocto construi Raspberry Pi 4: o captură de ecran a unui computer

Yocto construi Raspberry Pi 4

într-un mediu Docker

Open source Yocto Ghidul proiectului

sfaturi de configurare Linux personalizat pe Raspberry Pi cu Docker

Open source Yocto Project ghid pentru Linux personalizat pe Raspberry Pi cu sfaturi de configurare Docker

Scufundați-vă în Proiectul Yocto pentru sisteme Linux personalizate pe orice hardware. Perfect pentru dezvoltatori și entuziaști ai sistemelor încorporate . Începeți să construiți acum!

Explorați Proiectul Yocto, o inițiativă open-source pentru crearea de sisteme Linux personalizate pentru orice arhitectură hardware. Învățați să utilizați CROPS pentru dezvoltarea pe mai multe platforme, configurați containere Docker și construiți imagini Linux personalizate pentru dispozitive încorporate și IoT. Ghidul nostru acoperă configurarea pe macOS, configurarea mediilor de construcție și optimizarea pentru Raspberry Pi. Indiferent dacă sunteți începător sau expert, găsiți cele mai bune practici, instrumente și asistență comunitară pentru nevoile proiectului dvs. Linux.

Yocto rulează în container docker

În documentele yocto există un capitol (2.2.2) pentru configurarea CROss PlatformS (CROPS) ca alternativă la configurarea unui computer linux nativ. Această alternativă utilizează containerul docker pentru a construi o imagine de sistem personalizată, de exemplu pentru Raspberry Pi.

Din păcate, există câteva mici greșeli în documentația pentru configurarea acestui mediu pentru mine pe Mac OS X (Monterey).

Container docker de configurare pentru Mac OS X

Pentru a utiliza docker-ul CROPS pe Linux, Windows și Mac OS X, sunt necesare câteva setări speciale. Înainte de a configura containerul pentru Yocto, trebuie să creați un volum docker pentru a stoca rezultatele. De asemenea, un container docker samba este utilizat pentru a furniza fișierele în Mac OS X.

Creați volumul docker

Într-o fereastră terminal tastați următoarele comenzi:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

Creați și rulați un container de samba

OSX nu vă va permite să vă conectați la o partajare de samba care rulează local. Prin urmare, mai întâi trebuie să creați un alias pentru 127.0.0.1 din 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Apoi creați containerul samba, care vă permite să vedeți fișierele din volumul docker:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

Deoarece va trebui întotdeauna să aveți aliasul pentru a vă conecta la containerul de samba, puteți combina începutul samba și alias astfel:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Acum puteți deschide workdir în browserul de fișiere. În căutător apăsați "Command-K" și în caseta de adrese a serverului tastați "smb://127.0.0.2/workdir" și faceți clic pe "Conectați". Acum ar trebui să vedeți conținutul volumului docker în căutător.

Creați și porniți containerul Yocto

Pentru a crea și/sau porni tipul de container Yocto într-o fereastră terminală:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

Configurați mediul de construire în container

Când containerul docker este pornit, aveți un prompt terminal care arată astfel: "pokyuser@d4ddfe042587:/workdir".

Acum puteți configura mediul de construire.

Clonați versiunea poky

În cazul meu, folosesc versiunea Yocto 3.4 cu numele "Honister", deoarece straturile meta-zmeură nu sunt disponibile pentru versiunile mai noi în acest moment. Pentru prima dată trebuie să clonați depozitul poky:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

Dacă doriți să actualizați poky la cea mai recentă versiune:

cd poky-honister
git pull --all --prune

Meta straturi suplimentare pentru Raspberry Pi

Treceți la "poky-honister" și clonați următoarele depozite: meta-zmeură, meta-openembedded și, dacă este necesar, 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

Configurarea construcției de configurare

Părăsiți directorul poky-honister, astfel încât să vă aflați în /workdir. Acum sursa mediului de construire cu scriptul oe-init-build-env.

cd ..
source poky-honister/oe-init-build-env rpi-build

Se creează un nou director "rpi-build" - îl puteți numi după cum doriți - și un director conf cu fișierele bblayers.conf, local.conf și templateconf.cfg.

Deoarece nu există un editor de text instalat în container, trebuie fie să editați fișierele de configurare în volumul samba montat în Mac OS X, fie trebuie să instalați un editor de text în container. Pentru a face acest lucru, trebuie să deschideți oa doua fereastră terminală - în timp ce containerul yocto rulează - și să porniți o coajă bash în container cu privilegii root:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Apoi, puteți edita fișierele de configurare din containerul yocto ca pokyuser.

Notă

Editorul nu este instalat permanent. După ce părăsiți containerul și intrați din nou, trebuie să îl instalați din nou

#### Mai întâi adăugați meta-zmeura în fișierul bblayers.conf
nano conf/bblayers.conf

Adăugați "/workdir/poky-honister/meta-raspberrypi ", astfel încât să pară

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

și salvați-l.

A doua editare a local.conf

Editați fișierul local.conf:

nano conf/local.conf

Modificați următoarele linii:

-MAȘINĂ?? = "qemux86-64" -> MAȘINĂ ?? = "zmeură4-64"

În funcție de zmeura pe care doriți să o utilizați (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64 etc.)

Decomentați următoarele rânduri:

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

Adăugați următoarele linii la sfârșit, pentru a obține un sdimg să clipească pe un card SD:

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

Salvați fișierul local.conf.

Bitbake prima imagine

Acum aveți setări minime pentru a construi prima imagine:

bitbake -k core-image-minimal

În documentația Yocto găsiți o scurtă descriere a descrierilor imaginilor disponibile.

De exemplu:

  • core-image-minimal: O imagine mică capabilă să permită pornirea unui dispozitiv.
  • core-image-base: O imagine numai pentru consolă care acceptă pe deplin hardware-ul dispozitivului țintă.
  • core-image-full-cmdline: O imagine numai pentru consolă, cu mai multe funcționalități complete ale sistemului Linux instalate.

După un timp - care ar putea fi ore serverale pentru prima dată - bitbake se termină și găsiți fișierul sdimg în următorul director:

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

Configurații suplimentare

Configurații hardware suplimentare de zmeură

Pentru a seta setări hardware specifice, puteți consulta extra-apps.md și extra-build-config.md. Găsiți aceste fișiere și în directorul meta-raspberrypi/docs.

Meta stratul oferă, de asemenea, o configurație a imaginii "rpi-test-image" pentru a fi utilizată cu bitbake. Imaginea se bazează pe "core-image-base" care include majoritatea pachetelor din meta-raspberrypi și unele mostre media.

bitbake -k rpi-test-image

 

Configurații software suplimentare

În funcție de configurația de compilare a imaginilor pe care o utilizați, poate fi necesar să instalați pachete software suplimentare.

Puteți face acest lucru, adăugând unele setări la fișierul local.conf.

De exemplu, adăugați următoarele linii, pentru a seta ssh-server, pi-user și 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"

Sau adăugați python:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

Notă

Spațiul de început din "python3 python3-pip rpi-gpio raspi-gpio" este important, deoarece textul este anexat la configurația existentă și trebuie separat cu acest spațiu.

Licență pentru drepturi de autor

Copyright © 2022 Interelectronix e.K.
Acest cod sursă al Proiectului este licențiat sub licența GPL-3.0.

Aprecieri

Surse utilizate pentru a crea aceste instrucțiuni:

Mulțumesc tuturor.