Schița de curs

Introducere

  • istoria rapidă a GNU/Linux
  • licențiere
  • versiunea nucleului
  • ciclul de lansare
  • arbori de kernel
  • linia principală
  • kernel vs. spațiul utilizatorului
  • mecanism vs. politică
  • alternative pentru driverul de kernel
  • RTOS vs. Linux

Memorie Management

  • Memorie virtuală vs. memorie fizică
  • alocarea memoriei în kernel
  • pagini
  • zone
  • API
  • placă

Patch de kernel

  • ciclu de viață
  • git
  • sursa nucleului
  • crearea patch-ului
  • verifică patch-ul
  • repară patch-ul
  • expediere patch
  • cod auditat

Module Kernel

  • obțineți surse de kernel
  • configure/build/install
  • drivere de dispozitive (legate static, încărcate în timpul execuției)
  • init/exit
  • licențiere
  • EXPORT SIMBOL GPL
  • makefile în afara arborelui
  • module-init-tools
  • modul în arborele kernel
  • Kconfig
  • trecerea parametrilor
  • sparse

Drivere Char

  • arhitectură
  • interfața utilizator/kernel
  • subsistemul I/O
  • VFS
  • sysfs (dispozitive, bus, drivere, clase),
  • kobject/ktype/kset
  • modelul de driver al nucleului linux
  • fișiere de dispozitive
  • driver char
    • inițializare
    • înregistrare
    • deschidere, eliberare
    • cdev, cdev add, cdev del,...
    • numere majore/minore
    • udev, udevmonitor, udevadm

Operațiuni avansate ale driverelor Charachter

  • ioctl
  • ioctl deblocat
  • compat ioctl
  • API spațiu utilizator
  • spațiu kernel API
  • ciclul de viață al procesului
  • dormit/blocare
  • dormit/trezire
  • coada de așteptare
  • turmă tunătoare
  • sondaj/selecție

Depanarea nucleului

  • bug
  • depanare
  • depanarea nucleului
    • căutarea binară cu git
    • suport de depanare din kernel
    • printk syslogd, klogd, loglevels, rata limită, niveluri de depanare, subsisteme selective de depanare
    • depanarea prin interogarea debugfs
    • depanare oops, afirmarea oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Urmărire

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • trasor de comutare sched
    • trasor grafic de funcții
    • trasor dinamic
  • trace-cmd/kernelshark
  • perf
  • LTTng

Întreruperi

  • întreruperi vs. polling
  • întrerupere
  • secțiuni de program
  • reentranță
  • evenimente
  • manipulator de întrerupere
  • manipulator de întrerupere partajat
  • fluxul de întreruperi
  • controlul întreruperii

Amânarea activității

  • jumătăți superioare/inferioare
  • softirqs
  • tasklets
  • cozile de lucru
  • interrrupții cu fir

Concurrență

  • regiune/secțiune critică
  • atomic
  • condiție de cursă
  • sincronizare
  • blocare
  • soluții de blocare
  • deadlock
  • dispută
  • ce să blocăm?
  • ce poate fi folosit?
    • operații atomice
    • blocaje spin
    • blocaje de tip "spin lock" cititor-scriitor
    • semafor
    • semafor binar
    • mutex
    • semafor cititor-scriitor
    • variabile de finalizare
    • blocaje secvențiale
    • dezactivarea preempțiunii
    • ordine și bariere

Timpul

  • HZ
  • Jiffies
  • întârzieri mari/mici
  • temporizatoare kernel

Hardware I/O

  • Porturi I/O
  • Memorie I/O
  • Cum se tratează efectele secundare ale accesării registrelor?

Utilizator-Cercel Communication

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

Portabilitate

  • dimensiunea cuvântului
  • tipuri opace
  • caractere cu semn/ fără semn
  • alinierea datelor
  • promovare integrală
  • reutilizarea codului
  • endianess
  • tic de sistem
  • dimensiunea paginii
  • ordonarea instrucțiunilor
  • SMP/preemption/memorie ridicată

Cu excepția cazului în care se menționează altfel, conținutul și această schiță de curs sunt licențiate în conformitate cu Attribution-NonCommercial-ShareAlike 4.0 International (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 spațiul utilizatorului / dezvoltarea de aplicații
  • Cunoștințe intermediare de programare C
  • Ar trebui să fi participat anterior la Embedded GNU/Linux Systems Architecture (foarte recomandat!) și/sau să aibă o bună înțelegere a subiectelor prezentate acolo
 35 ore

Numărul de participanți


Pret per participant

Mărturii (5)

Upcoming Courses

Categorii înrudite