The Next Big Thing: Rust for Linux Drivers

Pisanie sterowników Linux w Rust na platformie STM32MP1. Memory safety bez garbage collectora — przyszłość embedded już tu jest.

O kursie

70% wszystkich luk bezpieczeństwa w systemach operacyjnych (Microsoft, Google) wynika z błędów zarządzania pamięcią: buffer overflow, use-after-free, double-free. W odpowiedzi na te wyzwania Rust oficjalnie wszedł do głównego drzewa jądra Linux (v6.1).

Rust to język systemowy gwarantujący memory safety na etapie kompilacji — bez garbage collectora, z wydajnością porównywalną do C. To nie eksperyment akademicki, lecz strategiczny krok w eliminację całych klas błędów.

Dla platformy STM32MP1, stosowanej w aplikacjach krytycznych (bramki IoT, HMI, urządzenia medyczne), Rust oznacza sterowniki, które:

  • Nie mają wycieków pamięci — RAII zwalnia zasoby automatycznie
  • Nie mają data races — kompilator blokuje dostęp bez blokady
  • Wymuszają obsługę błędówResult<T, E> zamiast ignorowanych kodów powrotu

Nie musisz znać Rusta — Dzień 1 to intensywny “akcelerator” dla programistów C.


🎯 Cel Projektowy: “GPIO Driver in Rust”

Podczas kursu piszemy prawdziwy sterownik, nie kopiujemy przykłady. Uczestnicy stworzą moduł jądra, który:

Steruje diodą LED przez rejestr BSRR (atomowy zapis, brak wyścigu)

Obsługuje przerwanie przycisku (User Button) z licznikiem wciśnięć

Eksponuje interfejs plikowy /dev/stm32_rust do komunikacji z userspace

Jest sterowany z Pythona — skrypt mruga diodą i odczytuje stan przycisku

Automatycznie zwalnia zasoby — dzięki RAII i trait Drop

Kompiluje się w Yocto — pełna integracja z ekosystemem OpenSTLinux


📅 Program szkolenia

DZIEŃ 1: The Language – Od C do Rusta w Jeden Dzień

Intensywny “akcelerator” dla programistów C. Nie musisz znać Rusta — nauczysz się tu.

Moduł 1.1: Dlaczego Rust w Jądrze?

  • Case study: Błąd use-after-free i jak kompilator Rusta go blokuje
  • Statystyki CVE: 70% to błędy pamięci — czy możemy je wyeliminować?
  • Mit “Safe Rust”: rola unsafe w kodzie jądra

Moduł 1.2: Model Własności (Ownership)

  • Mapowanie pojęć C → Rust: kmalloc/kfreeBox, mutexMutex<Data>, refcount_tArc
  • Borrow Checker: dlaczego kompilator krzyczy i jak to naprawić
  • Lab: Przepisanie fragmentu kodu C na Rust

Moduł 1.3: Konfiguracja Yocto dla Rusta

  • Wyzwania 32-bitowego ARM (Tier 2): bindgen, ABI, wyrównanie pamięci
  • Konfiguracja jądra z obsługą Rusta
  • Lab: Przygotowanie warstwy Yocto i kompilacja obrazu

Moduł 1.4: Pierwszy Moduł — “Hello STM32MP1”

  • Struktura modułu jądra w Rust: makro module!, trait Module, trait Drop
  • Automatyczne zarządzanie zasobami (RAII) vs manualne kfree w C
  • Lab: Kompilacja i ładowanie pierwszego modułu

DZIEŃ 2: The Hardware – Platform Drivers i MMIO

Interakcja ze sprzętem STM32MP1. Bezpieczny dostęp do rejestrów GPIO.

Moduł 2.1: Mapa Pamięci STM32MP1

  • Memory Mapped I/O: rejestry jako adresy w przestrzeni procesora
  • Rejestry GPIO: MODER, ODR, BSRR — tryby i atomowość operacji
  • Dlaczego BSRR? Problem Read-Modify-Write na wielordzeniowym SoC

Moduł 2.2: Device Tree i Platform Driver

  • Wiązanie wpisu Device Tree ze sterownikiem
  • Trait PlatformDriver w Rust (jądro 6.6+)
  • Lab: Modyfikacja Device Tree, rejestracja sterownika

Moduł 2.3: Bezpieczny Dostęp do Rejestrów (IoMem)

  • Problem: readl/writel jako surowe wskaźniki → unsafe
  • Rozwiązanie: abstrakcja IoMem<SIZE> i Devres
  • Lab: Implementacja probe, mapowanie GPIO

Moduł 2.4: Sterowanie LED

  • Bloki unsafe — kiedy i dlaczego są niezbędne
  • Ograniczanie unsafe do minimalnego zakresu
  • Lab: Mruganie diodą LED z poziomu sterownika

DZIEŃ 3: The Integration – Przerwania, Userspace i Projekt Końcowy

Obsługa przycisku, interfejs plikowy i integracja z aplikacją Python.

Moduł 3.1: Obsługa Przerwań (IRQ)

  • Przycisk użytkownika jako źródło przerwania
  • Rejestracja wątkowanego przerwania (threaded IRQ)
  • Synchronizacja: SpinLock vs Mutex — kompilator wymusza poprawność
  • Lab: Obsługa przycisku z licznikiem wciśnięć

Moduł 3.2: Interfejs Plikowy (Character Device)

  • Rejestracja miscdevice — plik /dev/stm32_rust
  • Trait file::Operations: implementacja read/write
  • Lab: Sterowanie LED i odczyt licznika przez plik urządzenia

Moduł 3.3: Projekt Końcowy

  • Integracja wszystkich elementów w jeden sterownik
  • Komunikacja z aplikacją userspace (Python)
  • Lab: Kompletny sterownik z interfejsem plikowym i obsługą przerwań

Moduł 3.4: Podsumowanie i Q&A

  • Porównanie C vs Rust: zarządzanie pamięcią, błędy, współbieżność, rozmiar
  • Optymalizacja rozmiaru binarnego
  • Przyszłość Rusta w jądrze Linux
  • Konsultacje własnych projektów

💰 Cennik

FULL RUST EXPERIENCE (3 Dni)

Kompletne szkolenie od podstaw Rusta po działający sterownik z interfejsem userspace.

ZakresCały program (Dni 1-3)
EfektDziałający sterownik GPIO w Rust + wiedza o integracji Yocto
Cena4 800 PLN netto / os.
Min. grupa5 osób

Nie znasz Rusta? Nie szkodzi — Dzień 1 to intensywny “akcelerator” dla programistów C. Wychodzisz z solidnymi podstawami języka.


🏆 Dlaczego warto?

KorzyśćOpis
Eliminacja klas błędów70% CVE znika — use-after-free, buffer overflow, data race
Specyfika 32-bit ARMAdresujemy wyzwania Tier 2: bindgen, ABI, brak 64-bit atomics
Praktyka, nie teoriaPiszemy sterownik GPIO ze sprzętowym efektem (LED, przycisk)
ComplianceCyber Resilience Act (CRA) wymusza memory safety — Rust to odpowiedź

🛠️ Wymagania

Sprzęt (zapewniony):

  • Płytka STM32MP157C-DK2
  • Karta microSD 16GB
  • Kabel USB Type-C, konwerter USB-UART

Oprogramowanie:

  • Kontener Docker z pre-konfigurowanym Yocto + Rust toolchain
  • VS Code z rust-analyzer (podpowiadanie kodu w czasie rzeczywistym)

Wiedza uczestnika:

  • Język C (wskaźniki, struktury, zarządzanie pamięcią)
  • Podstawy jądra Linux (przestrzeń użytkownika vs jądra, moduły)
  • Rust NIE jest wymagany — nauczysz się na miejscu

🎁 Sprzęt po warsztatach zostaje u uczestników!

Chcesz zarezerwować termin dla swojego zespołu? Skontaktuj się, aby ustalić szczegóły. Dołącz do rewolucji — pisz sterowniki, które nie mają wycieków pamięci.

Zainteresowany szkoleniem?

Skontaktuj się, aby omówić szczegóły, dostosować program do potrzeb Twojego zespołu lub umówić termin.

Kontakt ← Wszystkie szkolenia
Informacje o szkoleniu
  • Czas trwania:
    3 dni
  • Poziom:
    Zaawansowany
  • Wymagania:
    C, Linux kernel basics
Kategorie
Rust Linux Drivers STM32MP1
Zapytaj o szkolenie

Dostosowuję program do potrzeb uczestników. Szkolenia prowadzę stacjonarnie, zdalnie lub hybrydowo.

Kontakt