Plan Szkolenia

Wstęp

    krótka historia GNU/Linux licencjonowanie wersjonowania jądra cykl wydawniczy drzewa jądra jądro główne a mechanizm przestrzeni użytkownika a zasady jądra alternatywy sterowników RTOS kontra Linux

Pamięć Management

    Pamięć wirtualna a alokacja pamięci fizycznej w płytach API stref stron jądra

Łatka na jądro

    cykl życia git źródło jądra utwórz łatkę sprawdź łatkę napraw łatkę wysyłaj łatkę sprawdzony kod

Moduły jądra

    pobierz źródła jądra skonfiguruj/zbuduj/zainstaluj sterowniki urządzeń (statycznie połączone, ładowane w czasie wykonywania) licencja init/exit SYMBOL GPL z drzewa makefile moduł-init-tools moduł w drzewie jądra Przekazywanie parametrów Kconfig sparse

Sterowniki Char

    architektura interfejs użytkownika/jądra podsystem I/O VFS sysfs (urządzenia, magistrala, sterowniki, klasy), kobject/ktype/kset Linux kernel sterownik model pliki urządzeń char inicjalizacja sterownika rejestracja otwarta, wydanie cdev, cdev add, cdev del,... liczby główne/podrzędne udev, udevmonitor, udevadm

Zaawansowane operacje sterownika znakowego

    ioctl odblokowany ioctl kompatybilny ioctl przestrzeń użytkownika API przestrzeń jądra API cykl życia procesu spanie/blokowanie spania/budzenie kolejka oczekiwania grzmiące stado ankieta/wybór

Debugowanie jądra

    debugowanie błędów debugowanie jądra wyszukiwanie binarne za pomocą git debug wsparcie z jądra printk syslogd, klogd, loglevels, limit szybkości, poziomy debugowania, debugowanie selektywne podsystemy debugowanie poprzez wysyłanie zapytań debugfs oops debugowanie, potwierdzanie oops Magiczny klucz SysRq kgdb/kdb JTAG

Rysunek kalkowy

    gcov lcov oprofile ftrace nop funkcja śledzenia tracer sched przełącznik funkcji śledzenia wykres funkcji śledzenia dynamiczny znacznik
cmd/kernelshark
  • wyk
  • LTTng
  • Przerywa
  • przerwania a odpytywanie przerwań sekcje programu zdarzenia ponownego wejścia procedura obsługi przerwań współdzielona obsługa przerwań przepływ przerwań kontrola przerwań

      Odkładanie pracy

    górna/dolna połowa zadania softirqs kolejki robocze przerwania wątkowe

      Konkurencja

    krytyczny region/sekcja wyścig atomowy synchronizacja warunków blokowanie rozwiązań blokujących spór o zakleszczenie, co zablokować? co można wykorzystać? operacje atomowe blokady spinowe czytnik-zapis blokady spinowe semafor semafor binarny mutex czytnik-zapis zmienne uzupełniania semaforów blokady sekwencyjne wyłączanie kolejności wywłaszczania i bariery

      Czas

    HZ Jiffies duże/małe opóźnienia liczników jądra

      Sprzętowe wejścia/wyjścia

    Porty we/wy Pamięć we/wy Jak radzić sobie ze skutkami ubocznymi dostępu do rejestrów?

      Jądro użytkownika Communication

    put(get)_user() kopiuj do(z)_user() Kernel I/O mapowanie pamięci procfs sysfs debugfs przekaźnikfs netlink ioctl

      Ruchliwość

    rozmiar słowa typy nieprzezroczyste ze znakiem/bez znaku znak wyrównanie danych integralny kod promocyjny ponowne wykorzystanie endianness system zaznaczenie rozmiaru strony kolejność instrukcji SMP/wywłaszczanie/duża pamięć

      O ile nie zaznaczono inaczej, treść i niniejszy zarys kursu są objęte licencją na podstawie 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ść powłoki wiersza poleceń
    • Podstawowa znajomość przestrzeni użytkownika / tworzenia aplikacji
    • Pośrednia znajomość programowania w języku C
    • Powinien uczestniczyć w kursie Embedded GNU/Linux Systems Architecture wcześniej (zdecydowanie zalecane!) i/lub dobrze rozumieć przedstawione tam tematy
     35 godzin

    Liczba uczestników



    Cena za uczestnika

    Opinie uczestników (5)

    Powiązane Kategorie