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ów —
Result<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
unsafew kodzie jądra
Moduł 1.2: Model Własności (Ownership)
- Mapowanie pojęć C → Rust:
kmalloc/kfree→Box,mutex→Mutex<Data>,refcount_t→Arc - 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!, traitModule, traitDrop - Automatyczne zarządzanie zasobami (RAII) vs manualne
kfreew 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
PlatformDriverw Rust (jądro 6.6+) - Lab: Modyfikacja Device Tree, rejestracja sterownika
Moduł 2.3: Bezpieczny Dostęp do Rejestrów (IoMem)
- Problem:
readl/writeljako 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
unsafedo 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:
SpinLockvsMutex— 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: implementacjaread/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.
| Zakres | Cały program (Dni 1-3) |
| Efekt | Działający sterownik GPIO w Rust + wiedza o integracji Yocto |
| Cena | 4 800 PLN netto / os. |
| Min. grupa | 5 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ów | 70% CVE znika — use-after-free, buffer overflow, data race |
| Specyfika 32-bit ARM | Adresujemy wyzwania Tier 2: bindgen, ABI, brak 64-bit atomics |
| Praktyka, nie teoria | Piszemy sterownik GPIO ze sprzętowym efektem (LED, przycisk) |
| Compliance | Cyber 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