Intrati in legatura

Schița de curs

Introducere

  • istoric rapid al GNU/Linux
  • licențiere
  • versiuni ale nucleului
  • ciclul de lansare
  • arbori de nucleu
  • linia principală
  • nucleu vs. spațiul utilizatorului
  • 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 pentru Nucleu

  • ciclul de viață
  • git
  • sursele nucleului
  • crearea unui patch
  • verificarea patch-ului
  • corectarea patch-ului
  • trimiterea patch-ului
  • cod auditizat

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 în afara arborelui
  • 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 al nucleului Linux
  • fișiere de dispozitive
  • driver de caracter

    • inițializare
    • înregistrare
    • open, release
    • cdev, cdev add, cdev del,...
    • numere major/minor
    • udev, udevmonitor, udevadm

Operații Avansate cu Drivere de Caracter

  • ioctl
  • ioctl neblocat
  • ioctl compatibil
  • API spațiul utilizatorului
  • API spațiul nucleului
  • 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, generare oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Trasare

  • gcov
  • lcov
  • oprofile
  • ftrace

    • tracer nop
    • tracer de funcții
    • tracer de comutare de planificare
    • 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
  • fluxul de interrupt
  • controlul de interrupt

Amânarea Lucrării

  • jumătăți superioare/inferioare
  • softirqs
  • tasklets
  • cozi de lucru
  • interrupturi cu fire

Concurrency

  • regiune/secțiune critică
  • atomic
  • condiție de cursă
  • sincronizare
  • blocare
  • soluții de blocare
  • blocaj
  • contenciune
  • 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
    • blocuri secvențiale
    • dezactivarea preempț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ă gestionăm efectele laterale la accesarea registrelor?

Comunicare Utilizator-Nucleu

  • put(get)_user()
  • copy to(from)_user()
  • I/O Nucleu
  • maparea memoriei
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilitate

  • dimensiunea cuvântului
  • tipuri opace
  • char semnat/nesemnat
  • alinierea datelor
  • promovarea integrală
  • reutilizarea codului
  • endianess
  • tick-ul sistemului
  • dimensiunea paginii
  • ordonarea instrucțiunilor
  • SMP/preempție/memorie mare

Exceptând cazurile în care se specifică altfel, conținutul și această descriere a cursului sunt licențiate sub Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Cerințe

  • Cunoștințe de bază despre utilizarea unui sistem GNU/Linux ca utilizator final
  • Cunoștințe de bază despre utilizarea unui shell de linie de comandă
  • Cunoștințe de bază despre dezvoltarea în spațiul utilizatorului / aplicații
  • Cunoștințe intermediare de programare în C
  • Ar trebui să fi participat la Arhitectura Sistemelor Embedded GNU/Linux înainte (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 (3)

Cursuri viitoare

Categorii înrudite