Embedded Software - Yocto bumuo ng Raspberry Pi 4 isang screenshot ng isang computer

Yocto bumuo ng Raspberry Pi 4

sa isang docker na kapaligiran

Yocto tumatakbo sa docker container

Sa yocto docs ay may kabanata (2.2.2) para sa pag set up ng CROss PlatformS (CROPS) bilang alternatibo sa pag set up ng isang katutubong linux pc. Ang alternatibong ito ay gumagamit ng docker container upang bumuo ng isang na customize na imahe ng system halimbawa para sa Raspberry Pi.

Sa kasamaang palad may ilang mga maliit na pagkakamali sa dokumentasyon para sa pag set up ng kapaligiran na ito para sa akin sa Mac OS X (Monterey).

Setup docker lalagyan para sa Mac OS X

Para magamit ang CROPS docker sa Linux, Windows at Mac OS X, may ilang mga espesyal na setting na kailangan. Bago i set up ang lalagyan para sa Yocto, kailangan mong lumikha ng isang docker volume upang maiimbak ang mga resulta. Gayundin ang isang docker samba container ay ginagamit upang magbigay ng mga file sa Mac OS X.

Lumikha ng dami ng docker

Sa isang terminal window type ang mga sumusunod na utos:

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

Lumikha at magpatakbo ng isang lalagyan ng samba

Hindi hahayaan ka ng OSX na kumonekta sa isang lokal na tumatakbo na share ng samba. Samakatuwid, kailangan mo munang lumikha ng isang alyas para sa 127.0.0.1 ng 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Pagkatapos ay lumikha ng lalagyan ng samba, na nagbibigay daan sa iyo upang makita ang mga file sa dami ng docker:

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

Dahil lagi kang kakailanganin na magkaroon ng alyas upang kumonekta sa lalagyan ng samba, maaari mong pagsamahin ang pagsisimula ng samba at alias tulad nito:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Ngayon ay maaari mong buksan ang workdir sa file browser. Sa finder pindutin ang "Command-K" at sa address box ng server i-type ang "smb://127.0.0.2/workdir" at i-click ang "Connect". Ngayon dapat mong makita ang nilalaman ng dami ng docker sa tagahanap.

Lumikha at simulan ang lalagyan ng Yocto

Upang lumikha at / o simulan ang uri ng lalagyan ng Yocto sa isang terminal window:

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

Setup build environment sa lalagyan

Kapag sinimulan ang lalagyan ng docker, mayroon kang isang terminal prompt na ganito ang hitsura: "pokyuser@d4ddfe042587:/workdir".

Ngayon ay maaari mong i setup ang build environment.

Clone poky version

Sa aking kaso ginagamit ko ang bersyon ng Yocto 3.4 na may pangalang "Honister", dahil ang mga meta raspberry layer ay hindi magagamit para sa mas bagong mga bersyon ng poky sa oras na ito. Sa unang pagkakataon ay kailangan mong i clone ang poky repository:

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

Kung gusto mong i update si poky sa pinakabagong bersyon:

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

Karagdagang mga layer ng meta para sa Raspberry Pi

Baguhin sa "poky-honister" at i-clone ang mga sumusunod na repositoryo: meta-raspberry, meta-openembedded at kung kinakailangan 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

Setup bumuo ng config

Iwanan ang poky-honister directory, upang ikaw ay nasa /workdir. Ngayon source ang build environment sa script oe-init-build-env.

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

Ang isang bagong direktoryo "rpi-bumuo" - maaari mong pangalanan ito hangga't gusto mo - at isang conf direktoryo na may mga file bblayers.conf, local.conf at templateconf.cfg ay nilikha.

Tulad ng walang editor ng teksto na naka install sa lalagyan, mayroon kang alinman sa i edit ang mga file ng config sa naka mount na dami ng samba sa Mac OS X o kailangang mag install ng isang text editor sa lalagyan. Upang gawin ito, kailangan mong buksan ang isang pangalawang terminal window - habang ang yocto lalagyan ay tumatakbo - at simulan ang isang bash shell sa lalagyan na may root pribilehiyo:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit
Pagkatapos ay maaari mong i edit ang mga file ng config sa lalagyan ng yocto bilang pokyuser.

Tala

Ang editor ay hindi naka install nang permanente. Pagkatapos umalis sa lalagyan at pumasok muli, kailangan mong i install ito muli

#### Idagdag muna ang meta raspberry sa bblayers.conf file
nano conf/bblayers.conf

Idagdag ang "/workdir/poky-honister/meta-raspberrypi " para parang

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

at i-save ito.

Pangalawa edit ang local.conf

I edit ang file local.conf:

nano conf/local.conf

Baguhin ang mga sumusunod na linya:

  • MACHINE ?? = "qemux86-64" -> MACHINE ?? = "raspberrypi4-64"

Depende sa kung aling Raspberry ang gusto mong gamitin (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, atbp)

Uncomment ang mga sumusunod na linya:

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

Idagdag ang sumusunod na mga linya sa dulo, para makakuha ng sdimg para magflash sa SD-card:

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

I save ang local.conf file.

Bitbake ang unang imahe

Ngayon mayroon kang minimal na mga setting upang bumuo ng unang imahe:

bitbake -k core-image-minimal

Sa dokumentasyon ng Yocto makikita mo ang isang maikling paglalarawan ng mga magagamit na paglalarawan ng imahe.

Halimbawa:

  • core-image-minimal: Isang maliit na imahe lamang na may kakayahang payagan ang isang aparato upang mag-boot.
  • core-image-base: Isang console-lamang na imahe na ganap na sumusuporta sa target na hardware ng aparato.
  • core-image-full-cmdline: Isang console-lamang na imahe na may mas buong-tampok na Linux system functionality na naka-install.

Pagkatapos ng ilang sandali - na maaaring serveral oras para sa unang pagkakataon - ang bitbake ay nagtatapos at mahanap mo ang sdimg file sa sumusunod na direktoryo:

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

Mga dagdag na configuration

Mga dagdag na configuration ng Raspberry hardware

Upang magtakda ng mga tiyak na setting ng hardware, maaari kang magkaroon ng isang hitsura upang extra-apps.md at extra-build-config.md. Makikita mo rin ang mga file na ito sa meta raspberrypi/docs directory.

Ang meta layer ay nagbibigay din ng isang configuration ng imahe "rpi-test-image" na gagamitin sa bitbake. Ang imahe ay batay sa "core image base" na kinabibilangan ng karamihan sa mga pakete sa meta raspberrypi at ilang mga sample ng media.

bitbake -k rpi-test-image

 

Mga dagdag na configuration ng software

Depende sa kung anong configuration ng build ng imahe ang ginagamit mo, maaaring kailanganin mong mag install ng karagdagang mga pakete ng software.

Maaari mong gawin ito, sa pamamagitan ng pagdaragdag ng ilang mga setting sa lokal.conf file.

Halimbawa idagdag ang sumusunod na mga linya, upang itakda ang ssh-server, pi-user at 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"

O magdagdag ng python:

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

Tala

Mahalaga ang panimulang espasyo sa " python3 python3-pip rpi-gpio raspi-gpio", dahil ang teksto ay inilakip sa umiiral na configuration at kailangang paghiwalayin sa espasyong ito.

Lisensya sa Copyright

Copyright © 2022 Interelectronix e.K.
Ang source code na ito ng Proyekto ay lisensyado sa ilalim ng GPL-3.0 lisensya.

Mga Pagkilala

Mga pinagkukunan na ginamit sa paglikha ng Tagubilin na ito:

Salamat sa lahat.