Руководство по проекту Yocto с открытым исходным кодом
Руководство по проекту Yocto с открытым исходным кодом для пользовательского Linux на Raspberry Pi с советами по настройке Docker
Погрузитесь в проект Yocto для пользовательских систем Linux на любом оборудовании. Идеально подходит для разработчиков и энтузиастов встраиваемых систем . Начните строить прямо сейчас!
Познакомьтесь с проектом Yocto — инициативой с открытым исходным кодом для создания пользовательских систем Linux для любой аппаратной архитектуры. Научитесь использовать CROPS для кроссплатформенной разработки, настраивайте контейнеры Docker и создавайте специализированные образы Linux для встраиваемых и IoT-устройств. В нашем руководстве рассказывается о настройке на macOS, настройке сред сборки и оптимизации для Raspberry Pi. Независимо от того, являетесь ли вы новичком или экспертом, вы найдете лучшие практики, инструменты и поддержку сообщества для вашего проекта Linux.
Yocto работает в docker-контейнере
В документации Yocto есть глава (2.2.2) для настройки CROss PlatformS (CROPS) в качестве альтернативы настройке стандартного linux на ПК.В этом случае используется Docker-контейнер для создания персонализированного образа системы, например, для Raspberry Pi.
К сожалению, в документации по настройке этой среды для меня на Mac OS X (Monterey) есть небольшие ошибки.### Настройка Docker-контейнера для Mac OS X
Для использования док-сервера CROPS в Linux, Windows и Mac OS X необходимо выполнить некоторые специальные настройки. Перед настройкой контейнера для Yocto необходимо создать том docker для хранения результатов. Также для предоставления файлов в Mac OS X используется контейнер docker samba.
Создайте том docker
В окне терминала введите следующие команды:
docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir
# Создайте и запустите контейнер samba
OSX не позволит подключиться к локально запущенному общедоступному ресурсу samba. Поэтому сначала нужно создать псевдоним для 127.0.0.1 и указать его как 127.0.0.2.
sudo ifconfig lo0 127.0.0.2 alias up
Затем создайте контейнер samba, который позволяет просматривать файлы в томе docker:
docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba
Поскольку для подключения к контейнеру samba вам всегда понадобится псевдоним, вы можете объединить запуск samba и псевдоним, например:
docker start samba && sudo ifconfig lo0 127.0.0.2 alias up
Теперь вы можете открыть рабочую папку (workdir) в браузере файлов. В поиске нажмите «Command-K» и в поле адреса сервера введите «smb://127.0.0.2/workdir» и нажмите «Connect». Теперь вы должны увидеть содержимое тома docker в поиске.
Создайте и запустите контейнер Yocto
Чтобы создать и/или запустить контейнер с типом Yocto в окне терминала:
docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir
Настройка среды сборки в контейнере
При запуске docker-контейнера в терминале появляется запрос, который выглядит так: «pokyuser@d4ddfe042587:/workdir».
Теперь вы можете настроить среду сборки.
Клонируйте poky-версию
В моем случае я использую Yocto версии 3.4 с именем «Honister», потому что в данный момент слои meta-raspberry не доступны для более новых poky версий. Сначала нужно клонировать репозиторий poky:
git clone -b honister git://git.yoctoproject.org/poky poky-honister
Если вы хотите обновить poky до последней версии:
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 с файлами bblayers.conf, local.conf и templateconf.cfg.
Поскольку в контейнере не установлен текстовый редактор, необходимо либо отредактировать файлы конфигурации в смонтированном томе samba в Mac OS X, либо установить текстовый редактор в контейнер. Для этого необходимо открыть второе окно терминала – во время работы yocto контейнера – и запустить в контейнере оболочку bash с правами root:
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 на SD-карту:
- IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
- SDIMG_ROOTFS_TYPE = "ext4.xz"
Сохраните файл local.conf.
Bitbake первый образ
Теперь у вас есть минимальные настройки для создания первого образа:
bitbake -k core-image-minimal
В документации Yocto вы найдете краткое описание доступных описаний образов.Например:
- core-image-minimal – небольшой образ, позволяющий загрузить устройство.
- core-image-base – образ только для консоли, который полностью поддерживает оборудование целевого устройства.
- core-image-full-cmdline: консольный образ с более полной функциональностью системы Linux.
Через некоторое время, которое в первый раз может составить несколько часов, процес bitbake будет завершен и вы найдете файл sdimg в следующем каталоге:
/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64
Дополнительные настройки
Дополнительные конфигурации оборудования Raspberry
Чтобы задать определенные настройки оборудования, вы можете обратиться к extra-apps.md и extra-build-config.md.Вы также можете найти эти файлы в каталоге meta-raspberrypi/docs.
Мета-слой также предоставляет конфигурацию образа «rpi-test-image» для использования с bitbake. Образ основан на «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"
Или добавьте python:
IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"
Примечание
Начальный пробел в " python3 python3-pip rpi-gpio raspi-gpio" важен, поскольку текст добавляется к существующей конфигурации и его необходимо отделить этим пробелом.
Лицензия на авторские права
Авторское право © 2022 Interelectronix e.K.
Данный исходный код проекта лицензирован под лицензией GPL-3.0.