Real-Time Linux w zastosowaniach przemysłowych
Zobacz ceny szkoleń i zapisz się »
Linux jest coraz częściej wykorzystywany w aplikacjach wymagających odpowiedzi w czasie rzeczywistym.
Podczas intensywnego kursu, omawiane są wszystkie aspekty dostosowania tego systemu do zastosowań w charakterze sterownika procesu przemysłowego.
Tematyka oparta jest na doświadczeniu trenera w stosowaniu systemu Linux Real-Time do sterowania procesami przemysłowymi takimi, jak: ważenie komponentów, sterowanie syntezą łańcuchów RNA oraz sterowanie - teleoperowanie - robotami do zastosowań specjalnych (EOD UGV)
- Czas trwania: 2 dni (16 godzin zegarowych)
Cel szkolenia
- Zapoznanie z zagadnieniami czasu rzeczywistego, przetwarzania w czasie rzeczywistym i możliwości systemu Linux.
- Nabycie praktycznych umiejętności planowania, dostosowania i wdrożenia zmodyfikowanego Linuksa jako systemu czasu rzeczywistego.
- Poznanie wzorców projektowych i umiejętności tworzenia aplikacji działających w czasie rzeczywistym.
- Praktyczne ćwiczenia z implementacji aplikacji czasu rzeczywistego w systemie Linux.
Program Szkolenia
Dzień 1. Linux w systemach wbudowanych - budowa systemu, wprowadzenie do zagadnień Real-Time w Linuksie
Wprowadzenie do Linuksa Embedded - "w pigułce" (kompilacja, cross-kompilacja dla systemów wbudowanych, struktura kodu jądra i narzędzi, praca z systemem kontroli wersji GIT, moduły jądra, licencje). cross-toolchain - budowa, planowanie i dobór narzędzi deweloperskich, typowe rozwiązania, problemy i błędy (toolchain zbudowany samodzielnie
vs. Gotowy)
- Uruchamianie urządzenia: Power-on-reset, bootloader pierwszego poziomu, u-boot
- Uruchamianie jądra Linux, budowa jądra. Budowa systemu (warstwy), jądro - przestrzeń użytkownika.
- Realizacja wejścia-wyjścia w systemie Linux, polling i przerwania, Obsługa przerwań,
- Wprowadzenie do zagadnień Real-Time - rozwiązania sprzętowe i programowe.
- Zastosowanie Linuksa w systemach Real-Time (latency, jitter, worst case, safety critical) - na przykładzie prostej aplikacji sterującej wejściami-wyjściami sterownika,
- pomiary opóźnień przy pomocy narzędzi wewnętrznych i zewnętrznych
- budowa typowego sterownika (magistrala, frameworki dostępne w jądrze),
- skąd się biorą opóźnienia - analiza sprzętowych i programowych źródeł opóźnień,
- opcje konfiguracji jądra związane z opóźnieniami,
- przerwania, dolne połówki, opóźnienia w obsłudze przerwań,
- wywłaszczanie kodu jądra (voluntary, forced preemption),
- High Resolution Timers
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. Przedstawione zostaną źródła opóźnień w obsłudze wejścia-wyjścia i metody ich pomiarów. Na przykładowym sterowniku realizującym wejście-wyjście na liniach GPIO - przedstawiona zostanie budowa sterownika (magistrala platform, rejestracja urządzeni, rejestracja sterownika, frameworki udostępniane przez jądro, rejestracja przerwania, opis urządzeń - Device-Tree). Uczestnicy stworzą (z dostarczonych komponentów) i zmodyfikują przykładową aplikację sterownika procesu oraz zbadają wpływ opcji konfiguracji kodu źródłowego jądra i działającego systemu na czas odpowiedzi aplikacji.
Ć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 Linux Real-Time.
- kompilacja jądra Linux i uruchomienie go na urządzeniu, zmiana opcji konfiguracji kodu źródłowego jądra,
- uruchomienie sterownika realizującego wejście-wyjście (linia GPIO z przerwaniem, linia GPIO - LED).
- Ustawienie multipleksacji pin-ów, modyfikacja i rekompilacja Device-Tree.
- stworzenie wielowątkowej aplikacji sterownika przemysłowego - dobór odpowiednich narzędzi i bibliotek oraz interfejsów systemowych i ich wpływ na opóźnienia w aplikacji,
Dzień 2. PREEMPT-RT, wzorce projektowe Real-Time, pomiary i profilowanie systemu i aplikacji
- Efektywna zmiana systemu Linux w system deterministyczny.
- RT-PREEMPT - patche dla jądra Linux poprawiające responsywność implementacja,
- dobór wersji jądra i patchy (long-time-support kernels, safety critical Linux, external tests)
- konfiguracja, używanie, strojenie,* pomiary czasu reakcji,
- użycie i pomiary na przykładzie urządzenia realizującego sterowanie procesem przemysłowym (laser medyczny, dozowanie komponentów)
- API POSIX-RT i jego implementacja w Linuksie
- procesy, planista
- wątki (tworzenie, zarządzanie, synchronizacja)
- komunikacja proces-jądro (mmap)
- blokowanie pamięci, prefetching
- real-time IPC - signals, shared memory, locking (semaphores, mutexes, futexes ...), message queues and mailboxes.
- AIO - Asynchronous Input-Output - making use of non-real time drivers and peripherals, storing data on disk, using non real-time network.
- Xenomai
- prezentacja alternatywnego podejścia do rozwiązań czasu rzeczywistego w Linuksie (mikrojądro, I-PIPE, interrupt domains)
- RTDM - Real Time Device Model
- IPC in Xenomai
- Rozwiązania własnościowe polegające na użyciu dodatkowego mikrokontrolera wbudowanego w SoC (omówienie podejść TI - PRU, NXP i STMicro).
- Zagadnienia związane z Safety-Critical i aplikowalności systemów opartych na linuksie do wymagań SIL.
Po tej części
Uczestnicy będą potrafili korzystać a API dostępnego w niezmodyfikowanym jądrze Linux (do tworzenia aplikacji Soft-Real-Time) a także posługiwać się patchami PREEMPT-RT a także zaprojektować system i aplikację pod kątem zastosowań w systemach Real-Time.
Ćwiczenia
Polegają na sukcesywnym budowaniu aplikacji realizującej sterowanie procesem przemysłowym (sterowanie laserem). Aplikacja składa się z GUI zbudowanego przy pomocy biblioteki QT, oraz napisanej w C części realizującej sterowanie w czasie rzeczywistym. Komunikacja odbywa się przez mechanizmy systemowe oraz sieć (GUI działa na PC).
Część realizująca GUI, szkielet aplikacji są przygotowane wcześniej - uczestnicy implementują kluczowe funkcje.
- Praca z kodem,
- Kompilacja, uruchomienie aplikacji,
- Ustawienie odpowiednich parametrów planisty,
- Alokacja i zablokowanie pamięci,
- Realizacja wejścia-wyjścia,
- Nieblokująca komunikacja pomiędzy procesami,
- Pomiary opóźnień.