Ако се занимавате с вградени системи или интернет на нещата, рано или късно ще попаднете на проекта Yocto. Това е основата, върху която хиляди екипи изграждат своя „собствена“ Linux дистрибуция., съобразен с вашия хардуер и изисквания. Това не е просто поредната дистрибуция, а набор от инструменти, метаданни и процеси, които издигат персонализирането и възпроизводимостта на следващото ниво.
В това ръководство ще разберете, без повече приказки, какво е Yocto и какво не е, защо е толкова широко разпространен, как е съставен (OpenEmbedded, BitBake и Poky), от какво се състои Layer Model, какви инструменти обикалят около него (Toaster, CROPS, eSDK...), как всъщност се изгражда изображение, какви опции за актуализиране съществуват, какво предлага по отношение на сигурността и как се управлява и версира проектът.Освен това ще видите концепции и практически примери (reTerminal/Raspberry Pi), които ще ви помогнат да го приложите в ежедневието си.
Какво представлява проектът Йокто?
Проектът Yocto е съвместна инициатива, спонсорирана от фондация Linux, която предоставя градивните елементи за създаване на персонализирани Linux дистрибуции за вградени и IoT устройства. независимо от хардуерната архитектураОснована е през 2010 г. и пуска първата си версия през 2011 г., подкрепена от около две дузини организации и в тясно сътрудничество с OpenEmbedded.
Целта му е да подобри жизнения цикъл на вградения софтуер: той предлага оперативно съвместими инструменти, метаданни и работни процеси, за да направи изграждането на система бързо, повторяемо и напълно персонализируемо. Комбинацията Yocto + OpenEmbedded + BitBake описва как да получите, конфигурирате, компилирате, пакетирате и асемблирате вашата система. с хирургическа прецизност.
През 2018 г. ARM и Intel обединиха сили в рамките на Yocto, за да улеснят споделянето на код във вградените системи, засилване на неутралността на платформите и поддръжката на множество архитектуриДнес проектът се използва в устройства, вариращи от скромни платки до сложни промишлени продукти.
Yocto не ви обвързва: той е независим от производителя и формата на пакета, така че можете да избирате между deb, rpm или ipk и да следвате детерминистичен модел на изграждане. В допълнение към изображенията на устройствата, можете да генерирате персонализирани вериги от инструменти и SDK. за разработване на приложения и отстраняване на грешки.

Защо да използваме Yocto във вградени системи
Голямото предимство е персонализирането. С Yocto създавате операционна система с точното количество: елиминирате това, от което се нуждаете, намалявате повърхността за атака и теглото.и вие настройвате производителността и потреблението. Не зависите от решенията на дистрибуция с общо предназначение.
Друга важна причина е възпроизводимостта. Всичко (слоеве, рецепти, конфигурации) може да бъде версирано в хранилища, което позволява изграждането на един и същ образ в различни среди и временаТова е съвместимо с CI/CD и осигурява проследимост за QA и съответствие.
Той се откроява и със своята гъвкавост: поддържа архитектури като Arm, x86/x86-64, MIPS или PowerPC, и улеснява рециклирането на дистрибуцията ви между продуктовите семейства или да се завъртат при смяна на платки или SoCs.
Подкрепата от общността и индустрията осигурява текущи актуализации и корекции за сигурност. Има клонове с разширена поддръжка (LTS), които опростяват живота на продукта и поддръжка на полето.
Цената? Изисква се мощна машина и стръмна крива на обучение. За много малки проекти или такива с ултра кратки срокове, може да е прекомерно в сравнение с леките алтернативино в средносрочен план се отплаща, когато еволюцията и поддръжката са от значение.
Ключови компоненти: OpenEmbedded, BitBake и Poky

Сърцето на компилацията е BitBake: енджин, който интерпретира рецепти и конфигурационни променливи, разрешава зависимости и изпълнява задачи по ред (изтегляне, разопаковане, конфигуриране, компилиране, инсталиране, пакетиране, сглобяване на образи). Мислете за BitBake като за оркестратор в стил „make“, но проектиран за вградения свят..
OpenEmbedded (OE) предоставя метаданните и базата от класове (OpenEmbedded-Core или oe-core), куриран набор от рецепти и помощни програми, които се тестват непрекъснато който служи като основа за стотици слоеве и проекти.
Poky е референтната дистрибуция на Yocto: тя интегрира OE системата за изграждане, широк набор от рецепти и валидна конфигурация „по книга“, за да започнете. Това не е дистрибуция на продукт, а по-скоро дидактическа и функционална отправна точка. което потвърждава екосистемата.
Многослоен модел: Сътрудничество и персонализиране едновременно
Моделът на слоевете е крайъгълният камък. Слоят е хранилище на рецепти, конфигурации и свързани класове. Слоевете са подредени и могат да бъдат презаписвани йерархично, което ви позволява да наследите общото и да прилагате промени, без да нарушавате базата.
Този подход насърчава логическото разделяне на това, което правите: BSP слой от производителя, GUI слой, middleware слой, слой за вашето приложение, слой за дистрибуцията... Избягването на „поставянето на всичко на един слой“ улеснява живота ви, когато става въпрос за актуализиране, поддръжка и повторна употреба. компоненти между проектите.
BSP слоевете са критични: те съдържат дървета на устройствата, конфигурации на ядрото, драйвери и машинни настройки за специфични цели (например семейства Raspberry Pi). Благодарение на тях, добавянето или смяната на хардуер не означава пренаписване на всичко., просто добавете или адаптирайте съответния слой.
Работен процес в строителството
Типичният процес е много ясен, макар и интензивен. Първо, дефинирате архитектурата, политиките, корекциите и параметрите (напр. в local.conf y bblayers.conf). BitBake извлича изходни кодове (tarballs, git...), пачове, конфигурира и компилира в зависимост от класовете (autotools, cmake и др.).
Междинният резултат се инсталира във временен стейджинг и се пакетира в избрания формат (deb, rpm, ipk). С тези пакети се композира rootfs и се генерират крайните изображения. които ще флашнете или инсталирате на устройството.
Проверки за работоспособност, регресии и QA тестове се извършват по време на целия процес на изграждане; можете също да стартирате и валидирате изображения в QEMU. Това намалява цикъла проба-грешка на реалния хардуер., особено в ранните етапи.
Инструменти и подпроекти около Yocto

Екосистемата предлага помощни програми, които улесняват живота ви. CROPS е контейнерна рамка, която осигурява последователни среди за изграждане в Linux, Windows и macOS; идеален за смесени екипи или за капсулиране на зависимостиToaster е уеб интерфейс за конфигуриране и стартиране на компилации и преглед на показатели и артефакти.
eSDK (Extensible SDK) позволява на разработчиците на приложения добавете библиотеки и промени и ги върнете обратно в изображението удобно. Има и поддръжка на Multi-Config за изграждане на множество архитектури с една команда и „бинарни компилации“ за включване на бинарни файлове, когато изходните кодове не са налични.
Системата може да генерира манифест на лиценза и препратки към използвания код, ключът към съответствието в регулирана среда или със задължения за авторско право.
Други проекти под шапката включват помощни програми като pseudo, cross-prelink, пакета Matchbox за леки графични среди и други. Преди това имаше интеграция с Eclipse, която беше премахната от версия 2.7. стават остарели пред лицето на новите инструменти.
Стратегии за управление на пакети и актуализиране
Актуализирането на полевите устройства е жизненоважно и Yocto предлага няколко опции. Можете да изберете да актуализирате целия образ (пълна системна съгласуваност), разпределете промените на ниво пакет, за да спестите трафик, използвайте атомни модели с реверсия (като OSTree) или прибягвайте до делта, за да минимизирате трансферите.
Няма чаршаф: пълното изображение е подходящо за „големи скокове“, пакетите за гранулирани промени, атомните за критични среди с връщане назад, а делтите за тесни мрежи. Предимството е, че избирате стратегията, която е подходяща за вашия продукт. и вашата операция.
Тестване, емулация и документация
Yocto се грижи за качеството. Той включва тестове за безопасност и регресионни тестове, поддръжка за зареждане и тестване в QEMU и възможност за интегриране на тестови пакети. Това стеснява цикъла на валидиране и намалява изненадите, свързани с хардуера..
Документацията е крайъгълен камък на проекта. Всяко издание публикува актуализирани ръководства и Съхраняват се документи с актуални и архивни версии, нещо много необходимо, защото поведението може да се променя между изданията.
Управление и стартирания
Техническото ръководство се пада на архитекта на проекта (Ричард Пърди) и йерархия от поддържащи за всеки компонент, в модел, подобен на този на ядрото на LinuxОт административна гледна точка има Консултативен съвет с представители на членовете (производители на силиций, търговски доставчици, базирани в Yocto, корпоративни потребители и консултанти), както и работни групи за финанси, инфраструктура, промоция и общност.
Графикът за пускане на пазара е полугодишен (април и октомври), със специфични версии за последните три клона. Това задава предвидимо темпо, което компаниите могат да планират. за актуализиране на слоеве и продукти.
Версии и кодови имена
В исторически план Yocto е издавала издания, идентифицирани по номер и прякор. По-долу е представен представителен избор от версии и дати:
| версия | Кодово име | дата |
|---|---|---|
| 3.3 | Харднот | 04/2021 |
| 3.2 | Гейтсгарт | 11/2020 |
| 3.1 | Дънфел | 04/2020 |
| 3.0 | Зевс | 10/2019 |
| 2.7 | Гереро | 04/2019 |
| 2.6 | Тъп | 11/2018 |
| 2.5 | Сумо | 04/2018 |
| 2.4 | Роко | 10/2017 |
| 2.3 | Pyro | 04/2017 |
| 2.2 | Морти | 10/2016 |
| 2.1 | Крогот | 04/2016 |
| 2.0 | Jethro | 10/2015 |
| 1.8 | Fido | 04/2015 |
| 1.7 | Замаян | 10/2014 |
| 1.6 | Маргаритка | 04/2014 |
| 1.5 | Дора | 10/2013 |
| 1.4 | Dylan | 04/2013 |
| 1.3 | Dylan | 10/2012 |
| 1.2 | Дензил | 04/2012 |
| 1.1 | Edison | 10/2011 |
| 1.0 | Бернар | 2011 |
| 0.9 | Лавърн | 2010 |
В допълнение към генеричните изображения, проектът поддържа референтна имплементация, наречена Poky, която интегрира системата за изграждане на OE и цялостен набор от рецепти, организирани в слоеве, полезен като функционален шаблон за вградена система.
Програма на марката: Участници и съвместимост

Програмата за марка Yocto позволява на организациите и продуктите да свържат работата си с проекта с два печата: „Участник в проекта Yocto“ за организации, които публично използват и поддържат Yoctoи „Yocto Project Compatible“ за OE-съвместими продукти, BSP и слоеве от организации-членки.
Основен речник
- Конфигурационни файлове (conf): дефинират глобални променливи, потребителски опции и хардуерни настройки; те ръководят какво се компилира и какво влиза в образа за конкретна платформа.
- Рецепти (.bb)Опишете изходния код, пачовете, зависимостите и опциите за компилация, за да генерирате пакети и заедно с тях крайния образ.
- СлоевеКолекции от рецепти и свързани метаданни; те позволяват изолиране на персонализации и ясна поддръжка на множество архитектури.
- метаданниТе включват рецепти, конфигурации, класове и данни, които контролират какво и как се изгражда, включително препратки към версии и корекции.
- bitbake: изпълнителен механизъм, който анализира рецепти и конфигурира реда на задачите; подобно на „make“, но ориентирано към пакети и изображения.
- пакетигенерирани артефакти (deb, rpm, ipk), които се използват за монтиране на rootfs и системни образи.
- eSDKРазширяем SDK за разработчици на приложения, който им позволява да интегрират промени и библиотеки и да ги тестват на целевия хардуер.
- Изображение: двоична форма на операционната система Linux, която ще бъде флашната или инсталирана на целевото устройство.
Случаи на употреба, Интернет на нещата и избор на система
Пазарът на вградени устройства преживява постоянен растеж: повече персонализирани устройства, по-голямо разнообразие от платки и SoCs и следователно... по-голяма нужда от персонализирани операционни системиLinux се е утвърдил като де факто стандарт, а Yocto е чудесен избор за изграждането му „по ваш начин“.
В сравнение с универсална двоична дистрибуция като Debian/Ubuntu, Yocto осигурява пълен контрол върху инсталираното, включително версии и пачове, с възпроизводимост и проследимост. За продукти, които изискват ограничено пространство, сигурност и дългосрочна поддръжка, е прагматично решение.
Компаниите комбинират Yocto с модерни архитектури за полеви операции (OTA, защитени дялове, връщане назад), интегриране на CI/CD тръбопроводи, автоматизирано тестване и постепенно внедряванеИма дори решения, които използват Yocto за разширяване на периферните възможности (напр. платформи, фокусирани върху анализи, изкуствен интелект и облачна свързаност, поддържани от Yocto).
Безопасност и добри практики
Сигурността е приоритет. Проектът е съобразен с най-добрите практики на CII и насърчава възпроизводими компилации (тестването е постигнало ~99,8% на core-image-minimal). Контролирането на зависимостите, средите и инструменталните вериги намалява замърсяването на компилациите..
На ниво среда за изпълнение можете да активирате SELinux за прецизен контрол на достъпа, IMA за измерване на целостта по време на изпълнение и защитени вериги за зареждане, които проверяват зареждащия механизъм, ядрото и initramfs. Шифроването на файловата система и управлението на ключове са напълно защитени в покой.
От теория към практика: изграждане на имидж
Най-основният начин е да клонирате Poky, да инициализирате средата, да изберете машината (например QEMU target или Raspberry Pi), Добавете необходимите BSP слоеве и стартирайте BitBake спрямо референтно изображениеПървото изграждане отнема известно време, но след това постепенните изграждане летят неусетно.
За хардуер като например Raspberry Pi/reTerminal, типичният поток включва клониране на слоеве като meta-raspberrypi, meta-oe, meta-python или слой от производителя на устройството, Настройте ядрото, импортирайте слоеве и променливи и изградете специфичен образ (например, „rpi-test-image“).
Тостерът ви позволява да направите същото чрез графичен потребителски интерфейс: създайте проект, изберете версия, машина (rasperrypi4-64, raspberrypi5…), Импортирайте слоеве, коригирайте променливи (напр. графични бекендове) и стартирайте компилацията от браузъра.Когато приключите, изтеглете артефактите (напр. .wic.bz2) и ги флашнете.
BitBake предлага полезни команди за изброяване на слоеве и рецепти, изследване на зависимости, отваряне на devshell за пакет, инспектирайте задачи или почистете околната среда, за да възстановитеТова ускорява диагностиката, когато нещо се обърка.
Подробен работен процес (оперативно резюме)
- Дефинира архитектура, политики, корекции и конфигурация.
- Изтеглете шрифтове от декларираните източници.
- Разопаковайте, приложете корекции и изпълнете configure/compile според случая.
- Подготовка и опаковане.
- Извършете QA и проверки.
- Публикува емисии за пакети.
- Генерира крайното изображение.
Тази схема се адаптира с класове и слоеве според вашите компоненти: може да искате специфичен графичен бекенд, ваши собствени модули на ядрото или различен init. Красотата на Yocto е, че всичко това е изразено като метаданни с възможност за версия..
Съвети за приемане от екипа
За профили, идващи от Windows среди, инвестирането в основите на Unix/Linux помага много. Работете с Linux дистрибуция на вашата работна станция, разбирайте Bash и Python и се запознайте с крос-тоулчейнове. ускорява кривата.
Ако сте нови в проекта, започнете с Poky и QEMU, за да валидирате работния процес от край до край. След това добавете реалния хардуерен BSP слой и вашия собствен приложен слой.Автоматизирайте изграждането на контейнери (CROPS) и CI/CD от самото начало.
Възможности за модернизация и експлоатация на място
Когато продуктът напусне фабриката, ви е необходима стратегия за актуализиране. С Yocto можете да избирате от хранилища на пакети, подписани пълни образи и атомни схеми с rollback или delta. Изберете въз основа на размера на актуализацията, честотната лента и риска с които искате да се заемете.
Интегрирането на лицензионния инвентар и свързания с него изходен код е друг важен аспект за съответствие. Yocto генерира манифести на лицензи и може да се свързва с код на компонент., улеснявайки одитите и задълженията за преразпределение.
