Struttura del corso

Introduzione

  • breve storia di GNU/Linux
  • licenze
  • versionamento del kernel
  • ciclo di rilascio
  • alberi del kernel
  • mainline
  • kernel vs. spazio utente
  • meccanismo vs. politica
  • alternative ai driver del kernel
  • RTOS vs. Linux

Gestione della Memoria

  • memoria virtuale vs. fisica
  • allocazione di memoria nel kernel
  • pagine
  • zone
  • API
  • slab

Patch del Kernel

  • ciclo di vita
  • git
  • sorgenti del kernel
  • creazione della patch
  • verifica della patch
  • correzione della patch
  • invio della patch
  • codice audited

Moduli del Kernel

  • ottenere le sorgenti del kernel
  • configurazione/compilazione/installazione
  • driver di dispositivi (collegati staticamente, caricati in runtime)
  • init/exit
  • licenze
  • EXPORT SYMBOL GPL
  • makefile fuori dall'albero
  • module-init-tools
  • modulo nell'albero del kernel
  • Kconfig
  • passaggio di parametri
  • sparse

Driver a Caratteri

  • architettura
  • interfaccia utente/kernel
  • sottosistema I/O
  • VFS
  • sysfs (dispositivi, bus, driver, classi),
  • kobject/ktype/kset
  • modello di driver del kernel Linux
  • file di dispositivo
  • driver a caratteri
    • inizializzazione
    • registrazione
    • apertura, rilascio
    • cdev, cdev add, cdev del,...
    • numeri major/minor
    • udev, udevmonitor, udevadm

Operazioni Avanzate di Driver a Caratteri

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API spazio utente
  • API spazio kernel
  • ciclo di vita del processo
  • sonno/blocco
  • sonno/risveglio
  • coda di attesa
  • thundering herd
  • poll/select

Debugging del Kernel

  • debugging
  • debug del kernel
    • ricerca binaria con git
    • supporto di debug dal kernel
    • printk syslogd, klogd, loglevels, limiti di rate, livelli di debug, sottosistemi di debug selettivi
    • debugging attraverso la query a debugfs
    • debug degli oops, asserzioni di oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Tracciamento

  • gcov
  • lcov
  • oprofile
  • ftrace
    • tracciamento nop
    • tracciamento di funzione
    • tracciamento di switch sched
    • tracciamento del grafico delle funzioni
    • tracciamento dinamico
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interruzioni

  • interruzioni vs. polling
  • interruzione
  • sezioni di programma
  • rintracciabilità
  • eventi
  • gestore di interruzioni
  • gestore di interruzioni condiviso
  • flusso delle interruzioni
  • controllo delle interruzioni

Deferenza del Lavoro

  • top/bottom halves
  • softirqs
  • tasklets
  • code di lavoro
  • interruzioni a thread

Concorrenza

  • regione/sezione critica
  • atomico
  • condizione di corsa
  • sincronizzazione
  • blocco
  • soluzioni di blocco
  • deadlock
  • contesa
  • cosa bloccare?
  • cosa si può usare?
    • operazioni atomiche
    • spin locks
    • reader-writer spin locks
    • semaforo
    • semaforo binario
    • mutex
    • reader-writer semaphore
    • variabili di completamento
    • lock sequenziali
    • disabilitazione della prelazione
    • ordinamento e barriere

Tempo

  • HZ
  • Jiffies
  • ritardi grandi/piccoli
  • timer del kernel

I/O Hardware

  • Porte I/O
  • Memoria I/O
  • Come gestire gli effetti collaterali nell'accesso ai registri?

Comunicazione User-Kernel

  • put(get)_user()
  • copy to(from)_user()
  • I/O del kernel
  • mappatura della memoria
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilità

  • dimensione delle parole
  • tipi opachi
  • char firmato/non firmato
  • allineamento dei dati
  • promozione integrale
  • riutilizzo del codice
  • endianess
  • tick di sistema
  • dimensione della pagina
  • ordinamento delle istruzioni
  • SMP/prelazione/memoria alta

Salvo diversa indicazione, il contenuto e questo programma di corso sono licenziati sotto Attribuzione-Non commerciale-Condividi allo stesso modo 4.0 Internazionale (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 da riga di comando
  • Conoscenze di base dello sviluppo in spazio utente / applicazioni
  • Conoscenza intermedia della programmazione C
  • Dovrebbe aver partecipato a Architettura dei Sistemi GNU/Linux Embedded (fortemente consigliato!) e/o avere una buona comprensione degli argomenti trattati lì
 35 Ore

Numero di Partecipanti


Prezzo per Partecipante

Recensioni (5)

Corsi in Arrivo

Categorie relative