Edocti Training
Linux Device Drivers – Concepte fundamentale
Sesiuni programate
Începe:
15.07.2026
, 3 zile
€ 550
Înscrie-te
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