Schița de curs
Introducere
- scurt istoric al GNU/Linux
- licențiere
- versionarea nucleului
- ciclul de lansare
- arbori de nucleu
- linia principală
- nucleu vs. spațiu utilizator
- mecanism vs. politică
- alternative la driverele de nucleu
- RTOS vs. Linux
Gestionarea Memoriei
- Memorie virtuală vs. memorie fizică
- alocarea memoriei în nucleu
- pagini
- zone
- API
- slab
Patch-uri de Nucleu
- ciclul de viață
- git
- sursele nucleului
- crearea unui patch
- verificarea patch-ului
- corectarea patch-ului
- livrarea patch-ului
- cod auditat
Module de Nucleu
- obținerea surselor nucleului
- configurare/compilare/instalare
- drivere de dispozitive (legate static, încărcate la runtime)
- init/exit
- licențiere
- EXPORT SYMBOL GPL
- Makefile out of tree
- module-init-tools
- modul în arborele nucleului
- Kconfig
- transmiterea parametrilor
- sparse
Drivere de Caracter
- arhitectura
- interfața utilizator/nucleu
- subsistemul I/O
- VFS
- sysfs (dispozitive, bus, drivere, clase),
- kobject/ktype/kset
- modelul de driver Linux
- fișiere de dispozitiv
-
driver de caracter
- inițializare
- înregistrare
- deschidere, eliberare
- cdev, cdev add, cdev del,...
- numere major/minor
- udev, udevmonitor, udevadm
Operații Avansate cu Drivere de Caracter
- ioctl
- ioctl deblocat
- ioctl compatibil
- API spațiu utilizator
- API spațiu nucleu
- ciclul de viață al procesului
- somn/blocare
- somn/trezire
- coadă de așteptare
- efectul de turmă
- poll/select
Depanarea Nucleului
- depanare
-
depanarea nucleului
- căutare binară cu git
- suport de depanare din nucleu
- printk syslogd, klogd, niveluri de log, limită de rată, niveluri de depanare, subsisteme selective de depanare
- depanare prin interogarea debugfs
- depanare oops, provocare oops
- Tasta Magic SysRq
- kgdb/kdb
- JTAG
Trasare
- gcov
- lcov
- oprofile
-
ftrace
- tracer nop
- tracer de funcții
- tracer de comutare sched
- tracer de grafic de funcții
- tracer dinamic
- trace-cmd/kernelshark
- perf
- LTTng
Interrupturi
- interrupturi vs. polling
- interrupt
- secțiuni de program
- reentranță
- evenimente
- handler de interrupt
- handler de interrupt partajat
- flux de interrupt
- control de interrupt
Amânarea Muncii
- jumătăți superioare/inferioare
- softirqs
- tasklets
- cozi de muncă
- interrupturi cu fir de execuție
Concurrency
- regiune/secțiune critică
- atomic
- condiție de cursă
- sincronizare
- blocare
- soluții de blocare
- blocaj
- contingență
- ce să blochezi?
-
ce poate fi folosit?
- operații atomice
- spin locks
- spin locks de tip reader-writer
- semafor
- semafor binar
- mutex
- semafor de tip reader-writer
- variabile de completare
- blocaje secvențiale
- dezactivarea preemției
- ordonare și bariere
Timp
- HZ
- Jiffies
- întârzieri mari/mici
- temporizatoare de nucleu
I/O Hardware
- Porturi I/O
- Memorie I/O
- Cum să gestionați efectele secundare la accesarea registrelor?
Comunicare Utilizator-Nucleu
- put(get)_user()
- copy to(from)_user()
- I/O Nucleu
- mapare de memorie
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilitate
- dimensiunea cuvântului
- tipuri opace
- char semnat/nesemnat
- alinierea datelor
- promovare integrală
- reutilizarea codului
- endianess
- tichetul sistemului
- dimensiunea paginii
- ordonarea instrucțiunilor
- SMP/preemție/memorie mare
Exceptând cazurile în care se specifică altfel, conținutul și acest plan de curs sunt licențiate sub Atribuire-Necomercial-Partajare în Condiții Identice 4.0 Internațional (CC BY-NC-SA 4.0).
Cerințe
- Familiaritate de bază cu utilizarea unui sistem GNU/Linux ca utilizator final
- Familiaritate de bază cu un shell de linie de comandă
- Cunoștințe de bază despre dezvoltarea în spațiul utilizator / aplicații
- Cunoștințe intermediare de programare în C
- Ar trebui să fi participat la Arhitectura Sistemelor Embedded GNU/Linux (foarte recomandat!) și/sau să aveți o bună înțelegere a subiectelor 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 fantastic
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 extinse. El a făcut instruirea ușor de înțeles și fluxul a fost echilibrat, adăugând la fiecare secțiune noile caracteristici după cum era necesar. El a acoperit tot ce a fost solicitat și a răspuns cu atenție la fiecare întrebare. A fost o experiență foarte plăcută.
Paul Coaton - SEMPCheck Services
Curs - Flutter Development Bootcamp with Dart
Tradus de catre o masina
Înțeleptul instruiector se adaptează nevoilor noastre
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curs - The Yocto Project - An Overview - hands-on
Tradus de catre o masina
Instrucționistul a fost entuziast, amabil și i-a plăcut subiectul.
Isaac Murphy - Royal New Zealand Airforce
Curs - Build Native iOS and Android Apps with Flutter
Tradus de catre o masina