Linux w systemach Embedded
Zobacz ceny szkoleń i zapisz się »
Szkolenie dla wszystkich zainteresowanych rozwijaniem projektów opartych o Embedded Linux. Daje solidną wiedzę i bazę do pogłębiania wiedzy. Uczestnicy naszego intensywnego szkolenia będą w stanie zaplanować, rozpocząć i rozwijać własny projekt.
Na praktycznych przykładach z dużą ilością ćwiczeń pokazane zostaną wszystkie aspekty pracy z kodem źródłowym i narzędziami systemu Linux. Od bootloadera, przez kernel i jego konfigurację, język opisu sprzętu: device-tree po narzedzia przestrzeni użytkownika. Przede wszystkim: odpowiedzialne za uruchomienie i kontrolowanie aplikacji (systemd), wysokopoziomowe biblioteki oraz narzędzia do debugowania i profilowania systemu.
- Czas trwania: 4 dni (32 godziny zegarowe)
Program szkolenia
1. Linux w systemach wbudowanych - budowa systemu
- Wprowadzenie do Linuksa Embedded – "w pigułce".
- Kompilacja, cross-kompilacja dla systemów wbudowanych, praca z systemem kontroli wersji GIT, dobór narzędzi deweloperskich, typowe rozwiązania, problemy i błędy.
- Uruchamianie urządzenia: Power-on-reset, bootloader pierwszego poziomu, U-Boot.
- Konfiguracja, kompilacja i uruchamianie jądra Linux.
- Główny system plików (Root Filesystem) - przygotowanie, zawartość - Busybox - narzędzia i skrypty.
- Profilowanie procesu startu i jego optymalizacja.
Po tej części
Uczestnicy będą w stanie samodzielnie zaplanować dobór odpowiednich narzędzi (toolchain-a)
dla danych urządzeń i zadań. Poznają budowę systemu Embedded Linux i sposób jego
uruchamiania. Samodzielnie skompilują i uruchomią system bazowy poznając jego komponenty i ich wzajemne zależności.
Ćwiczenia
Ta seria ćwiczeń polega na sukcesywnej kompilacji poszczególnych elementów systemu i
uruchamianiu ich na urządzeniu w celu zrozumienia z czego składa się i jak działa system.
- Posługiwanie się cross-kompilatorem (z linii poleceń), konfiguracja systemu do pracy z
cross-kompilatorem (ścieżki, sysroot, dodatkowe pakiety i biblioteki).
- Kompilacja bootloadera – u-boot i uruchomienie go z wykorzystaniem procedury.
Recovery (start urządzenia bez wgranego firmware-u), modyfikacja kodu źródłowego bootloadera. Konfiguracja i parametryzacja u-boot-a (zmienne, skrypty).
- Kompilacja jądra Linux i uruchomienie go na urządzeniu przy pomocy bootloadera.
- Uruchomienie urządzenia z karty SD (formatowanie karty, automatyzacja procesu).
- Przygotowanie systemu bazowego (Busybox), skryptów startowych, uruchomienie
kompletnego systemu.
- Analiza i rozwiązanie typowych problemów występujących podczas startu i w trakcie działania systemu.
- (opcjonalnie): Samodzielne przygotowanie toolchain-a, praca z
crosstool-ng
, typowe
problemy.
2. Budowanie i debugowanie systemu jako całości przy pomocy narzędzi Yocto Project. Główny system plików. Wprowadzenie do programowania w jądrze
- Buildroot - konfiguracja, receptury - krótkie wprowadzenie do narzędzia automatyzującego pracę.
- Yocto Project - konfiguracja, receptury, use-case, dostosowanie narzędzi do własnych potrzeb.
- Specyfika pracy z narzędziami Yocto Project:
bitbake
, poky
, meta-layers
itd.
- Integracja BSP dostarczanych przez producentów sprzętu (SoC, SoM).
- Specyfika działania i zależności między komponentami.
- Praca z konfiguracją.
- Dobre praktyki.
- Systemy plików na urządzenia blokowe i NAND, przechowywanie danych:
- ramdysk,
- urządzenia blokowe (SD, eMMC)
- pamięci NAND.
- Automatyczne i manualne aktualizacje systemu na urządzeniu - planowanie i konfiguracja systemu budowania (
SWUpdate
, hawkbit
, Mender.io
).
- Konfiguracja IDE (Eclipse lub VSCode) do pracy z BSP/SDK i kodem źródłowym jądra i aplikacji.
- Wprowadzenie do programowania systemowego.
- Wprowadzenie do programowania sterowników urządzeń
- moduł jądra (podstawowy kontener opakowujący kod sterowników urządzeń).
- komnunikacja proces-jądro, urządzenia znakowe i blokowe, procfs, sysfs, mmap.
- zarządzanie procesami przestrzeni użytkownika, organizacja pamięci, timery, współbieżność i synchronizacja, obsługa przerwań.
- Model urządzeń systemu Linux: znakowe, blokowe, sieciowe, magistrale (bus drivers) i organizacja urządzeń i sterowników.
Po tej części
Uczestnicy będą potrafili posługiwać się narzędziami: Buildroot i Yocto i przy ich pomocy tworzyć własną dystrybucję systemu (minimalistyczną i zoptymalizowaną do konkretnego zastosowania). Będą w stanie dodawać własne skrypty i narzędzia oraz aktualizować wersje pakietów.
Skonfigurują środowisko pracy (Eclipse lub VSCode) i użyją go podczas pracy z kodem źródłowym jądra.
Ćwiczenia
- (opcjonalnie) Kompilacja systemu przy pomocy Buildroot-a, wybór wersji jądra, programów,
dodawanie własnych komponentów (serwer SSH, serwer WWW).
- Kompilacja systemu przy pomocy narzędzi Yocto Project, wybór wersji jądra, programów, dodawanie własnych komponentów (serwer SSH, serwer WWW).
- (opcjonalnie) Automatyczne montowanie sieciowego systemu plików NFS.
- Obsługa systemów plików na urządzenia blokowe i/lub pamięci NAND Flash.
- Integracja systemu aktualizacji oprogramownia na urządzeniu (na przykładzie `SWUpdate``).
- Konfiguracja Eclipse lub VSCode do cross-kompilacji i pracy z kodem źródłowym jądra oraz do zdalnej pracy z urządzeniem.
- Kompilacja modułów jądra - podstawowych kontenerów opakowujących sterowniki urządzeń, analiza działania sterownika urządzenia platform oraz mechanizmu hotplug.
3. Model urządzeń (sterowników) Linuxa. Programy przestrzeni użytkownika - Systemd. Debugowanie i profilowanie systemu
- Jak Linux widzi sprzęt? – komunikacja z urządzeniami, wejście – wyjście: polling i sterowne przerwaniami.
- Model sterowników urządzeń, frameworki i wewnętrzne API jądra
- Device-Tree - konfiguracja urządzeń platformy.
- Przykłady zastosowania frameworków w rzeczywistych rozwiązaniach: USB, I2C, 1-wire, SPI, urządzenia sieciowe, DMA, PWM.
- Elementy debugowania jądra.
systemd
- zadządzanie procesami w przestrzeni użytkownika
udev
- wykrywanie i konfiguracja sprzętu
- zarządzanie uruchamianiem aplikacji i zasobami sprzętowymi:
unit
, service
- konfiguracja sieci i adresów sieciowych
- zarządzanie zasobami (procesor, pamięć, przepustowość magistrali danych,
namespaces
)
- śledzenie jądra i procesów użytkownika
- analiza pracy systemu przy pomocy narzędzi graficznych (analiza logów z narzędzi profilowania), profilowanie czasu uruchomienia systemu.
Po tej części
Uczestnicy będą rozumieć wewnętrzną budowę najważniejszych komponentów systemu Embedded Linux:
- jądra systemu (programowanie w jądrze polega w dużej mierze na znajomości odpowiednich frameworków oraz układu poszczególnych warstw). Uczestnicy będą w stanie rozszerzać istniejącą konfigurację Device-Tree, oraz analizować i konfigurować kod źródłowy sterowników urządzeń. Otrzymają także dużą ilość gotowych działających przykładów kodu i skryptów konfiguracyjnych.
- narzędzi
systemd
, które odpowiadają za uruchomienie aplikacji przestrzeni użytkownika i zarządzanie nimi.
Uczestnicy otrzymają przeglądową wiedzę na temat interesujących narzędzi, bibliotek i technologii wraz z działającymi przykładami oraz metodami zdalnego debugowania.
Ćwiczenia
Polegają na uruchamianiu i modyfikowaniu dostarczonych przykładów kodu i aplikacji.
W każdym ćwiczeniu podstawowy "szkielet" kodu jest już gotowy, trzeba dopisać główną funkcję, zmodyfikować działanie przykładu lub przeprowadzić eksperyment.
- Podłączanie urządzenia - na przykładzie termometru 1-wire lub LED GPIO/PWM. Odczytać ze schematu linię GPIO, znaleźć jej opcje w dokumentacji, ustawić multipleksację oraz konfigurację PIN-u przy pomocy Device-Tree, uruchomić odpowiedni sterownik magistrali 1-wire/LED i wykorzystać go w aplikcaji.
To ćwiczenie pokazuje ścieżkę, jaką trzeba przejść podczas definiowania peryferiów własnego urządzenia ze szczególnym uwzględnieniem ścieżki debugowania.
- konfiguracja
systemd
do wykrywania i reagowania na zmiany stanu urządzenia raportowane przez sterownik: hotplug (udev
), uprawnienia dostępu do urządzeń, automatyczne uruchamianie skryptów i procesów.
- komunikacja aplikacji ze sprzętem
- przykładowa aplikacja: uruchomienie i debugowanie serwera RTSP
- przygotowanie konfiguracji systemu (systemd) w taki sposób, aby storzona aplikacja była automatycznie uruchamiana przy starcie i restartowana w przypadku awarii (watchdog).
- automatyczna konfiguracja sieci, WiFi, endpoint-u USB (itp.)