Real-Time Linux w zastosowaniach przemysłowych
Linux jest coraz częściej wykorzystywany w systemach wymagających przetwarzania
danych i odpowiedzi w czasie rzeczywistym. Podczas kursu, omawiane są wszystkie
aspekty dostosowania tego systemu do zastosowań w charakterze sterownika procesu
przemysłowego.
Omawiany jest Linux jako RTOS: rozwiązania otwartoźródłowe: RT-PREEMPT, Xenomai,
RTAI oraz komercyjne, polegające na użyciu koprocesora (PRU lub Cortex-M).
- Czas trwania
- 4 dni (32 godziny)
Cel szkolenia
- Zapoznanie z zagadnieniami czasu rzeczywistego, przetwarzania w czasie
rzeczywistym.
- 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.
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.
- Buildroot – konfiguracja, receptury, use-case, dostosowanie narzędzi do własnych potrzeb.
- Realizacja wejścia-wyjścia w systemie Linux, polling i przerwania.
- Obsługa przerwań,
- Multipleksacja pin-ów, Device-Tree.
- Wprowadzenie do zagadnień Real-Time – rozwiązania sprzętowe i programowe.
- Zastosowanie Linuksa w systemach Real-Time (latency, jitter, worst case, safety critical)
- pomiary opóźnień z użyciem generatora i oscyloskopu
- budowa typowego sterownika (magistrala, frameworki dostępne w jądrze),
- skąd się biorą opóźnienia
- 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. Samodzielnie zbudują system bazowy. 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).
Ć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). Omawiane są podstawowe różnice pomiędzy wariantami biblioteki standardowej: glibc, uClibc, musl.
- kompilacja bootloadera – u-boot i uruchomenie go z wykorzystaniem procedury Recovery (start urządzenia bez wgranego firmware-u) - uruchamianie „zbrickowanego” urządzenia.
- konfiguracja i parametryzacja u-boot-a (zmienne, skrypty)
- uruchomienie urządzenia z karty SD (formatowanie karty, automatyzacja procesu)
- kompilacja jądra Linux i uruchomienie go na urządzeniu (u-boot ładuje jądro z karty SD)
- kompilacja systemu przy pomocy Buildroot-a, wybór wersji jądra, programów, dodawanie własnych komponentów (serwer SSH, serwer WWW)
- konfiguracja sieci: hotplug Ethernet (ifplugd),
- konfiguracja sieci USB (urządzenie jako klient USB)
- uruchomienie sterownika realizującego wejście-wyjście (linia GPIO z przerwaniem, linia GPIO – LED).
- Ustawienie multipleksacji pin-ów, modyfikacja i rekompilacja Device-Tree.
Dzień 2. How to make Linux Real-Time?
- dokończene tematów z poprzedniego dnia (ftrace, pomiary)
- 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.
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.
Ć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.
- Kompilacja, uruchomienie aplikacji
- Ustawienie odpowiednich parametrów planisty
- Alokacja i zablokowanie pamięci
- Realizacja wejścia-wyjścia
- Nieblokująca komunikacja pomiędzy procesami
Dzień 3. Utilizing Co-kernel approach
Prezentacja rozwiązań, w których procesy Real-Time działają pod kontrolą mikrojądra, równolegle z nimi uruchamiany jest Linux (jako jeden z wątków mikrojądra).
- I-pipe (Adeos), Nano-kernel design, interrupt domains and pipelines
- Xenomai (rozwiązanie do zastosowań przemysłowych)
- introduction,
- implementation,
- configuring optimizing and tuning
- RTDM – Real Time Device Model
- Xenomai Skins – the way of emulating traditional RTOS-es on top of I-Pipe
- IPC in Xenomai
- Xenomai – Linux communication
- measuring the ability of the system to respond to signal (the lowest possible latency)
- RTAI – alternative co-kernel solution (krótko – jest to rozwiązanie „akademickie”)
- unique properties of RTAI
- RTAI-Lab – toolchain to develop block diagrams, that can be compiled and executed on the RTAI Linux system.
- Scilab, Scicos, Matlab, Simulink or RTW integration.
Po tej części:
Uczestnicy będą w stanie korzystać z Xenomai.
Ćwiczenia:
Część Real-Time aplikacji przygotowanej poprzedniego dnia zostanie zaimplementowana jako wątek Xenomai.
- Praca z kodem.
- Realizacja procesu Real-Time w Xenomai (domeny kod)
- Realizacja sterownika (RTDM – Real-Time Devices Model)
- Komunikacja Xenomai – Linux
- Pomiary opóźnień.
Dzień 4. Real-Time communication.
- Real-Time networking, network latency
- network stack, protocols, sockets, raw sockets
- RTnet, RTmac
- distributed real-time processing
- Talking to the world
- input/output interfaces: Serial, GPIO, SPI, I2C, CAN
- ... and protocols CAN, Modbus
- analog input
- Industrial I/O
- Comedi Framework
- best practices of Real-Time Linux in Safety-Critical environments
- watchdog
- error recovery (memory ECC, error-safety algorithms).
- PRU (Programmable Real-Time Unit)
- wykorzystanie jednostek PRU dostępnych w procesorach AM335x
- kompilacja i ładowanie kodu mikrokontrolera
- komunikacja z programem,
- obsługa I/O, pomiary.
- Dodatkowe use-case-y (do wyboru):
- propozycja: bezpieczeństwo systemu – zabezpieczanie oprogramowania przed nieuprawnioną analizą – szyfrowanie urządzeń blokowych i pamięci NAND, zabezpieczanie firmware-u.
- propozycja: zabezpieczenie oprogramowania przed sklonowaniem, zabezpieczenie przed wgraniem i uruchomieniem obcego kodu
- propozycja: komunikacja z zegarem RTC podtrzymywanym bateryjnie, dostępnym na magistrali I2C
propozycja: omówienie mechanizmu framebuffera, wyświetlacz graficzny, wyświetlacz tekstowy
propozycja: recovery, software update: praktyczne rozwiązania aktualizacji systemu: sprzętowy bootloader, u-boot, ramdysk.
- propozycja: IPv6 – konfiguracja i zastosowanie, zabezpieczanie komunikacji sieciowej (Ipsec)
- propozycja: automatyczna konfiguracja usług i wykrywanie urządzeń w sieci lokalnej: Avahi (oraz którko: samba, upnp).
Ćwiczenia:
Ćwiczenia polegają na uruchamianiu, modyfikacji i testowaniu programów i skryptów realizujących poszczególne use-case-y.