Schița de curs
Introducere
- o istorie rapidă a GNU/Linux
- licențierea
- versionarea nucleului
- ciclul de eliberare
- arbori de kernel
- linia principală (mainline)
- nucleul vs. spațiul utilizator
- mecanism vs. politică
- alternative la driver-ul de kernel
- RTOS vs. Linux
Management Memorie
- memorie virtuală vs. memorie fizică
- alocarea memoriei în kernel
- pagini (pages)
- zone (zones)
- API
- slab allocation
Pachet Kernel
- ciclul de viață
- git
- sursa nucleului (kernel source)
- crearea unui pachet (create patch)
- verificarea unui pachet (check patch)
- corectarea unui pachet (fix patch)
- trimiterea unui pachet (ship patch)
- cod auditat
Module Kernel
- obținerea surselor nucleului (get kernel sources)
- configurare/compilare/instalare (configure/build/install)
- driver-uri de dispozitive (linkează statice, încărcate la rulare)
- inițializare/terminare (init/exit)
- licențierea
- EXPORT SYMBOL GPL
- makefile în afara arborii (out of tree makefile)
- module-init-tools
- modul în arbore de kernel (module in kernel tree)
- Kconfig
- trecerea parametrilor (parameter passing)
- sparse
Driver-uri Caracter
- arhitectură
- interfața utilizator/kernel
- sub sistemul I/O
- VFS (Virtual File System)
- sysfs (dispozitive, bus, driver-uri, clase),
- kobject/ktype/kset
- modelul de driver al nucleului Linux
- fișiere dispozitiv (device files)
-
driver de caracter (char driver)
- inițializare
- înregistrare
- deschidere, eliberare (open, release)
- cdev, cdev add, cdev del,...
- numere principale/secundare (major/minor numbers)
- udev, udevmonitor, udevadm
Operațiuni Avansate pentru Driver-uri Caracter
- ioctl
- unlocked ioctl
- compat ioctl
- API spațiu utilizator (user space API)
- API spațiu kernel (kernel space API)
- ciclul de viață al procesului
- somn/blocare (sleeping/blocking)
- somn/revelarea (sleeping/waking up)
- coadă de așteptare (wait queue)
- grea împiedicătoare (thundering herd)
- sondare/selectare (poll/select)
Depanare Nucleu
- depanare (debugging)
-
depanarea nucleului
- căutare binară cu git (binary search with git)
- susținerea depanării din nucleu (debug support from kernel)
- printk, syslogd, klogd, niveluri de log, limitare rată, niveluri de debug, sub sisteme de debug selectiv
- depanare prin interogarea debugfs (debugging by querying debugfs)
- depanare oops, aserțiunea oops-ului (oops debugging, asserting oops)
- Magic SysRq Key
- kgdb/kdb
- JTAG
Traierea (Tracing)
- gcov
- lcov
- oprofile
-
ftrace
- tracer nul (nop tracer)
- tracer funcție (function tracer)
- tracer schimbare de programare (sched switch tracer)
- tracer grafic funcție (function graph tracer)
- tracer dinamic (dynamic tracer)
- trace-cmd/kernelshark
- perf
- LTTng
Intrerupțiuni (Interrupts)
- intrerupții vs. sondare (polling)
- intrerupție
- secțiuni de program
- reentrabilitate (reentrancy)
- evenimente
- gestionarul de intrerupții (interrupt handler)
- gestionar de intrerupții împărțit (shared interrupt handler)
- fluxul de intrerupere (interrupt flow)
- controlul intreruperilor (interrupt control)
Posticiparea Lucrărilor
- jumătăți de sus/jos (top/bottom halves)
- softirqs
- tasklets
- cozi de lucrări (work queues)
- intrerupții cu fir (threaded interrrupts)
Concomitanța (Concurrency)
- regiune critică/secțiune critică (critical region/section)
- atomic
- condiție de cursă (race condition)
- sincronizare (synchronization)
- blocarea (locking)
- soluții de blocare (locking solutions)
- blocarea simultană (deadlock)
- competiție (contention)
- ce să se blocheze?
-
ce poate fi folosit?
- operații atomice (atomic operations)
- blocări de rotație (spin locks)
- blocări de rotație cititor-scriitor (reader-writer spin locks)
- semafor
- semafor binar (binary semaphore)
- mutex
- semafor cititor-scriitor (reader-writer semaphore)
- variabile de finalizare (completion variables)
- blocări secvențiale (sequential locks)
- dezactivarea preempției (disable preemption)
- ordonare și bariere (ordering and barriers)
Timp
- HZ
- Jiffies
- întârzieri mari/mici (big/small delays)
- timere nucleu (kernel timers)
I/O Hardware
- Porturi I/O
- Memorie I/O
- Cum se tratează efectele laterale la accesarea registrelor?
Comunicare Utilizator-Nucleu (User-Kernel Communication)
- put(get)_user()
- copy to(from)_user()
- I/O Nucleu (Kernel I/O)
- mapare memorie (memory mapping)
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilitate
- dimensiunea cuvântului (word size)
- tipuri opace (opaque types)
- char semnat/nesemnat (signed/unsigned char)
- alinierea datelor (data alignment)
- promovarea integrală (integral promotion)
- refolosirea codului (code reuse)
- endianness
- tick de sistem (system tick)
- dimensiunea paginii (page size)
- ordonarea instrucțiunilor (instruction ordering)
- SMP/preempție/memorie la nivel înalt (SMP/preemption/high memory)
Cu excepția cazului în care este specificat altfel, conținutul și structura acestui curs sunt licențiate sub Atribuire-Necomerțial-Compartire conform 4.0 Internațional (CC BY-NC-SA 4.0).
Cerințe
- Familiaritate de bază cu folosirea unui sistem GNU/Linux ca utilizator final
- Familiaritate de bază cu o coșelie de comandă
- Cunoștințe de bază în dezvoltarea spațiului utilizator/aplicații
- Cunoștințe intermediare de programare C
- Ar trebui să fi participat la Embedded GNU/Linux Systems Architecture înainte (rezultă puternic recomandat!) și/sau să aibă o bună înțelegere a temelor prezentate acolo
Mărturii (5)
Informații suplimentare foarte utile
Grzegorz - Comp S.A.
Curs - BLoC Pattern
Tradus de catre o masina
Edward este un facilitator minunat
Zibusiso Ncube - Agricatural Research Council
Curs - Ionic 4 and Angular for Developers
Tradus de catre o masina
Cunoștințele lui Miguel despre subiect erau extensive. El a făcut formarea ușor de înțeles și ritmul a fost echilibrat, adăugând la fiecare secțiune noi caracteristici când era nevoie. El a abordat tot ce a fost solicitat și a răspuns la fiecare întrebare cu amănunți. A fost o experiență foarte plăcută.
Paul Coaton - SEMPCheck Services
Curs - Flutter Development Bootcamp with Dart
Tradus de catre o masina
Ca instruCTORUL să se ADAPTEZE la nevoile noastre
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curs - The Yocto Project - An Overview - hands-on
Tradus de catre o masina
Antrenantul era entuziasmat, drăguț și iubise subiectul
Isaac Murphy - Royal New Zealand Airforce
Curs - Build Native iOS and Android Apps with Flutter
Tradus de catre o masina