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

Numărul de participanți


Pret per participant

Mărturii (5)

Cursuri viitoare

Categorii înrudite