Pentru testul final, vă recomandăm să folosiți arhiva de suport a testului.
Creați un modul de kernel care folosește un apel ioctl()
pentru a comanda pornirea și respectiv oprirea unui timer care afișează un mesaj la fiecare 5
secunde. În momentul în care modulul este scos din kernel, timer-ul se închide.
Porniți de la arhiva de suport a testului. În directorul ioctl-timer/
, în fișierul include/util.h
sunt definite cele două comenzi ioctl pentru pornirea respectiv oprirea timer-ului. Este implementată componenta de test din user space în directorul user/
. Implementarea modulului o veți face în directorul kernel/
pornind de la scheletul de acolo. Numele așteptat pentru dispozitiv este /dev/ioctl_timer
cu majorul 42
și minorul 0
.
timer_list
. Informații despre timere găsiți în codul sursă în directorul include/linux/timer.h
.
Alte informații utile aici.
BONUS: Adăugați o nouă comanda de tip ioctl
cu ajutorul căreia să se configureze perioada timer-ului. Să nu fie configurată strict la 5
secunde. Se trimite acest număr din user space ca al treilea argument al apelului ioctl()
.
Creați un modul de kernel care afișează, pentru fiecare dintre procesele copil ale procesului init zonele sale de memorie.
Porniți de la arhiva de suport a testului. În directorul info-children/
aveți un schelet de implementare în care este deja obținut pointer-ul la procesul init
din kernel space.
children
al structurii task_struct
a procesului init
. Apoi să continuați parcurgerea în lista de copii folosind câmpul sibling
din structurile task_struct
ale proceselor copil.
list_for_each_entry()
sau macro-urile list_for_each()
și list_entry()
.
Pentru parcurgerea listei de zone de memorie, folosiți câmpul vm_next
din structura vm_area_struct
și opriți-vă când ajungeți cu pointer-ul iterator la NULL
.