Schița de curs
Introducere
- istoria rapidă a GNU/Linux
- licențiere
- versiunea nucleului
- ciclul de lansare
- arbori de kernel
- linia principală
- kernel vs. spațiul utilizatorului
- mecanism vs. politică
- alternative pentru driverul de kernel
- RTOS vs. Linux
Memorie Management
- Memorie virtuală vs. memorie fizică
- alocarea memoriei în kernel
- pagini
- zone
- API
- placă
Patch de kernel
- ciclu de viață
- git
- sursa nucleului
- crearea patch-ului
- verifică patch-ul
- repară patch-ul
- expediere patch
- cod auditat
Module Kernel
- obțineți surse de kernel
- configure/build/install
- drivere de dispozitive (legate static, încărcate în timpul execuției)
- init/exit
- licențiere
- EXPORT SIMBOL GPL
- makefile în afara arborelui
- module-init-tools
- modul în arborele kernel
- Kconfig
- trecerea parametrilor
- sparse
Drivere Char
- arhitectură
- interfața utilizator/kernel
- subsistemul I/O
- VFS
- sysfs (dispozitive, bus, drivere, clase),
- kobject/ktype/kset
- modelul de driver al nucleului linux
- fișiere de dispozitive
- driver char
- inițializare
- înregistrare
- deschidere, eliberare
- cdev, cdev add, cdev del,...
- numere majore/minore
- udev, udevmonitor, udevadm
Operațiuni avansate ale driverelor Charachter
- ioctl
- ioctl deblocat
- compat ioctl
- API spațiu utilizator
- spațiu kernel API
- ciclul de viață al procesului
- dormit/blocare
- dormit/trezire
- coada de așteptare
- turmă tunătoare
- sondaj/selecție
Depanarea nucleului
- bug
- depanare
- depanarea nucleului
- căutarea binară cu git
- suport de depanare din kernel
- printk syslogd, klogd, loglevels, rata limită, niveluri de depanare, subsisteme selective de depanare
- depanarea prin interogarea debugfs
- depanare oops, afirmarea oops
- Magic SysRq Key
- kgdb/kdb
- JTAG
Urmărire
- gcov
- lcov
- oprofile
- ftrace
- nop tracer
- function tracer
- trasor de comutare sched
- trasor grafic de funcții
- trasor dinamic
- trace-cmd/kernelshark
- perf
- LTTng
Întreruperi
- întreruperi vs. polling
- întrerupere
- secțiuni de program
- reentranță
- evenimente
- manipulator de întrerupere
- manipulator de întrerupere partajat
- fluxul de întreruperi
- controlul întreruperii
Amânarea activității
- jumătăți superioare/inferioare
- softirqs
- tasklets
- cozile de lucru
- interrrupții cu fir
Concurrență
- regiune/secțiune critică
- atomic
- condiție de cursă
- sincronizare
- blocare
- soluții de blocare
- deadlock
- dispută
- ce să blocăm?
- ce poate fi folosit?
- operații atomice
- blocaje spin
- blocaje de tip "spin lock" cititor-scriitor
- semafor
- semafor binar
- mutex
- semafor cititor-scriitor
- variabile de finalizare
- blocaje secvențiale
- dezactivarea preempțiunii
- ordine și bariere
Timpul
- HZ
- Jiffies
- întârzieri mari/mici
- temporizatoare kernel
Hardware I/O
- Porturi I/O
- Memorie I/O
- Cum se tratează efectele secundare ale accesării registrelor?
Utilizator-Cercel Communication
- put(get)_user()
- copy to(from)_user()
- Kernel I/O
- maparea memoriei
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilitate
- dimensiunea cuvântului
- tipuri opace
- caractere cu semn/ fără semn
- alinierea datelor
- promovare integrală
- reutilizarea codului
- endianess
- tic de sistem
- dimensiunea paginii
- ordonarea instrucțiunilor
- SMP/preemption/memorie ridicată
Cu excepția cazului în care se menționează altfel, conținutul și această schiță de curs sunt licențiate în conformitate cu Attribution-NonCommercial-ShareAlike 4.0 International (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 spațiul utilizatorului / dezvoltarea de aplicații
- Cunoștințe intermediare de programare C
- Ar trebui să fi participat anterior la Embedded GNU/Linux Systems Architecture (foarte recomandat!) și/sau să aibă o bună înțelegere a subiectelor prezentate acolo
Mărturii (5)
Edward este un facilitator minunat
Zibusiso Ncube - Agricatural Research Council
Curs - Ionic 4 and Angular for Developers
Tradus de catre o masina
Poate că mai multe exerciții ar putea fi mai bune pentru învățare, dar timpul a fost prea puțin.
Gianpiero Arico' - Urmet Spa
Curs - Embedded Linux Systems Architecture
Tradus de catre o masina
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Curs - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curs - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic