Programowanie sterowników urządzeń w jądrze Linux - Linux Device Drivers Development
| SzkolenieKurs na praktycznych przykładach dostarcza wiedzę niezbędną do rozpoczęcia projektowania i implementacji sterowników urządzeń w jądrze Linux. Omawiana jest organizacja kodu źródłowego sterowników, sposoby komunikacji jądra z przestrzenią użytkownika, usługi i mechanizmy dostarczane przez jądro sterownikom, oraz sposoby debugowania kodu. Praktyczne ćwiczenia przeprowadzane są na komputach o architekturze ARM, zarówno fizycznyh, jak i emulowanych. Cel szkolenia: poznanie zasad działania jądra Linux; poznanie sposobów analizowania i debugowania jądra; poznanie algorytmów, mechanizmów i ich warstw: planisty, wywołań systemowych, zarządzania pamięcią; poznanie zasad i dobrych praktyk związanych z tworzeniem sterowników w Linuksie; wykształcenie praktycznych umiejętności pisania sterowników (obsługi pamięci, przerwań, komunikacji z przestrzenią użytkownika, współbieżności itp.); poznanie frameworków dostarczanych przez jądro: model sterowników urządzeń, urdządzenia klas: misc, input, net, framebuffer i inne; nabycie praktycznych umiejętności programowa w jądrze, debugowania go i rozwiązywania problemów. Program szkolenia: Wprowadzenie do programowania w jądrze Linux. Przygotowanie środowiska pracy, programy pomocnicze i ich wersje. Praca z kodem źródłowym jądra i zewnętrznych modułów w środowisku Eclipse. Uruchamianie jądra systemu, rola bootloadera. U-BOOT. Moduły jądra - zarządzanie modułami, organizacja kodu jądra. Zarządzanie pamięcią, przestrzeń adresowa, alokacja pamięci, działanie systemu w środowisku z niewystarczającą ilością pamięci (kmalloc, kzalloc, vmalloc, get_free_pages, ioremap, SLAB, SLUB, SLOB, oom_killer) Komunikacja ze sprzętem (wejście-wyjście). Komunikacja z przestrzenią użytkownika: wywołania systemowe. Działanie wywołań systemowych w architekturach x86 i ARM. Procesy: pamięć wirtualna, przestrzeń adresowa procesu, cykl życia procesu, tworzenie procesu, atrybuty procesu, task_struct, implementacja wątków. Planista: O(1), CFQ, cgroup, implementacja planisty, klasy szeregowania procesów (SCHED_OTHER, SHCED_FIFO, SCHED_RR, SCHED_DEADLINE), priorytety procesów, afiniczność. Wirtualny system plików - budowa i implementacja. Zaawansowane operacje na plikach w VFS - komunikacja z przestrzenią użytkownika - metody synchroniczne i asynchroniczne, ioctl, mmap, AIO. Czas w jądrze systemu: pomiar upływu czasu, wstrzymanie uruchomienia - usypianie na określony czas, oczekiwanie na zdarzenia, timery, timery wysokiej rozdzielczości. Przerwania: sposób obsługi i rejestracji przerwań w jądrze, dolne połówki (softirq, tasklet, workqueue), przerwania w wątkach (RT). Wejście-wyjście oparte na przerwaniach: synchronizacja proces-jądro, waitqueue, przykłady rzeczywistych sterowników, Wielowątkowość i synchronizacja zasobów (zmienne atomowe, mutexy, semafory, spinlock, zmienne warunkowe, algorytmy niewymagające blokowania - RCU). Frameworki dla typowych klas urządzeń. Zunifikowany model urządzeń w Linuksie. W jaki sposób system widzi sprzęt i organizuje urządzenia? Start systemu, magistrala, sterownik magistrali, sterownik kontrolera, urządzenie, automatyczne kojarzenie sterowników z urządzeniami, Magistrala platform. Specyfikowanie urządzeń przy pomocy Device-Tree. Magistrala PCI, specyfika urządzeń i sterowników PCI. Magistrala USB, specyfika urządzeń i sterowników USB. Urządzenia blokowe - struktura sterownika i wydajność. Urządzenia sieciowe - struktura sterownika, kontrola transmisji, interfejs gniazd, strojenie parametrów, Podsystem urządzeń wejściowych interfejsu użytkownika (input). Sterownik bufora ramki (grafika). DMA, zasada działania, alokacja pamięci dla DMA, synchronizacja. Debugowanie jądra systemu. Szkolenie odbędzie się w dniach 16-19 lutego 2015 r. w Warszawie. Cena - 3500 zł.
http://bis-linux.com/pl/kernel_development