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
Reference (5)
Velmi užitečné dodatečné informace
Grzegorz - Comp S.A.
Kurz - BLoC Pattern
Přeloženo strojem
Edward je skvělý moderátor
Zibusiso Ncube - Agricatural Research Council
Kurz - Ionic 4 and Angular for Developers
Přeloženo strojem
Miguelovo znalosti tématu byly rozsáhlé. Udělal školení snadno srozumitelným a tok materiálu byl vyvážený; do každé sekce přidával nové funkce, když to bylo potřeba. Zkoumal všechno, co bylo požadováno, a odpovídal na každou otázku důkladně. Byl to velmi příjemný zážitek.
Paul Coaton - SEMPCheck Services
Kurz - Flutter Development Bootcamp with Dart
Přeloženo strojem
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Kurz - The Yocto Project - An Overview - hands-on
Instruktor byl nadšený, laskavý a miloval téma.
Isaac Murphy - Royal New Zealand Airforce
Kurz - Build Native iOS and Android Apps with Flutter
Přeloženo strojem