Bądźmy w kontakcie

Plan Szkolenia

Wprowadzenie

  • krótka historia GNU/Linux
  • licencjonowanie
  • wersjonowanie jądra
  • cykl wydań
  • drzewa jądra
  • główna linia
  • jądro vs. przestrzeń użytkownika
  • mechanizm vs. polityka
  • alternatywy dla sterowników jądra
  • RTOS vs. Linux

Zarządzanie pamięcią

  • Pamięć wirtualna vs. pamięć fizyczna
  • alokacja pamięci w jądrze
  • strony
  • strefy
  • API
  • slab

Łatki jądra

  • cykl życia
  • git
  • źródła jądra
  • tworzenie łatki
  • sprawdzanie łatki
  • naprawa łatki
  • wysyłanie łatki
  • audytowany kod

Moduły jądra

  • pobieranie źródeł jądra
  • konfiguracja/kompilacja/instalacja
  • sterowniki urządzeń (statycznie linkowane, ładowane w czasie wykonywania)
  • init/exit
  • licencjonowanie
  • EXPORT SYMBOL GPL
  • makefile poza drzewem
  • module-init-tools
  • moduł w drzewie jądra
  • Kconfig
  • przekazywanie parametrów
  • sparse

Sterowniki znakowe

  • architektura
  • interfejs użytkownik/jądro
  • podsystem I/O
  • VFS
  • sysfs (urządzenia, magistrala, sterowniki, klasy),
  • kobject/ktype/kset
  • model sterowników jądra Linux
  • pliki urządzeń
  • sterownik znakowy

    • inicjalizacja
    • rejestracja
    • otwarcie, zamknięcie
    • cdev, cdev add, cdev del,...
    • numery major/minor
    • udev, udevmonitor, udevadm

Zaawansowane operacje na sterownikach znakowych

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • interfejs użytkownika
  • interfejs jądra
  • cykl życia procesu
  • uśpienie/blokowanie
  • uśpienie/budzenie
  • kolejka oczekiwania
  • efekt stada
  • poll/select

Debugowanie jądra

  • debugowanie
  • debugowanie jądra

    • wyszukiwanie binarne z git
    • wsparcie debugowania w jądrze
    • printk syslogd, klogd, poziomy logowania, limit szybkości, poziomy debugowania, selektywne podsystemy debugowania
    • debugowanie poprzez zapytania do debugfs
    • debugowanie oops, zgłaszanie oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Śledzenie

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Przerwania

  • przerwania vs. polling
  • przerwanie
  • sekcje programu
  • powtarzalność
  • zdarzenia
  • obsługa przerwań
  • wspólna obsługa przerwań
  • przepływ przerwań
  • kontrola przerwań

Odraczanie pracy

  • górne/dolne połowy
  • softirqs
  • tasklety
  • kolejki zadań
  • przerwania wątkowe

Współbieżność

  • sekcja krytyczna
  • atomowość
  • warunek wyścigu
  • synchronizacja
  • blokowanie
  • rozwiązania blokujące
  • zakleszczenie
  • rywalizacja
  • co blokować?
  • co można użyć?

    • operacje atomowe
    • spin locks
    • czytelnik-pisarz spin locks
    • semafor
    • semafor binarny
    • mutex
    • czytelnik-pisarz semafor
    • zmienne ukończenia
    • sekwencyjne blokady
    • wyłączenie wywłaszczenia
    • kolejność i bariery

Czas

  • HZ
  • Jiffies
  • duże/małe opóźnienia
  • timery jądra

Wejście/Wyjście sprzętowe

  • Porty I/O
  • Pamięć I/O
  • Jak radzić sobie z efektami ubocznymi dostępu do rejestrów?

Komunikacja użytkownik-jądro

  • put(get)_user()
  • copy to(from)_user()
  • Wejście/Wyjście jądra
  • mapowanie pamięci
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Przenośność

  • rozmiar słowa
  • typy nieprzezroczyste
  • znakowe ze znakiem/bez znaku
  • wyrównanie danych
  • promocja całkowita
  • ponowne wykorzystanie kodu
  • kolejność bajtów
  • zegar systemowy
  • rozmiar strony
  • kolejność instrukcji
  • SMP/wywłaszczenie/wysoka pamięć

O ile nie zaznaczono inaczej, treść i ten program kursu są objęte licencją Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 4.0 Międzynarodowe (CC BY-NC-SA 4.0).

Wymagania

  • Podstawowa znajomość korzystania z systemu GNU/Linux jako użytkownik końcowy
  • Podstawowa znajomość pracy w powłoce wiersza poleceń
  • Podstawowa wiedza na temat programowania w przestrzeni użytkownika / rozwoju aplikacji
  • Średniozaawansowana znajomość programowania w języku C
  • Zaleca się wcześniejsze uczestnictwo w kursie Architektura systemów GNU/Linux w systemach wbudowanych (mocno zalecane!) i/lub dobre zrozumienie tematów tam omówionych
 35 godzin

Liczba uczestników


Cena za uczestnika (netto)

Opinie uczestników (3)

Propozycje terminów

Powiązane Kategorie