Jeśli pracujesz w systemach wbudowanych lub w Internecie Rzeczy (IoT), nieuchronnie natkniesz się na projekt Yocto. To fundament, na którym tysiące zespołów buduje swoje „własne” dystrybucje Linuksa , precyzyjnie dostosowane do ich specyficznego sprzętu i wymagań. To nie jest po prostu kolejna dystrybucja; to zestaw narzędzi, metadanych i procesów, które wynoszą personalizację i powtarzalność na zupełnie nowy poziom.
W tym przewodniku bez zbędnych ceregieli dowiesz się, czym jest Yocto, a czym nie, dlaczego jest tak powszechne, jak się składa (OpenEmbedded, BitBake i Poky), czym jest model warstwowy, jakie narzędzia się z nim wiążą (Toaster, CROPS, eSDK…), jak powstaje obraz, jakie są dostępne opcje aktualizacji, jakie oferuje zabezpieczenia oraz jak zarządza projektem i jak jest on wersjonowany . Poznasz również koncepcje i praktyczne przykłady (reTerminal/Raspberry Pi), które pomogą Ci zastosować go w codziennej pracy.
Czym jest projekt Yocto?
Projekt Yocto to inicjatywa sponsorowana przez Linux Foundation, która dostarcza fundamenty do tworzenia niestandardowych dystrybucji Linuksa dla urządzeń wbudowanych i IoT, niezależnie od architektury sprzętowej . Projekt został uruchomiony w 2010 roku, a jego pierwsza wersja została wydana w 2011 roku dzięki wsparciu około dwudziestu organizacji i ścisłej współpracy z OpenEmbedded.
Jego celem jest usprawnienie cyklu życia oprogramowania wbudowanego: oferuje interoperacyjne narzędzia, metadane i przepływy pracy, dzięki którym budowanie systemu staje się szybkie, powtarzalne i w pełni konfigurowalne. Połączenie Yocto, OpenEmbedded i BitBake pozwala opisać, jak uzyskać, skonfigurować, skompilować, spakować i złożyć system z chirurgiczną precyzją.
W 2018 roku ARM i Intel połączyły siły w ramach Yocto, aby ułatwić współdzielenie kodu w systemach wbudowanych, wzmacniając neutralność platform i obsługę wielu architektur . Obecnie projekt jest wykorzystywany w urządzeniach od prostych płytek po złożone produkty przemysłowe.
Yocto nie ogranicza Cię: jest niezależne od dostawcy i formatu pakietu, więc możesz wybrać między formatami deb, rpm lub ipk i postępować zgodnie z deterministycznym modelem kompilacji. Oprócz obrazów urządzeń możesz generować niestandardowe łańcuchy narzędzi i zestawy SDK do tworzenia aplikacji i debugowania.

Dlaczego warto używać Yocto w systemach wbudowanych
Kluczową zaletą jest możliwość personalizacji. Dzięki Yocto tworzysz system operacyjny zawierający tylko to, czego potrzebujesz: usuwasz to, czego nie potrzebujesz, zmniejszasz powierzchnię ataku i rozmiar systemu oraz precyzyjnie dostrajasz wydajność i zużycie energii. Nie jesteś zależny od decyzji dystrybucji ogólnego przeznaczenia.
Kolejnym istotnym powodem jest powtarzalność. Wszystko (warstwy, receptury, konfiguracje) można wersjonować w repozytoriach, co pozwala na tworzenie tego samego obrazu w różnych środowiskach i w różnym czasie . Jest to zgodne z CI/CD i zapewnia identyfikowalność na potrzeby zapewnienia jakości (QA) i zgodności.
Wyróżnia się także elastycznością: obsługuje architektury takie jak Arm, x86/x86-64, MIPS lub PowerPC i ułatwia recykling dystrybucji między rodzinami produktów lub zmianę systemu w przypadku zmiany płyty głównej lub układu SoC.
Wsparcie społeczności i branży zapewnia stałe aktualizacje i poprawki zabezpieczeń. Dostępne są oddziały wsparcia długoterminowego (LTS), co upraszcza cykl życia produktu i konserwację w terenie.
Koszt? Wymaga to potężnej maszyny i krzywej uczenia się. W przypadku bardzo małych projektów lub tych z ekstremalnie krótkimi terminami realizacji, może to wydawać się wygórowane w porównaniu z lżejszymi alternatywami , ale w średnim okresie opłaca się, gdy liczy się ewolucja i utrzymanie.
Kluczowe komponenty: OpenEmbedded, BitBake i Poky

Sercem kompilacji jest BitBake: silnik, który interpretuje receptury i zmienne konfiguracyjne, rozwiązuje zależności i wykonuje zadania w kolejności (pobieranie, rozpakowywanie, konfiguracja, kompilacja, instalacja, pakowanie, asemblacja obrazów). BitBake można porównać do orkiestratora w stylu „make”, ale zaprojektowanego dla świata systemów wbudowanych.
OpenEmbedded (OE) zapewnia metadane i bazę klas (OpenEmbedded-Core lub oe-core), stale testowany i aktualizowany zestaw receptur i narzędzi , który stanowi podstawę dla setek warstw i projektów.
Poky to dystrybucja referencyjna Yocto: integruje system kompilacji OE, szeroki zestaw receptur i poprawną konfigurację „zgodną z podręcznikiem” na początek. Nie jest to dystrybucja skoncentrowana na produkcie, a raczej dydaktyczny i funkcjonalny punkt wyjścia, który weryfikuje ekosystem.
Model warstwowy: współpraca i personalizacja w tym samym czasie
Model warstwowy jest podstawą. Warstwa to repozytorium receptur, konfiguracji i powiązanych klas. Warstwy są ułożone w stos i można je nadpisywać hierarchicznie , co pozwala na dziedziczenie wspólnych cech i wprowadzanie zmian bez naruszania podstawowej struktury.
To podejście promuje logiczne oddzielenie tego, co robisz: warstwa BSP od dostawcy, inna dla GUI, inna dla oprogramowania pośredniczącego, inna dla Twojej aplikacji, inna dla dystrybucji… Unikanie „umieszczania wszystkiego w jednej warstwie” ułatwia aktualizowanie, konserwację i ponowne wykorzystywanie komponentów między projektami.
Warstwy BSP są kluczowe: zawierają drzewa urządzeń, konfiguracje jądra, sterowniki i ustawienia maszyn dla konkretnych systemów docelowych (np. rodzin Raspberry Pi). Dzięki nim dodawanie lub zmiana sprzętu nie wymaga przepisywania wszystkiego , a jedynie dodania lub dostosowania odpowiedniej warstwy.
Przepływ prac budowlanych
Typowy proces jest bardzo przejrzysty, choć intensywny. Najpierw definiujesz architekturę, zasady, poprawki i parametry (np. w local.conf y bblayers.conf). BitBake pobiera źródła (pliki tarball, git…), stosuje poprawki, konfiguruje i kompiluje w zależności od klas (autotools, cmake, itd.).
Wynik pośredni jest instalowany w tymczasowym środowisku testowym i pakowany w wybranym formacie (deb, rpm, ipk). Pakiety te są następnie wykorzystywane do budowania systemu plików root i generowania obrazów finalnych , które zostaną wgrane lub wdrożone na urządzeniu.
W trakcie całego procesu przeprowadzane są kontrole poprawności, regresje i kontrola jakości (QA); dodatkowo można uruchamiać i walidować obrazy w QEMU. Skraca to cykl prób i błędów na rzeczywistym sprzęcie , szczególnie na wczesnych etapach.
Narzędzia i podprojekty wokół Yocto

Ekosystem oferuje narzędzia, które ułatwiają życie. CROPS to framework kontenerowy, który zapewnia spójne środowiska kompilacji w systemach Linux, Windows i macOS; idealny dla zespołów mieszanych lub do hermetyzacji zależności . Toaster to interfejs webowy do konfigurowania i uruchamiania kompilacji oraz przeglądania metryk i artefaktów.
eSDK (Extensible SDK) umożliwia programistom aplikacji łatwe dodawanie bibliotek i zmian oraz przesyłanie ich z powrotem do obrazu . Pakiet ten obsługuje również funkcję Multi-Config do budowania wielu architektur za pomocą jednego polecenia oraz funkcję „binary builds” do dołączania plików binarnych, gdy kod źródłowy jest niedostępny.
System może generować manifest licencyjny i odniesienia do użytego kodu, co jest kluczowe dla zachowania zgodności w środowiskach regulowanych lub w przypadku zobowiązań copyleft.
Inne projekty pod tym szyldem obejmują narzędzia takie jak pseudo, cross-prelink, pakiet Matchbox dla lekkich środowisk graficznych i wiele innych. Wcześniej istniała integracja z Eclipse, ale została wycofana od wersji 2.7, ponieważ stała się przestarzała w porównaniu z nowszymi narzędziami.
Zarządzanie pakietami i strategie aktualizacji
Aktualizacja urządzeń polowych jest kluczowa, a Yocto oferuje kilka opcji. Możesz zaktualizować cały obraz (dla pełnej spójności systemu), rozłożyć zmiany na poziomie pakietów, aby zaoszczędzić przepustowość , użyć odwracalnych modeli atomowych (takich jak OSTree) lub zastosować modele delta, aby zminimalizować transfery.
Nie ma jednego uniwersalnego rozwiązania: mapowanie pełnego obrazu sprawdza się w przypadku „dużych skoków”, pakiety w przypadku zmian o charakterze granularnym, mapowanie atomowe w środowiskach krytycznych z możliwością wycofania zmian, a mapowanie delta w wąskich sieciach. Zaletą jest to, że możesz wybrać strategię dopasowaną do swojego produktu i działania.
Testowanie, emulacja i dokumentacja
Yocto stawia na jakość. Oferuje testy poprawności i regresji, obsługę rozruchu i testowania QEMU oraz możliwość integracji pakietów testowych. Skraca to cykl walidacji i ogranicza niespodzianki sprzętowe.
Dokumentacja jest kamieniem węgielnym projektu. Każda wersja zawiera zaktualizowane przewodniki, a dokumentacja dla wersji bieżących i archiwalnych jest utrzymywana — co jest niezbędne, ponieważ zachowanie może się zmieniać między wersjami.
Zarządzanie i uruchomienia
Kierownictwo techniczne sprawuje architekt projektu (Richard Purdie) oraz hierarchia opiekunów każdego komponentu, na wzór jądra Linuksa . W skład administracji wchodzi Rada Doradcza z przedstawicielami firm członkowskich (producentów układów scalonych, dostawców komercyjnych opartych na Yocto, użytkowników korporacyjnych i konsultantów), a także grupy robocze ds. finansów, infrastruktury, marketingu i społeczności.
Harmonogram wydań jest półroczny (kwiecień i październik), z okazjonalnymi wydaniami dla trzech najnowszych gałęzi. To ustala przewidywalny rytm, który firmy mogą zaplanować podczas aktualizacji warstw i produktów.
Wersje i nazwy kodowe
Tradycyjnie Yocto publikowało muzykę oznaczoną numerem i pseudonimem. Poniżej znajduje się reprezentatywny wybór wersji i dat :
| Wersja | Kryptonim | data |
|---|---|---|
| 3.3 | Hardknott | 04/2021 |
| 3.2 | Gatesgarth | 11/2020 |
| 3.1 | Dunfell | 04/2020 |
| 3.0 | Zeus | 10/2019 |
| 2.7 | Guerrero | 04/2019 |
| 2.6 | Walić | 11/2018 |
| 2.5 | Sumo | 04/2018 |
| 2.4 | Rocko | 10/2017 |
| 2.3 | Pyro | 04/2017 |
| 2.2 | Morty | 10/2016 |
| 2.1 | Krogoth | 04/2016 |
| 2.0 | Jethro | 10/2015 |
| 1.8 | Fido | 04/2015 |
| 1.7 | Dizzy | 10/2014 |
| 1.6 | Stokrotka | 04/2014 |
| 1.5 | Dora | 10/2013 |
| 1.4 | Dylan | 04/2013 |
| 1.3 | Dylan | 10/2012 |
| 1.2 | Denzil | 04/2012 |
| 1.1 | Edison | 10/2011 |
| 1.0 | Bernard | 2011 |
| 0.9 | Laverne | 2010 |
Oprócz obrazów ogólnych projekt utrzymuje implementację referencyjną o nazwie Poky, która integruje system kompilacji OE i duży zestaw warstwowych receptur, przydatnych jako szablon funkcjonalny dla systemu wbudowanego.
Program marki: Uczestnicy i zgodność

Program marki Yocto umożliwia organizacjom i produktom powiązanie swojej pracy z projektem za pomocą dwóch pieczęci: „Uczestnik projektu Yocto” dla podmiotów, które publicznie używają i wspierają Yocto , oraz „Zgodny z projektem Yocto” dla produktów zgodnych z OE, BSP i warstw należących do organizacji członkowskich.
Podstawowy słownik
- Pliki konfiguracyjne (conf):definiują zmienne globalne, opcje użytkownika i ustawienia sprzętowe. Określają one, co jest kompilowane i co trafia do obrazu dla konkretnej platformy.
- Przepisy (.bb):opisz źródło kodu, poprawki, zależności i opcje kompilacji w celu wygenerowania pakietów, a wraz z nimi obrazu końcowego.
- Warstwy:Zbiory przepisów i powiązanych metadanych. Umożliwiają one izolację dostosowań i czyste wsparcie wielu architektur.
- Metadane:Obejmują one receptury, konfiguracje, klasy i dane kontrolujące, co i jak jest kompilowane, łącznie z odniesieniami do wersji i poprawek.
- BitBake:silnik wykonawczy, który analizuje przepisy i konfiguruje kolejność zadań; podobne do „make”, ale zorientowane na pakiety i obrazy.
- Pakiety: wygenerowane artefakty (deb, rpm, ipk), które służą do montowania obrazu rootfs i obrazu systemu.
- eSDK:Rozszerzalny zestaw SDK dla programistów aplikacji umożliwiający integrację zmian i bibliotek oraz testowanie ich na sprzęcie docelowym.
- Obraz:binarna forma systemu operacyjnego Linux, która ma zostać wgrana lub wdrożona na urządzeniu docelowym.
Przykłady zastosowań, IoT i wybór systemu
Rynek systemów wbudowanych stale rośnie: coraz więcej urządzeń dostosowanych do indywidualnych potrzeb, szersza gama płyt głównych i układów SoC, a co za tym idzie, większe zapotrzebowanie na dedykowane systemy operacyjne . Linux stał się de facto standardem, a Yocto idealnie nadaje się do tworzenia go „po swojemu”.
W porównaniu z dystrybucją binarną ogólnego przeznaczenia, taką jak Debian/Ubuntu, Yocto oferuje pełną kontrolę nad zainstalowanymi wersjami i poprawkami, z możliwością ich powtarzania i śledzenia. W przypadku produktów wymagających ograniczonej przestrzeni, bezpieczeństwa i długoterminowej konserwacji jest to pragmatyczny wybór.
Firmy łączą Yocto z nowoczesnymi architekturami operacji terenowych (OTA, bezpieczne partycjonowanie, wycofywanie), integrując procesy CI/CD, automatyczne testowanie i wdrażanie etapowe . Istnieją nawet rozwiązania wykorzystujące Yocto do rozszerzenia możliwości na brzegu sieci (na przykład platformy skoncentrowane na analityce, sztuczna inteligencja i łączność w chmurze kompatybilna z Yocto).
Bezpieczeństwo i dobre praktyki
Bezpieczeństwo jest priorytetem. Projekt jest zgodny z najlepszymi praktykami CII i promuje powtarzalność kompilacji (w testach osiągnięto około 99,8% powtarzalności przy minimalnym obrazie rdzenia). Kontrola zależności, środowisk i łańcuchów narzędzi zmniejsza ryzyko „zanieczyszczenia” kompilacji.
W czasie wykonywania można włączyć SELinux w celu uzyskania szczegółowej kontroli dostępu, IMA do pomiaru integralności w czasie wykonywania oraz bezpieczne łańcuchy rozruchowe weryfikujące bootloader, jądro i initramfs. Szyfrowanie systemu plików i zarządzanie kluczami dopełniają ochronę w stanie spoczynku.
Od teorii do praktyki: budowanie wizerunku
Najprostszym podejściem jest sklonowanie Poky, zainicjowanie środowiska, wybranie maszyny (na przykład docelowej QEMU lub Raspberry Pi), dodanie niezbędnych warstw BSP i uruchomienie BitBake na obrazie referencyjnym . Pierwsza kompilacja zajmuje trochę czasu, ale kolejne kompilacje przyrostowe są niezwykle szybkie.
W przypadku sprzętu takiego jak Raspberry Pi/reTerminal typowy przepływ pracy obejmuje klonowanie warstw, takich jak meta-raspberrypi, meta-oe, meta-python lub warstwa dostawcy urządzenia, modyfikowanie jądra, importowanie warstw i zmiennych oraz tworzenie określonego obrazu (np. „rpi-test-image”).
Toaster pozwala zrobić to samo za pośrednictwem graficznego interfejsu użytkownika: utworzyć projekt, wybrać wersję, maszynę (raspberrypi4-64, raspberrypi5…), zaimportować warstwy, dostosować zmienne (na przykład graficzne zaplecze) i uruchomić kompilację z poziomu przeglądarki . Po zakończeniu pobierasz artefakty (na przykład plik .wic.bz2) i wgrywasz je do systemu.
BitBake oferuje przydatne polecenia do wyświetlania warstw i receptur, eksplorowania zależności, otwierania powłoki programistycznej dla pakietu, inspekcji zadań lub czyszczenia środowiska w celu ponownej kompilacji . Przyspiesza to diagnostykę w przypadku problemów.
Szczegółowy przepływ pracy (podsumowanie operacyjne)
- Definiuje architekturę, zasady, poprawki i konfigurację.
- Pobierz czcionki z podanych źródeł.
- Rozpakuj, zastosuj poprawki i uruchom konfigurację/kompilację stosownie do przypadku.
- Przygotowanie i pakowanie.
- Przeprowadź kontrolę jakości i testy.
- Publikuje pakiety kanałów.
- Generuje obraz końcowy.
Ta architektura dostosowuje się do klas i warstw w zależności od komponentów: możesz potrzebować konkretnego graficznego zaplecza, niestandardowych modułów jądra lub innego systemu init. Piękno Yocto polega na tym, że wszystko to jest wyrażone jako wersjonowane metadane.
Wskazówki dotyczące wdrażania zespołu
Dla użytkowników korzystających ze środowisk Windows, inwestycja w podstawy systemów Unix/Linux jest niezwykle pomocna. Praca z dystrybucją Linuksa na stacji roboczej, zrozumienie Bash i Pythona oraz zaznajomienie się z wielonarzędziowymi łańcuchami narzędzi przyspiesza proces nauki.
Jeśli masz niewielkie doświadczenie, zacznij od Poky i QEMU, aby zweryfikować przepływ od początku do końca. Następnie dodaj warstwę BSP dla samego sprzętu i własną warstwę dla aplikacji . Automatyzuj kompilacje za pomocą kontenerów (CROPS) i CI/CD od samego początku.
Możliwości modernizacji i działania w terenie
Kiedy Twój produkt opuszcza fabrykę, potrzebujesz strategii aktualizacji. Dzięki Yocto możesz wybierać spośród repozytoriów pakietów, podpisanych pełnych obrazów, schematów atomowych z funkcją wycofywania lub aktualizacji delta. Wybierz w oparciu o rozmiar aktualizacji, przepustowość i poziom ryzyka, jakie jesteś gotów podjąć.
Integracja inwentarza licencji i powiązanego kodu źródłowego jest kolejnym kluczowym elementem zapewniającym zgodność. Yocto generuje manifesty licencji i może łączyć się z kodem komponentów , ułatwiając audyty i wypełnianie obowiązków redystrybucyjnych.
