Skopiowano link do schowka!

Tworzenie nakładek drzewa urządzeń na platformie Toradex dla wyświetlaczy Riverdi

Powrót do góry strony

Celem niniejszego przewodnika jest stworzenie działającego systemu na nowym sprzęcie – z wykorzystaniem systemu operacyjnego Torizon oraz przykładowych plików źródłowych drzewa urządzeń z repozytorium Riverdi na GitHubie.

W ten sposób osiągamy:

  • Flashowanie systemu operacyjnego Torizon od podstaw
  • Stwórz własną nakładkę drzewa urządzeń z repozytorium Riverdi na GitHubie
  • Włącz nakładkę w Torizon
  • Uruchom system z w pełni graficznym wyświetlaczem i obsługą dotykową

W niniejszym przewodniku celowo pominięto:

  • Kompilacja Yocto od podstaw
  • Ponowna kompilacja jądra systemu Linux
  • Korzystanie z pełnej maszyny wirtualnej z systemem Linux

Przegląd architektury systemu

Sprzęt komputerowy

  • Toradex Verdin iMX8MP lub iMX8MM
  • Płytka nośna Toradex Dahlia
  • Wyświetlacz Riverdi 12,1” (lub dowolny inny wyświetlacz Riverdi, ale w tym przykładzie używamy modelu 12,1”)

Przed wprowadzeniem zmian w systemie należy zrozumieć, jak zbudowany jest potok wyświetlania w układzie Verdin iMX8MP + Dahlia.

Ścieżka danych wyświetlacza

W przypadku wyświetlacza Riverdi o przekątnej 12,1″ łańcuch sygnałowy wygląda następująco:

i.MX8MP LCDIF

MIPI DSI

SN65DSI83 (mostek między DSI a LVDS)

Panel LVDS

  • Blok LCDIF w układzie i.MX8MP generuje dane pikselowe.
  • Dane są przesyłane za pośrednictwem interfejsu MIPI DSI.
  • Układ TI SN65DSI83 przekształca sygnał DSI na LVDS.
  • Panel LVDS odbiera dane dotyczące pikseli i posiada wyświetlacz, na którym jest wyświetlany obraz.

Interfejsy sterujące

Oprócz ścieżki wideo należy skonfigurować dwa dodatkowe podsystemy:

  • Sterowanie podświetleniem
    • Sterowane za pomocą modu PWM z procesora i.MX8MP
    • Podłączony do sterownika podświetlenia wyświetlacza
    • Cykl pracy reguluje jasność (0–100%)
  • Ekran pojemnościowy dotykowy
    • Podłączone przez interfejs I2C
    • Generuje sygnały przerwań
    • Udostępnia urządzenie wejściowe w systemie Linux (/dev/input/eventX)

Oprogramowanie

Korzystaliśmy ze środowiska Linux – w tym przykładzie z maszyny wirtualnej z systemem Windows, na której zainstalowano system Ubuntu. To jest sedno naszego przewodnika. Znajdziesz tu wszystko, co niezbędne – cały kod, z którego korzystamy, wszystkie linki oraz szczegółowe objaśnienia. Poniżej znajdziesz nasz profil na GitHubie:
https://github.com/riverdi/riverdi-toradex-DTS

Instalowanie zależności kompilacyjnych

Przed przystąpieniem do tworzenia nakładek drzewa urządzeń środowisko programistyczne musi zawierać narzędzia wymagane przez system budowania jądra systemu Linux.
Otwórz terminal i zainstaluj wymagane pakiety, korzystając z poniższego polecenia

sudo apt install -y \
git make gcc g++ bc bison flex \
libssl-dev libncurses-dev \
python3 python3-pip rsync wget xz-utils \
device-tree-compiler

Pakiety te zawierają podstawowe narzędzia niezbędne do kompilacji komponentów związanych z jądrem oraz artefaktów drzewa urządzeń.

Następujące narzędzia mają szczególne znaczenie w procesie tworzenia nakładki:

  • Git – służy do klonowania źródeł jądra Toradex oraz frameworku nakładek drzewa urządzeń.
  • narzędzia kompilacyjne (gcc, make itp.) – wymagane przez system budowania jądra systemu Linux.
  • device-tree-compiler (dtc) — kompiluje pliki źródłowe drzewa urządzeń (.dts) do binarnych plików drzewa urządzeń (.dtb lub .dtbo)
  • Różne elementy infrastruktury kompilacji jądra wymagają dodatkowych bibliotek, takich jak libssl-dev i libncurses-dev.

Po zainstalowaniu zależności system jest gotowy do sklonowania źródeł jądra Toradex oraz przygotowania środowiska kompilacji do kompilacji nakładki drzewa urządzeń.

Tworzenie przestrzeni wymiany i przygotowanie katalogu roboczego

Podczas pracy w maszynie wirtualnej ilość dostępnej pamięci RAM może być ograniczona. Systemy budowania związane z jądrem mogą wymagać dodatkowej pamięci podczas kompilacji, zwłaszcza podczas przetwarzania dużych drzew kodu źródłowego.

Aby uniknąć błędów kompilacji związanych z pamięcią, zaleca się utworzenie pliku wymiany, który zapewni dodatkową pamięć wirtualną.

Utwórz plik wymiany o rozmiarze 4 GB, korzystając z poniższych poleceń:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Plik wymiany jest następnie dodawany do konfiguracji systemu, dzięki czemu zostanie automatycznie włączony po ponownym uruchomieniu:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Po przygotowaniu przestrzeni wymiany utwórz katalog roboczy, w którym będą przechowywane wszystkie repozytoria i artefakty kompilacji wykorzystywane w niniejszym przewodniku:

mkdir -p ~/work
cd ~/work

Ten katalog posłuży jako główne miejsce pracy do sklonowania źródeł jądra Toradex, frameworku nakładek oraz plików nakładek wyświetlacza Riverdi.

Klonowanie źródeł jądra systemu Linux firmy Toradex

Kolejnym krokiem jest pobranie źródeł jądra systemu Linux firmy Toradex. Źródła te zawierają infrastrukturę kompilacyjną oraz pliki nagłówkowe niezbędne do kompilacji nakładki drzewa urządzeń.

Przejdź do utworzonego wcześniej katalogu roboczego i sklonuj repozytorium jądra Toradex:

git clone git://git.toradex.com/linux-toradex.git  

To repozytorium zawiera jądro systemu Linux wykorzystywane w wydaniach BSP firmy Toradex oraz pliki konfiguracyjne i skrypty kompilacyjne niezbędne do kompilacji komponentów jądra i nakładek drzewa urządzeń.

Repozytorium jądra jest stosunkowo duże, więc jego sklonowanie może zająć kilka minut w zależności od szybkości połączenia sieciowego. W załączonym filmie ten etap został przyspieszony, aby poradnik był zwięzły.

Po pobraniu repozytorium kolejnym krokiem będzie wybranie gałęzi jądra odpowiadającej wersji BSP używanej w docelowym module Verdin.

Wybór odpowiedniej gałęzi jądra

Po sklonowaniu repozytorium jądra Toradex kolejnym krokiem jest wybranie gałęzi odpowiadającej wersji BSP działającej na urządzeniu docelowym.

Wersje Toradex BSP są oparte na konkretnych wersjach jądra systemu Linux, a nakładki drzewa urządzeń muszą być skompilowane z wykorzystaniem tej samej gałęzi jądra, aby zapewnić zgodność.

Aby wyświetlić listę dostępnych gałęzi jądra związanych z wersją Linux 5.15, należy uruchomić:

git branch -a | grep -E "5\.15|toradex_5\.15" | head -n 50

To polecenie filtruje dostępne gałęzie i wyświetla te związane z serią jądra Linux 5.15, z której korzysta kilka wersji BSP firmy Toradex.

git checkout toradex_5.15-2.2.x-imx

Ta gałąź zawiera źródła jądra oraz konfigurację wykorzystywaną przez wersje BSP firmy Toradex oparte na systemie Linux 5.15 dla procesorów NXP i.MX.

Wybranie właściwej gałęzi gwarantuje, że nakładka drzewa urządzeń zostanie zbudowana w oparciu o drzewo jądra, które odpowiada oprogramowaniu działającemu na docelowym sprzęcie.

Klonowanie frameworku nakładek drzewa urządzeń

Kolejnym krokiem jest pobranie frameworku nakładek drzewa urządzeń firmy Toradex. Repozytorium to zawiera infrastrukturę kompilacyjną służącą do kompilowania nakładek drzewa urządzeń przy użyciu systemu budowania jądra systemu Linux.

Skopiuj repozytorium do katalogu roboczego:

git clone git://git.toradex.com/device-tree-overlays.git

To repozytorium zawiera strukturę pliku Makefile oraz elementy integracyjne niezbędne do kompilacji plików .dtbo przy użyciu sklonowanych wcześniej źródeł jądra.

Po sklonowaniu repozytorium w obszarze roboczym pojawi się nowy katalog o nazwie „device-tree-overlays”. Katalog ten posłuży później do dodania źródeł nakładki Riverdi oraz skompilowania ostatecznej wersji nakładki.

Wybór odpowiedniej gałęzi frameworku nakładek

Po sklonowaniu repozytorium nakładek drzewa urządzeń kolejnym krokiem jest wybranie gałęzi odpowiadającej tej samej wersji jądra, z której korzystano wcześniej.

Struktura frameworku nakładek drzewa urządzeń musi być zgodna z gałążą jądra używaną w repozytorium linux-Toradex. Dzięki temu proces kompilacji nakładki wykorzystuje właściwe nagłówki jądra i konfigurację kompilacji.

Najpierw należy wymienić dostępne gałęzie związane z serią jądra Linux 5.15:

git branch -a | grep -E "5\.15|toradex_5\.15" | head -n 50

To polecenie filtruje dostępne gałęzie i wyświetla te powiązane z jądrem Linux 5.15, z którego korzysta kilka wersji BSP firmy Toradex.

Następnie sprawdź gałąź odpowiadającą wybranej wcześniej wersji jądra:

git checkout toradex_5.15-2.2.x-imx

Wykorzystanie tej samej gałęzi zarówno dla źródeł jądra, jak i frameworku nakładek gwarantuje, że system budowania pozostaje zgodny z BSP działającym na docelowym module Verdin.

Konfiguracja ścieżki do źródeł jądra i klonowanie źródeł nakładki Riverdi

Przed rozpoczęciem tworzenia nakładek drzewa urządzeń system budowania nakładek musi wiedzieć, gdzie znajdują się źródła jądra systemu Linux. Odbywa się to poprzez zdefiniowanie zmiennej środowiskowej STAGING_KERNEL_DIR, która wskazuje na wcześniej sklonowane repozytorium linux-Toradex.

Ustaw zmienną za pomocą następującego polecenia:

export STAGING_KERNEL_DIR=$HOME/work/linux-toradex

Aby konfiguracja była zachowywana między sesjami terminala, dodaj ją do pliku konfiguracyjnego powłoki:

echo 'export STAGING_KERNEL_DIR=$HOME/work/linux-toradex' >> ~/.bashrc
source ~/.bashrc

Ta zmienna umożliwia frameworkowi Overlay Build dostęp do plików nagłówkowych jądra oraz skryptów kompilacyjnych wymaganych przez system budowania jądra Linux.

Klonowanie źródeł nakładki Riverdi

Po skonfigurowaniu ścieżki do jądra kolejnym krokiem jest pobranie kodów źródłowych nakładki Riverdi, z których korzystamy w tym poradniku.

Sklonuj repozytorium do katalogu roboczego:

git clone https://github.com/riverdi/riverdi-toradex-DTS.git

To repozytorium zawiera pliki źródłowe nakładki drzewa urządzeń (Device Tree overlay), służące do konfiguracji wyświetlaczy Riverdi z modułami Toradex Verdin.

W kolejnym etapie niniejszego przewodnika te źródła nakładek zostaną zintegrowane z frameworkiem nakładek firmy Toradex.

Weryfikacja gałęzi repozytorium i lokalizacja źródeł nakładek

Przed rozpoczęciem procesu kompilacji nakładki zaleca się sprawdzenie, czy zarówno repozytorium linux-Toradex, jak i framework nakładek drzewa urządzeń korzystają z tej samej gałęzi jądra.

Dzięki temu proces kompilacji nakładki pozostaje zgodny z wcześniej używanymi źródłami jądra.

Aktywną gałąź w każdym repozytorium można sprawdzić za pomocą:

git rev-parse --abbrev-ref HEAD

Oba repozytoria powinny raportować tę samą nazwę gałęzi, na przykład:

toradex_5.15-2.2.x-imx

Wykorzystanie tej samej gałęzi w obu repozytoriach gwarantuje, że framework nakładek drzewa urządzeń korzysta z właściwych nagłówków jądra i konfiguracji kompilacji.

Następnie przejdź do sklonowanego repozytorium Riverdi, aby znaleźć źródła nakładki drzewa urządzeń:

cd ~/work/riverdi-toradex-DTS
ls

To repozytorium zawiera pliki źródłowe drzewa urządzeń (.dts) oraz pliki dołączane (.dtsi) służące do konfiguracji wyświetlaczy Riverdi na platformach Toradex Verdin.

W kolejnym kroku wymagane pliki nakładki zostaną skopiowane do środowiska frameworku nakładek firmy Toradex.

Tworzenie nakładki i przygotowanie drzewa źródeł jądra

Na tym etapie pliki źródłowe nakładki Riverdi znajdują się w katalogu kompilacji nakładki, a sama nakładka została dodana do listy dtb-y w pliku Makefile. Kolejnym krokiem jest skompilowanie nakładki.

Z katalogu device-tree-overlays/overlays uruchom kompilację:

make clean
make

Jeśli drzewo źródeł jądra nie zostało jeszcze przygotowane, kompilacja może zakończyć się niepowodzeniem z błędem podobnym do:

Konfiguracja jądra jest nieprawidłowa: brakuje plików „
”, „include/generated/autoconf.h” lub „include/config/auto.conf”

Jest to zgodne z oczekiwaniami, ponieważ framework nakładek Toradex wykorzystuje system budowania jądra Linuksa (Kbuild). Kbuild wymaga skonfigurowanego i przygotowanego drzewa jądra do wygenerowania niezbędnych plików nagłówkowych i artefaktów konfiguracyjnych.

Aby to rozwiązać, przygotuj drzewo źródeł jądra:

  1. Przejdź do repozytorium jądra.
    cd ~/work/linux-toradex
  2. Skonfiguruj kompilację dla platformy Verdin iMX8M Plus. Układ SoC jest 64-bitowym procesorem ARM, więc należy użyć architektury arm64 oraz kompilatora krzyżowego AArch64.
    export ARCH=arm64
    export CROSS_COMPILE=aarch64-linux-gnu-
  3. Zainstaluj toolchain kompilatora krzyżowego w systemie hosta:
    sudo apt install -y gcc-aarch64-linux-gnu
  4. Wygeneruj domyślną konfigurację jądra i przygotuj drzewo jądra:
    make defconfig
    make oldconfig
    make prepare
    make scripts

Polecenia te generują brakujące pliki konfiguracyjne i nagłówki wymagane przez Kbuild, w tym pliki include/config/auto.conf oraz include/generated/autoconf.h.

Po przygotowaniu drzewa jądra wróć do katalogu nakładki i ponownie uruchom kompilację nakładki:

cd ~/work/device-tree-overlays/overlays
make clean
make

Nakładka powinna teraz pomyślnie przejść kompilację i wygenerować plik wyjściowy o rozszerzeniu .dtbo.

Dodanie źródeł nakładki Riverdi do środowiska kompilacji

Framework kompilacji nakładek Toradex kompiluje nakładki znajdujące się w katalogu „overlays”. W związku z tym, zanim rozpocznie się proces kompilacji, należy skopiować pliki źródłowe drzewa urządzeń Riverdi do tego katalogu.

Przejdź do katalogu kompilacji nakładki:

cd ~/work/device-tree-overlays/overlays

Skopiuj plik źródłowy nakładki Riverdi dla 12-calowego wyświetlacza DSI:

cp ~/work/riverdi-toradex-DTS/verdin-imx8mp_panel-cap-touch-12inch-dsi_overlay.dts .

Następnie skopiuj dodatkowe pliki do wyświetlacza, wykorzystywane przez nakładkę:

cp ~/work/riverdi-toradex-DTS/display-*.dtsi 

Te pliki .dtsi zawierają dane konfiguracyjne dotyczące poszczególnych paneli, takie jak parametry czasowe i definicje interfejsów paneli, wykorzystywane przez główny plik nakładki.

Rejestrowanie nakładki w systemie budowania

Aby nakładkę można było skompilować, należy ją dodać do pliku Makefile używanego przez framework nakładek Toradex.

Otwórz plik Makefile znajdujący się w katalogu overlays:

nano Makefile

Dodaj nowy wpis do listy dtb-y:

cd ~/work/riverdi-toradex-DTS
dtb-y += verdin-imx8mp_panel-cap-touch-12inch-dsi_overlay.dtbo

Ta linia nakazuje systemowi budowania jądra, aby podczas procesu kompilacji skompilował odpowiedni plik .dts do postaci pliku binarnego .dtbo.

Po dodaniu tego wpisu nakładka stanie się częścią celów kompilacji i zostanie wygenerowana po uruchomieniu polecenia kompilacji nakładki.

Tworzenie nakładki drzewa urządzeń

Po przygotowaniu drzewa źródeł jądra można pomyślnie skompilować nakładkę.

Wróć do katalogu kompilacji nakładki:

cd ~/work/device-tree-overlays/overlays

Usuń wszystkie pozostałości po poprzednich kompilacjach:

make clean

Następnie uruchom kompilację nakładki:

make

W trakcie procesu kompilacji system budowania jądra Linuksa uruchamia kompilator drzewa urządzeń (dtc) i kompiluje zarejestrowany plik źródłowy nakładki drzewa urządzeń do postaci pliku binarnego .dtbo.

Jeśli kompilacja zakończy się powodzeniem, w wynikach kompilacji znajdą się następujące informacje:

DTC verdin-imx8mp_panel-cap-touch-12inch-dsi_overlay.dtbo

Oznacza to, że plik źródłowy drzewa urządzeń został pomyślnie skompilowany.

Wygenerowany plik .dtbo pojawi się w tym samym katalogu overlays i jest teraz gotowy do przesłania na docelowy moduł Toradex Verdin.

Wdrożenie

Łączenie się z modułem Verdin

Po pomyślnym utworzeniu nakładki drzewa urządzeń w systemie hosta kolejnym krokiem jest wdrożenie jej na module Toradex Verdin.

Aby uzyskać dostęp do konsoli Linuksa modułu, należy połączyć się z urządzeniem za pomocą terminala szeregowego. W tym przykładzie do nawiązania połączenia wykorzystano program PuTTY.

Skonfiguruj połączenie szeregowe, używając następujących parametrów:

  • Typ połączenia: szeregowe
  • Linia szeregowa: Port COM przypisany do portu UART służącego do debugowania urządzenia Verdin – sprawdź to w menedżerze urządzeń
  • Prędkość: 115 200

Po nawiązaniu połączenia terminal wyświetli dziennik rozruchu, a następnie umożliwi dostęp do powłoki systemu Linux działającej na module Verdin.

Ta konsola posłuży do przesłania skompilowanego pliku .dtbo oraz włączenia nakładki w konfiguracji rozruchowej.

Konfiguracja interfejsu sieciowego w module Verdin

Przed przesłaniem skompilowanego pliku nakładki na urządzenie docelowe moduł Verdin musi mieć połączenie sieciowe z hostem programistycznym.

Najpierw sprawdź dostępne interfejsy sieciowe i ich aktualną konfigurację:

ip a

To polecenie wyświetla wszystkie interfejsy sieciowe obecne w systemie wraz z ich aktualnym stanem.

Następnie przypisz statyczny adres IP do interfejsu Ethernet:

ip addr add 192.168.10.2/24 dev eth0

Następnie włącz interfejs:

ip link set eth0 up

Po skonfigurowaniu interfejsu moduł Verdin może komunikować się z komputerem głównym za pośrednictwem sieci lokalnej. Połączenie to zostanie wykorzystane w kolejnym kroku do przesłania skompilowanego pliku .dtbo.

Konfiguracja statycznego adresu IP na hostie

Aby umożliwić komunikację między hostem programistycznym a modułem Verdin, oba urządzenia muszą znajdować się w tej samej podsieci.

Po przypisaniu adresa 192.168.10.2 do modułu Verdin należy skonfigurować interfejs Ethernet na komputerze głównym, nadając mu statyczny adres IP.

W systemie Windows otwórz „Zaawansowane ustawienia sieciowe”, a następnie przejdź do właściwości karty sieciowej Ethernet i ręcznie skonfiguruj ustawienia IPv4.

Ustaw następujące parametry: (można ustawić inne, ale my po prostu zalecamy właśnie te)

  • Adres IP: 192.168.10.1
  • Maska podsieci: 255.255.255.0
  • Brama domyślna: pozostaw puste

W tej konfiguracji oba urządzenia znajdują się w tej samej sieci lokalnej:

  • Host computer → 192.168.10.1
  • Moduł Verdin → 192.168.10.2

Po skonfigurowaniu tego ustawienia oba systemy mogą komunikować się bezpośrednio przez sieć Ethernet, a skompilowany plik .dtbo można w kolejnym kroku przesłać do modułu Verdin.

Przenoszenie nakładki do modułu Verdin

Po połączeniu komputera głównego z modułem Verdin za pośrednictwem sieci skompilowaną nakładkę drzewa urządzeń można przesłać do urządzenia docelowego.

W tym przykładzie plik jest kopiowany za pomocą protokołu scp (Secure Copy Protocol):

scp ~/work/device-tree-overlays/overlays/verdin-imx8mp_panel-cap-touch-12inch-dsi_overlay.dtbo \
[email protected]:/boot/overlays/

To polecenie kopiuje skompilowany plik .dtbo z hosta programistycznego do katalogu /boot/overlays w module Verdin.

Podczas pierwszego połączenia SSH system hosta może wyświetlić komunikat dotyczący bezpieczeństwa z prośbą o potwierdzenie autentyczności urządzenia docelowego. Po zaakceptowaniu odcisku transfer plików przebiega normalnie.

Katalog /boot/overlays służy konfiguracji rozruchowej Toradex do przechowywania plików binarnych nakładek drzewa urządzeń (Device Tree), które mogą być ładowane podczas uruchamiania systemu.

Podsumowanie

Upewnij się, że nakładka dokładnie odpowiada wersji BSP i gałęzi jądra używanej na urządzeniu docelowym – to właśnie stąd bierze się większość problemów z kompilacją. Po prawidłowym skonfigurowaniu środowiska proces staje się powtarzalny: kompilacja, wdrożenie, włączenie i testowanie. Dalsze dostosowywanie nakładek do innych wyświetlaczy Riverdi sprowadza się głównie do modyfikacji plików specyficznych dla danego panelu.

ODKRYJ NASZĄ

Whitepaper

Osiągnij idealną interakcję użytkownika z wyświetlaczem dzięki odpowiedniemu czujnikowi Touch Sensor IC. Czy kiedykolwiek zmagałeś się z problemami związanymi z fantomowymi dotknięciami lub certyfikacją? Rozwiń swoje prace B+R jak profesjonalista dzięki naszemu Whitepaperowi!

Przejdź do naszego katalogu produktów i zobacz, jak możesz oszczędzać dzięki jakości, nie na jakości.

Skontaktuj się z nami już teraz, oszczędzaj dzięki jakości, nie na jakości.