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

Linux Device Drivers – Concepte fundamentale

Intermediar
21 h
4.8 (231 recenzii)

Sesiuni programate

Începe: 15.07.2026 , 3 zile
Live online Confirmat RO ● Instructor-led
Linux Device Drivers – Concepte fundamentale

Fundamentele driverelor Linux: Învață pas cu pas să scrii, compilezi și depanezi Linux device drivers.

Lucrezi hands-on cu module de kernel, character devices, kernel logs și API-uri specifice spațiului de kernel.

Explorezi managementul memoriei, tratarea întreruperilor hardware și primitivele de sincronizare prin exemple practice.

Dobândești experiență practică: ~70% din curs este alocat laboratoarelor unde vei construi și testa drivere complet funcționale.

Cum te ajută: Înțelegi perfect granițele dintre kernel-space și user-space și adopți bunele practici în dezvoltarea de drivere.

Cui i se adresează: Inginerilor software cu baze de C și Linux care doresc să facă tranziția către programarea la nivel de kernel.

La final, vei ști să dezvolți, să încarci și să faci troubleshooting pentru propriile drivere de Linux.

Abilități dobândite

Module de Kernel Character Devices Managementul Memoriei Întreruperi & Excepții Hardware I/O & Timere Sincronizare în Kernel API-uri Kernel Debugging de Kernel

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

Ai participat la acest curs?

Opinia ta este foarte importantă pentru noi. Spune-ne cum a fost experiența ta și ajută-ne să îmbunătățim acest curs pentru viitorii participanți.

Ofera feedback

Vrei să afli mai multe? Suntem aici să te ajutăm!

Sau scrie-ne direct la training@edocti.com.