Struttura del corso
Introduzione
- breve storia di GNU/Linux
- Licenze
- Controllo delle versioni del kernel
- ciclo di rilascio
- alberi del nocciolo
- linea principale
- kernel vs. spazio utente
- Meccanismo vs. politica
- Alternative ai driver del kernel
- RTOS contro Linux
Memoria Management
- Memoria virtuale e memoria fisica
- allocazione di memoria nel kernel
- Pagine
- Zone
- API
- lastra
Kernel Patch
- ciclo vitale
- Git
- sorgente del kernel
- Crea patch
- Controlla la patch
- Patch corretta
- patch della nave
- Codice controllato
Moduli del kernel
- Ottenere i sorgenti del kernel
- Configurare/Costruire/Installare
- Driver di dispositivo (collegati staticamente, caricati in fase di esecuzione)
- init/exit
- Licenze
- ESPORTA SIMBOLO GPL
- Makefile fuori dall'albero
- module-init-tools
- modulo nell'albero del kernel
- Kconfig
- Passaggio di parametri
- rado
Driver di salmerino
- architettura
- interfaccia utente/kernel
- Sottosistema I/O
- VFS
- sysfs (dispositivi, bus, driver, classi),
- kobject/ktype/kset
- Modello di driver del kernel Linux
- File del dispositivo
- Driver di salmerino
- inizializzazione
- registrazione
- aprire, rilasciare
- cdev, cdev add, cdev del,...
- Numeri maggiori/minori
- udev, udevmonitor, udevadm
Operazioni avanzate del driver di caratteri
- ioctl
- IOCTL sbloccato
- Confronto IOCTL
- API dello spazio utente
- API dello spazio kernel
- Ciclo di vita del processo
- dormire/bloccare
- dormire/svegliarsi
- coda di attesa
- mandria tonante
- Sondaggio/Selezione
Debug del kernel
- insetto
- Debug
- Debug del kernel
- Ricerca binaria con Git
- Supporto per il debug dal kernel
- printk syslogd, klogd, loglevels, limite di velocità, livelli di debug, debug sottosistemi selettivi
- Debug tramite query debugfs
- Debug OOPS, asserzione OOPS
- Chiave Magic SysRq
- kgdb/kdb
- JTAG
Tracciatura
- GCOV
- lcov
- oprofilo
- ftrace
- NOP tracciante
- tracciatore di funzioni
- Tracciatore interruttore Sched
- Tracciatore grafico di funzioni
- tracciante dinamico
- trace-cmd/kernelshark
- Perf
- LTTng
Interrompe
- Interrupt e polling
- interrompere
- Sezioni del programma
- Rientro
- avvenimenti
- gestore di interrupt
- Gestore di interrupt condiviso
- Interruzione del flusso
- Controllo dell'interrupt
Rinvio del lavoro
- metà superiore/inferiore
- softirqs
- Compiti
- code di lavoro
- interruzioni filettate
Concorrenza
- Regione/sezione critica
- atomico
- condizione di gara
- sincronizzazione
- frenaggio
- Soluzioni di bloccaggio
- impasse
- contesa
- Cosa bloccare?
- Cosa si può usare?
- operazioni atomiche
- Blocchi a rotazione
- Blocchi di rotazione lettore-scrittore
- semaforo
- semaforo binario
- mutex
- semaforo lettore-scrittore
- Variabili di completamento
- Blocchi sequenziali
- disabilitare l'interruzione per diritti di priorità
- Ordinamenti e barriere
Ore
- HZ
- Jiffies
- Grandi/piccoli ritardi
- Timer del kernel
Hardware I/O
- Porte I/O
- Memoria I/O
- Come affrontare gli effetti collaterali dell'accesso ai registri?
Utente-Kernel Communication
- put(get)_user()
- Copia a(da)_user()
- Kernel I/O
- mappatura della memoria
- procfs
- sysfs
- debugfs
- relè fs
- collegamento netto
- ioctl
Portabilità
- Dimensione della parola
- Tipi opachi
- char firmato/non firmato
- Allineamento dei dati
- promozione integrale
- Riutilizzo del codice
- endianess
- Tick di sistema
- Dimensione pagina
- Istruzioni per l'ordinazione
- SMP/prelazione/memoria elevata
Salvo diversa indicazione, il contenuto e la struttura del corso sono concessi in licenza sotto licenza Attribuzione-Non commerciale-Condividi allo stesso modo 4.0 International (CC BY-NC-SA 4.0).
Requisiti
- Familiarità di base con l'uso di un sistema GNU/Linux come utente finale
- Familiarità di base con una shell della riga di comando
- Conoscenze di base dello spazio utente / sviluppo di applicazioni
- Conoscenza intermedia della programmazione C
- Dovrebbe aver già frequentato Embedded GNU/Linux Systems Architecture (fortemente consigliato!) e/o avere una buona comprensione degli argomenti ivi delineati
Recensioni (5)
Edward è un facilitatore fantastico
Zibusiso Ncube - Agricatural Research Council
Corso - Ionic 4 and Angular for Developers
Traduzione automatica
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
Corso - Flutter Development Bootcamp with Dart
I thought the content (both theory and practical) was excellent, and exactly what we were wanting/expecting. The exercises were challenging but achievable.
Mike Kleinau - iVolve
Corso - Introduction to Embedded Linux (Hands-on training)
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Corso - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic