نرم افزار جاسازی شده - Yocto ساخت Raspberry Pi 4 یک تصویر از یک کامپیوتر

Raspberry Pi 4 بیلد Yocto

در محیط داکر

Yocto در یک محفظه داکر اجرا می‌شود

در اسناد Yocto یک فصل (2.2.2) برای راه اندازی پلتفرم‌های CROss (CROPS) به عنوان جایگزینی برای راه اندازی یک کامپیوتر لینوکس نتیو وجود دارد. این راه جایگزین از محفظه داکر برای ساخت یک ایمیج سیستم سفارشی، مثلاً برای Raspberry Pi استفاده می‌کند.متأسفانه در مستندات اشتباهات کوچکی برای راه‌اندازی این محیط برای من در Mac OS X (مونتری) وجود دارد.### تنظیم محفظه داکر برای Mac OS X

برای استفاده از داکر CROPS در لینوکس، ویندوز و Mac OS X، به تنظیمات خاصی نیاز است. قبل از تنظیم محفظه برای Yocto، باید یک حجم داکر برای ذخیره نتایج ایجاد کنید. همچنین برای ارائه فایل‌ها در Mac OS X از یک محفظه داکر سامبا استفاده می‌شود.

ایجاد حجم داکر

در یک پنجره ترمینال، دستورات زیر را تایپ کنید:

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

ساخت و اجرای یک محفظه سامبا

OSX به شما اجازه نمی‌دهد به اشتراک محلی سامبا متصل شوید. بنابراین، ابتدا باید یک نام مستعار برای 127.0.0.1 از 127.0.0.2 ایجاد کنید.

sudo ifconfig lo0 127.0.0.2 alias up

سپس محفظه سامبا را ایجاد کنید که به شما امکان می‌دهد فایل‌ها را در فضای داکر مشاهده کنید:

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

از آنجا که برای اتصال به محفظه سامبا همیشه باید نام مستعار داشته باشید، می توانید شروع سامبا و نام مستعار را این گونه ترکیب کنید:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

اکنون می توانید workdir را در مرورگر فایل باز کنید. در فایندر روی "Command-K" کلیک کرده و در کادر آدرس سرور عبارت "smb://127.0.0.2/workdir" را تایپ کنید و روی "Connect" کلیک کنید. اکنون باید محتوای حجم داکر را در فایندر مشاهده کنید.

ایجاد و راه اندازی محفظه Yocto

برای ایجاد و/یا راه‌اندازی محفظه Yocto در پنجره ترمینال تایپ کنید:

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

محیط ساخت را در محفظه راه‌اندازی کنید

هنگامی که محفظه داکر راه اندازی می شود، یک اعلان ترمینال مشابه این خواهید داشت: "pokyuser@d4ddfe042587:/workdir".

اکنون می توانید محیط ساخت را راه اندازی کنید.

کلون‌کردن نسخه پوکی

من از نسخه 3.4 Yocto با نام "Honister" استفاده می‌کنم، چون فعلاً لایه‌های meta-raspberry برای نسخه‌های جدیدتر پوکی در دسترس نیست. اولین بار باید مخزن پوکی را کلون کنید:

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

اگر می خواهید پوکی را به آخرین نسخه به‌روزرسانی کنید:

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

لایه‌های متای اضافی برای Raspberry Pi

به "poky-honister" تغییر دهید و این مخازن را کلون کنید: meta-raspberry، meta-openembedded و در صورت نیاز 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

پیکربندی ساخت را تنظیم کنید

دایرکتوری poky-honister را ترک کنید تا در /workdir باشید. اکنون اسکریپت oe-init-build-env را وارد محیط بیلد کنید.

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

یک دایرکتوری جدید "rpi-build" - می توانید آن را به دلخواه نام گذاری کنید - و یک دایرکتوری conf با فایل های blayers.conf، local.conf و templateconf.cfg ایجاد می شود.

از آنجا که هیچ ویرایشگر متنی در محفظه نصب نشده است، یا باید فایل های پیکربندی را در حجم سامبای نصب شده در Mac OS X ویرایش کنید یا باید یک ویرایشگر متن را در محفظه نصب کنید. برای انجام این کار، باید پنجره ترمینال دوم را باز کنید - در حالی که محفظه yocto در حال اجرا است - و یک پوسته bash با مجوزهای روت در محفظه راه اندازی کنید:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

سپس می‌توانید فایل‌های پیکربندی موجود در محفظه yocto را به‌عنوان pokyuser ویرایش کنید.

توجه

ویرایشگر به صورت دائمی نصب نشده است. پس از خروج از محفظه و ورود مجدد به آن، باید دوباره آن را نصب کنید

در گام اول meta-raspberry را به فایل bblayers.conf اضافه کنید

nano conf/bblayers.conf

"/workdir/poky-honister/meta-raspberrypi " را به همین شکل اضافه کرده

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

و آن را ذخیره کنید.

در گام دوم local.conf را ویرایش کنید

فایل local.conf را ویرایش کنید:

nano conf/local.conf

خطوط زیر را تغییر دهید:

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

بسته به اینکه می‌خواهید از کدام Raspberry استفاده کنید (raspberrypi0، raspberrypi0w، raspberrypi3، raspberrypi3-64، raspberrypi4، raspberrypi4-64، و غیره)

خطوط زیر را از حالت کامنت خارج کنید:

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

خطوط زیر را در انتها اضافه کنید تا یک sdimg برای فلش شدن به یک کارت اس‌دی داشته باشید:

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

فایل local.conf را ذخیره کنید.

بیت بیک اولین ایمیج

اکنون حداقل تنظیمات برای ساخت اولین ایمیج دارید:

bitbake -k core-image-minimal

در مستندات Yocto توضیح کوتاهی از توضیحات ایمیج موجود مشاهده می‌کنید.

برای مثال:

  • core-image-minimal: یک ایمیج کوچک که فقط می تواند به دستگاه اجازه بوت شدن را بدهد.
  • core-image-base: یک ایمیج فقط-کنسول که به طور کامل از سخت افزار دستگاه مورد نظر پشتیبانی می کند.
  • core-image-full-cmdline: یک ایمیج فقط-کنسول با قابلیت‌های عملیاتی کامل‌تر و بیشتر سیستم لینوکس.

پس از مدتی - که برای اولین بار می تواند چندین ساعت باشد - کار بیت بیک تمام می شود و می‌توانید فایل sdimg را در دایرکتوری زیر مشاهده کنید:

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

پیکربندی های اضافی

پیکربندی های سخت افزاری اضافی Raspberry

برای تنظیمات سخت افزاری خاص، می توانید نگاهی به extra-apps.md و extra-build-config.md بیندازید. این فایل ها را نیز در دایرکتوری meta-raspberrypi/docs مشاهده می کنید.

لایه متا همچنین یک پیکربندی ایمیج "rpi-test-image" را برای استفاده با بیت بیک فراهم می کند. این ایمیج مبتنی بر "core-image-base" است که شامل اکثر بسته‌های موجود در meta-raspberrypi و برخی نمونه‌های رسانه می شود.

bitbake -k rpi-test-image

پیکربندی‌های نرم افزاری اضافی

بسته به اینکه از چه پیکربندی ساخت ایمیجی ستفاده می کنید، ممکن است نیاز به نصب بسته های نرم افزاری اضافی داشته باشید.

می توانید این کار را با افزودن برخی تنظیمات به فایل local.conf انجام دهید.

به عنوان مثال خطوط زیر را برای تنظیم ssh-server، pi-user و 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"

یا پایتون را اضافه کنید:

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

توجه

فضای ابتدایی در "python3 python3-pip rpi-gpio raspi-gpio " مهم است، زیرا متن به پیکربندی موجود اضافه شده است و باید با این فاصله جدا شود.

مجوز کپی رایت

کپی‌رایت © 2022 Interelectronix e.K.این کد منبع پروژه دارای مجوز GPL-3.0 است.

قدردانی

منابع مورد استفاده برای ایجاد این دستورالعمل:

با تشکر از همه.