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
 35 ore

Numero di Partecipanti


Prezzo per Partecipante

Recensioni (5)

Corsi in Arrivo

Categorie relative