Tag: yocto

  • i.MX91S – prostsza konfiguracja projektu Yocto z narzędziem kas

    i.MX91S – prostsza konfiguracja projektu Yocto z narzędziem kas

    W poprzednich wpisach pokazałem jak łatwo zbudować obraz systemu Linux na urządzenie FRDM i.MX91S od NXP. Co jeśli powiedziałbym, że można to samo osiągnąć jeszcze łatwiej – nawet jedną komendą?

    Do tego typu rozwiązań powstało narzędzie kas od firmy Siemens. Firma natrafiła na następujący problem: mając wiele urządzeń i wiele różnych obrazów systemu – ciężko się w tym wszystkim połapać, a rekonfiguracja ustawień danego projektu nie jest tak prosta jak mogła by być. Kas jest rozwiązaniem, a dodatkowa konteneryzacja budowania pozwala uniezależnić się od systemu, na którym buduje się obrazy. Zaraz przedstawię Ci więcej na ten temat.

    TL;DR

    Może zacznijmy od przetestowania gotowego rozwiązania.

    Wykonaj poniższe komendy u siebie w terminalu, a obraz zacznie się budować – będziesz mieć dużo czasu na przeczytanie reszty posta 🙂

    git clone https://github.com/lewicki-pk/meta-leos/ && cd meta-leos
    scripts/kas-container build kas-frdm-walnascar.yaml

    To tyle – jeśli pominiemy linię klonującą repozytorium meta-leos to pozostaje nam jedna linijka, żeby zbudować projekt- do tego dążymy.

    Czym właściwie jest kas

    Kas to narzędzie, które pozwala opisać konfigurację projektu Yocto w jednym lub kilku plikach YAML.

    Nie zastępuje ono BitBake ani Yocto.

    Jego zadaniem jest przygotowanie środowiska i uruchomienie builda w powtarzalny sposób.

    Rationale – po co nam to wszystko?

    Wygodne przygotowanie meta warstw

    Zaczynając pracę z Yocto – użycie repo tool’a wydaje się naturalnym krokiem, bo dzięki niemu masz dostęp do wszystkich interesujących cię meta warstw. Meta warstwy zdefiniowane w xml’owym manifeście używanym w repo toolu, de facto robią jedną rzecz- wołają git clone na wszystkich repozytoriach zawierających meta warstwy i umieszczają je w uzgodnionym miejscu. To jednak za mało.

    Żeby zamknąć temat definiowania warstw – należy je jeszcze umieścić w pliku bblayers.conf a to nie dzieje się automatycznie – pomaga nam w tym zawołanie komendy source ./imx-setup-release.sh z odpowiednimi zmiennymi i parametrami.

    Ustawienie maszyny i dystrybucji

    W oryginalnym poście pokazałem, że skrypt imx-setup-release.sh należy zawołać w taki sposób:

    MACHINE=imx91-11x11-lpddr4-frdm-imx91s DISTRO=fsl-imx-wayland source ./imx-setup-release.sh -b build

    Czyli użytkownik musi wiedzieć jakie MACHINE go interesuje oraz jakie ustawić DISTRO, co nie zawsze jest oczywiste, zwłaszcza dla początkujących.

    Powyższy kod przyjmuje też parametr -b build – to kolejny punkt, który nie jest oczywisty dla początkujących. Co on robi? Startuje budowanie? Nie. On tylko mówi, że budowanie ma się znaleźć w folderze build znajdującym się w miejscu, z którego wołany jest skrypt.

    Dodatkowo- powyższy kod również wyświetla użytkownikowi EULA (End User License Agreement), które musi być potwierdzone.

    Za każdym razem, gdy wracam do projektu po kilku miesiącach muszę przypominać sobie:

    • jaką MACHINE wybrałem
    • jakiego DISTRO używałem
    • gdzie znajdował się katalog build

    To właśnie ten problem rozwiązuje kas.

    Dodatkowe ustawienia w local.conf

    Wszystkie dodatkowe ustawienia, które chcielibyśmy, żeby znalazły się w konfiguracji projektu przy poprzednim podejściu musielibyśmy dodawać do pliku local.conf ręcznie, ale z kas nawet nie musimy o nich pamiętać – wystarczy, że dodamy je raz do pliku yaml.

    W tym projekcie są to np. linie czyszczące dysk po zbudowaniu projektu – INHERIT+="rm_work" a także zapisujące w obrazie dane konfiguracji projektu INHERIT+="image-buildinfo".

    Wniosek

    Wszystkie te kroki mogą być przeniesione do jednego pliku w formacie yaml a następnie zinterpretowane przez narzędzie kas.

    Przystępna konfiguracja w jednym pliku

    Zajrzyj do tego pliku na githubie. Jest to plik yaml używany przez narzędzie kas. Mogą w nim znaleźć się wszystkie informacje potrzebne do:

    • zrobienia git clone na wszystkich meta warstwach
    • przygotowaniu pliku conf/bblayers.conf
    • przygotowaniu pliku conf/local.conf
    • wystartowania komendy bitbake na odpowiednim obrazie

    Możliwość podejścia modułowego

    Narzędzie kas pozwala na wygodną modularyzację konfiguracji w plikach yaml. Gdy ma się mnóstwo buildów na różne urządzenia- w kas można poszczególne części konfiguracji podzielić na różne pliki i do budowania używać jednego, który include’uje pozostałe części.

    Before & After

    Spójrzmy jeszcze raz na to jak wyglądało przygotowanie budowania projektu przed wprowadzeniem konfiguracji kas, a potem zobaczymy jak to wygląda po jej wprowadzeniu.

    Konfiguracja przed wprowadzeniem kas

    repo init -u https://github.com/nxp-imx/imx-manifest.git -b imx-linux-walnascar -m imx-6.12.49-2.2.0.xml
    
    repo sync -j4
    
    MACHINE=imx91-11x11-lpddr4-frdm-imx91s DISTRO=fsl-imx-wayland source ./imx-setup-release.sh -b build # read EULA and confirm it with `y`
    
    bitbake imx-image-core

    Po wprowadzeniu kas

    git clone https://github.com/lewicki-pk/meta-leos/ && cd meta-leos
    scripts/kas-container build kas-frdm-walnascar.yaml
  • Jak zbudować obraz Yocto dla FRDM i.MX91S

    Jak zbudować obraz Yocto dla FRDM i.MX91S

    Ten tekst jest częścią serii o FRDM imx91s.

    Postawienie własnego systemu operacyjnego na płytce ewaluacyjnej przy użyciu Yocto jest względnie proste. Zaraz zbudujesz ze mną obraz takiego systemu, czyli bootujący Linux na FRDM i.MX91S zbudowany przy użyciu Yocto.

    Instrukcje prosto od NXP

    Najlepszym sposobem na zbudowanie systemu to skorzystanie z instrukcji przygotowanej przez NXP. Znajduje się ona m.in. w repozytorium meta-imx, jest po angielsku i dotyczy naprawdę wielu płytek ewaluacyjnych. Skoro posiłkuję się NXP iMX91S to skupmy się właśnie na niej.

    Wybrana wersja SDK od NXP

    Domyślny branch repozytorium meta-imx wskazuje na walnascar-6.12.34-2.1.0 ale widzę, że jest dostępny też walnascar-6.12.49-2.2.0 i wybieram właśnie ten branch do dalszej pracy. O wersjach Yocto – LTS, non-LTS oraz tym jak podchodzą do tego vendorzy (jak np. NXP, TI, itd) będzie w osobnym poście. Z nazwy brancha można wyciągnąć takie informacje:

    • Wersja Yocto (przynajmniej teoretycznie): 5.2, codename: Walnascar
    • Wersja kernela Linuxa: 6.12.49
    • Wersja SDK od NXP: 2.2.0

    Samo mięso – komendy do kopiuj/wklej 

    mkdir -p ~/builds/frdm-build 
    
    cd ~/builds/frdm-build/
    
    repo init -u https://github.com/nxp-imx/imx-manifest.git -b imx-linux-walnascar -m imx-6.12.49-2.2.0.xml
    
    repo sync -j4
    
    MACHINE=imx91-11x11-lpddr4-frdm-imx91s DISTRO=fsl-imx-wayland source ./imx-setup-release.sh -b build # read EULA and confirm it with `y`
    
    bitbake imx-image-core

    Po krótce co tu się dzieje:

    Tworzenia katalogu nie trzeba tłumaczyć.

    Potem narzędziem repo od Google pobieram meta warstwy zdefiniowane w repo imx-manifest.

    Następnie wołam skrypt przygotowujący środowisko do budowania. Zmienna MACHINE- wybiera płytkę ewaluacyjną, a zmienna DISTRO- tryb dystrybucji.

    Na koniec komendą bitbake buduję obraz imx-image-core. Ten ostatni krok z reguły trwa długo, zwłaszcza przy pierwszym jego uruchomieniu. Zależnie od maszyny do budowania – nawet kilka godzin.

    Upieczone artefakty

    Całe Yocto ma wiele odniesień do książki kucharskiej. Dlatego po upieczeniu obrazu imx-image-core zaglądam z ~/builds/frdm-build/build do tmp/deploy/images/imx91-11x11-lpddr4-frdm-imx91s/. Znajduję w nim kilka istotnych plików:

    • imx-image-core-imx91-11x11-lpddr4-frdm-imx91s.rootfs.wic.zst – mój docelowy obraz systemu
    • imx-image-core-imx91-11x11-lpddr4-frdm-imx91s.rootfs-20260513212841.wic.bmap – plik ułatwiający szybkie flashowanie obrazu
    • imx-image-core-imx91-11x11-lpddr4-frdm-imx91s.rootfs.manifest – lista wszystkich paczek software’u, które są zainstalowane w obrazie – 1696 linii- trochę dużo. Naprawię to później
    • imx-boot – obraz bootloadera – będący częścią obrazu wic
    • Image – surowy obraz kernela linuxa

    Wystarczy mi w zupełności ten pierwszy, bo można go użyć do wgrania systemu na płytkę.

  • FRDM imx91s – seria z Yocto i Home Assistantem – intro

    FRDM imx91s – seria z Yocto i Home Assistantem – intro

    Ostatnio odkryłem, że NXP Semiconductors zaczął sprzedawać budżetowe wersje swoich płytek ewaluacyjnych pod szyldem FRDM (freedom?). Postanowiłem więc kupić jedną z nich i zrobić na niej coś fajnego.

    Dlaczego FRDM i.MX91S

    Celowałem w płytkę i.MX91 z dwoma portami ethernetowymi, ale padłem ofiarą firmy Farnell, która użyła zdjęcia płytki i.MX91 do produktu i.MX91S. W ten sposób mam inną niż planowałem, ale wciąż całkiem fajną płytkę prototypową – patrz zdjęcie powyżej.

    Co chcę zbudować?

    Akurat grzebałem w Home Assistant i pomyślałem, że fajnie byłoby wystawić do niego kilka prostych czujników. Dodatkowo zawodowo jestem Yocto’wcem (stawiam systemy operacyjne oparte o Linuxa), więc zdecydowałem się na napisanie serii, w której pokażę jak z użyciem Yocto zbudować system operacyjny, który będzie zawierał prostą aplikację, która korzystając z MQTT Discovery pokaże w Home Assistancie wartość czujnika temperatury właśnie z płytki i.MX91S.

    Plan serii

    Skoro zdanie opisujące co chcę zrobić zajęło kilka linijek, to dobrze będzie rozbić to na części. Więc oto co zrobimy:

    1. zbudujemy obraz systemu operacyjnego z użyciem Yocto, który będzie dedykowany dla płytki FRDM i.MX91S – zobacz wpis
    2. wgramy ten obraz na płytkę ewaluacyjną – zobacz wpis
    3. Wytłumaczę Ci jak działa MQTT Discovery (pisząc tą listę sam jeszcze nie wiem)
    4. Napiszemy wspólnie prosty program, który wyeksponuje wartość temperatury z systemu na płytce FRDM do Home Assistanta

    Może tyle wystarczy na początek.

    Zobaczmy dokąd to nas zaprowadzi.