Edocti
Training tehnic avansat pentru inginerul software de mâine
Edocti Training

Linux Device Drivers – Esențiale

Intermediar
21 h
4.8 (231 recenzii)
Linux Device Drivers – Esențiale

Fundamente drivere: înveți să scrii și să debugezi device drivers în Linux kernel pas cu pas.

Hands‑on cu module, device‑uri de tip character, kernel logs și API‑uri.

Explorezi managementul memoriei, întreruperile și sincronizarea în exemple reale.

Dobândești experiență practică prin laboratoare (~70%) de construire și testare a driverelor pe Linux.

Cum te ajută: înțelegi granițele kernel‑user și bune practici în dezvoltarea driverelor.

Cui i se adresează: conceput pentru persoane cu baze de C/Linux care vor skill‑uri la nivel de kernel.

La final vei construi drivere funcționale și le vei debuga cu încredere.

Curriculum

Introducere
  • Kernel versions
  • Kernel sources și utilizarea git
  • Rolling your own kernel
  • Platforme
  • Tipuri de device drivers
  • Elementele unui proiect embedded Linux (prezentare de ansamblu)
Device drivers
  • Tipuri de dispozitive; mechanism vs. policy; evitarea binary blobs
  • Cum folosesc aplicațiile device drivers
  • Mecanismul system call
  • Error numbers
  • printk()
  • devres: managed device resources
  • Module și device drivers: macro-urile module_driver(), modules și hot plug
Managementul și alocarea memoriei
  • Memorie virtuală și fizică
  • Memory zones
  • Page tables
  • kmalloc(), __get_free_pages(), vmalloc()
  • Slabs și alocări în cache
Character devices
  • Device nodes
  • Major și minor numbers; rezervarea numerelor
  • Accesarea device node-ului
  • Înregistrarea dispozitivului (registering the device)
  • udev
  • dev_printk() și funcții asociate
  • Structura file_operations
  • Entry points ale driverului
  • Structurile file și inode
Transfer între user și kernel space
  • User-space vs. kernel-space; system calls; process context
  • Lista înlănțuită (linked list) și alte structuri de date
  • put(get)_user() și copy_to(from)_user()
  • Transfer direct: Kernel I/O și memory mapping
  • Funcții user-space pentru mmap()
  • Entry point al driverului pentru mmap()
Întreruperi și excepții
  • Interrupts și exceptions
  • Asynchronous interrupts
  • MSI
  • Activarea/dezactivarea întreruperilor
  • Ce NU trebuie făcut în timpul întreruperii
  • Structuri de date IRQ
  • Instalarea unui interrupt handler
Măsurători de timp
  • Tipuri de măsurători
  • Jiffies
  • Obținerea timpului curent
  • Surse de ceas (clock sources)
  • Programmable interval timer
  • Time stamp counter
  • HPET
  • Tickless kernels
Kernel timers
  • Introducerea de întârzieri (delays)
  • Low resolution timers
  • High resolution timers
ioctls
  • Entry points ale driverului pentru ioctls
  • Locked și lockless ioctls
  • Definirea ioctls
Unified device model și sysfs
  • Structuri de date de bază
  • Dispozitive reale
  • sysfs
  • Exemple kset și kobject
Sleeping și wait queues
  • Trecerea în sleep și trezirea
  • Exclusive sleeping
  • Polling
Interrupt handling
  • Top și bottom halves
  • Deferrable functions și softirqs
  • Tasklets
  • Work queues
  • Threaded interrupt handlers
  • Interrupt handling în user-space
Hardware I/O
  • Buses și ports
  • Memory barriers
  • Înregistrarea porturilor I/O
  • Acces la registre I/O și memorie I/O
  • Acces din user: ioperm(), iopl(), /dev/port
Aplicație (dacă timpul permite)
  • Implementarea unui driver pentru LED
  • Implementarea unui driver pentru senzor de temperatură

Structura zilei de curs

  • Part 1: 09:00–10:30
  • Break: 10:30–10:45
  • Part 2: 10:45–12:15
  • Lunch break: 12:15–13:15
  • Part 3: 13:15–15:15
  • Break: 15:15–15:30
  • Part 4: 15:30–17:30