Návrh Školení

Úvod

  • stručný historický pohled na GNU/Linux
  • licencování
  • verze jádra
  • cyklus vydávání
  • stromy jádra
  • hlavní strom
  • jádro vs. uživatelský prostor
  • mechanismus vs. zásady
  • alternativy k ovladačům jádra
  • RTOS vs. Linux

Správa paměti

  • virtuální paměť vs. fyzická paměť
  • alokace paměti v jádře
  • stránky
  • zóny
  • API
  • slab

Záplaty jádra

  • životní cyklus
  • git
  • zdrojový kód jádra
  • vytvoření záplaty
  • kontrola záplaty
  • oprava záplaty
  • odeslání záplaty
  • auditérovaný kód

Moduly jádra

  • získání zdrojových kódů jádra
  • konfigurace/sestavení/nainstalování
  • ovladače zařízení (staticky propojené, načítané za běhu)
  • inicializace/ukončení
  • licencování
  • EXPORT_SYMBOL_GPL
  • mimo-stromový soubor Makefile
  • module-init-tools
  • modul v stromu jádra
  • Kconfig
  • předávání parametrů
  • sparse

Char ovladače

  • architektura
  • rozhraní uživatelského a jádrového prostoru
  • podsystem I/O
  • VFS
  • sysfs (zařízení, sběrnice, ovladače, třídy)
  • kobject/ktype/kset
  • model ovladačů jádra Linuxu
  • soubory zařízení
  • char ovladač
    • inicializace
    • registrace
    • otevření, uvolnění
    • cdev, cdev add, cdev del,...
    • čísla hlavní/minor
    • udev, udevmonitor, udevadm

Pokročilé operace char ovladače

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • uživatelské rozhraní API
  • jádrové rozhraní API
  • životní cyklus procesu
  • spánkování/blokování
  • probouzení ze spánku
  • fronta čekání
  • hromadné probuzení (thundering herd)
  • poll/select

Ladicí techniky jádra

  • ladění
  • ladění jádra
    • binární vyhledávání pomocí git
    • podpora ladicích funkcí od jádra
    • printk, syslogd, klogd, loglevely, omezení rychlosti, ladící úrovně, selektivní ladění subsystémů
    • ladění pomocí dotazování debugfs
    • ladicí chyby (oops), tvrzení oops
    • Magic SysRq Klávesa
    • kgdb/kdb
    • JTAG

Sledování (tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamický tracker
  • trace-cmd/kernelshark
  • perf
  • LTTng

Přerušování (interrupts)

  • přerušení vs. sondování
  • přerušení
  • části programů
  • vícezásobné volání (reentrancy)
  • události
  • obslužná rutina přerušení
  • sdílená obslužná rutina přerušení
  • tok přerušení
  • řízení přerušení

Odložená práce (deferring work)

  • horní/dolní poloviny (top/bottom halves)
  • softirqs
  • tasklets
  • fronty práce (work queues)
  • vláknová přerušení (threaded interrupts)

Paralelnost (concurrency)

  • kritické oblasti/sekce
  • atomické operace
  • střetnutí (race condition)
  • synchronizace
  • zamykání (locking)
  • řešení zamykání
  • mrtvý bod (deadlock)
  • konkurencí (contention)
  • co zamknout?
  • co lze použít?
    • atomické operace
    • spin locks
    • čtečky-zapisovatelé (reader-writer) spin locks
    • semafor
    • binární semafor
    • mutex
    • čtečky-zapisovatelé (reader-writer) semafor
    • dokončovací proměnné (completion variables)
    • sekvencní zámky (sequential locks)
    • vypnutí předpotoku (disable preemption)
    • pořadí a bariéry

Čas (time)

  • HZ
  • Jiffies
  • velké/malé zpoždění
  • časovače jádra (kernel timers)

Hardwarový vstup/výstup (hardware I/O)

  • I/O porty
  • I/O paměť
  • Jak se vypořádat s vedlejšími efekty při přístupu k registrem?

Komunikace mezi uživatelským a jádrovým prostorem (user-kernel communication)

  • put(get)_user()
  • copy to(from)_user()
  • Jádrové I/O
  • mapování paměti (memory mapping)
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Přenositelnost (portability)

  • velikost slova (word size)
  • neprůhledné typy (opaque types)
  • znakové typy signed/unsigned
  • zarovnání dat (data alignment)
  • rozšíření integrovaných typů (integral promotion)
  • znovupoužití kódu (code reuse)
  • endianness
  • systémové ticky (system ticks)
  • velikost stránky (page size)
  • pořadí instrukcí (instruction ordering)
  • SMP/preemption/high memory

Pokud není uvedeno jinak, obsah a tato struktura školení jsou licencovány pod Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Požadavky

  • Základní orientace v používání systému GNU/Linux jako koncový uživatel
  • Základní orientace na příkazovém řádku shellu
  • Základní znalosti vývoje uživatelského prostoru / aplikací
  • Středně pokročilé znalosti programování v C
  • Měli by předtím absolvovat Architektura vestavěných systémů GNU/Linux (silně doporučeno!) a/nebo mít dobré pochopení témata uvedená tam
 35 hodiny

Počet účastníků


Cena za účastníka

Reference (5)

Nadcházející kurzy

Související kategorie