This is an old revision of the document!
Termen de predare: Duminică, 12 Martie 2017, ora 23:00
Să se scrie un modul de kernel numit list
(fișierul rezultat trebuie să se cheme list.ko
) care stochează date (șiruri de caractere) într-o listă internă.
Este obligatorie folosirea API-ului de liste implementat în kernel. Pentru detalii puteți urmări laboratorul 3.
Pentru realizarea temei, trebuie să porniți de la scheletul de cod oferit.
Modulul exportă un director numit list în procfs. Directorul conține două fișiere:
Scheletul de cod implementează cele două fișiere din procfs. Voi va trebui să creați o listă și să adăugați suportul pentru adăugarea și citirea datelor. Urmăriți TODOs din cod pentru detalii.
Pentru a interacționa cu lista din kernel, trebuie să scrieți comenzi (folosind comanda echo
) în fișierul /proc/list/management
:
addf nume
: adaugă elementul nume
la începutul listeiadde nume
: adaugă elementul nume
la sfârșitul listeidelf nume
: șterge prima apariție a elementului nume
din listădela nume
: șterge toate aparițile elementului nume
din listă
Vizualizarea conținutului listei se face prin vizualizarea conținutului fișierului /proc/list/preview
(folosiți comanda cat
). Formatarea conține câte un element pe fiecare linie.
KDIR = /usr/src/linux-so2
în Makefile.
Pentru simplificarea procesului de corectare al temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul unui script de testare numit list-checker
. Scriptul de testare presupune că numele modului de kernel este denumit list
.
Scriptul list-checker
trebuie descărcat și îi trebuie acordate drepturi de execuție:
wget http://elf.cs.pub.ro/so2/res/teme/list-checker chmod a+x list-checker
Apoi scriptul trebuie copiat în directorul fsimg/root/
al mașinii virtuale QEMU/KVM. Tot acolo trebuie copiat și fișierul modul compilat list.ko
. După pornirea mașinii virtuale, scriptul și modulul vor fi disponibile în directorul /root/
al mașinii virtuale QEMU/KVM. Pentru testare se va invoca scriptul:
./list-checker
Pentru a vă mări șansele de a obține nota maximă, citiți și respectați coding style-ul kernelului Linux descris din documentul CodingStyle.
De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul:
/path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/list.c
sudo apt-get install sparse
cd /path/to/linux-4.9.11 make C=2 /path/to/your/list.c
sudo apt-get install cppcheck
cppcheck /path/to/your/list.c
Depunctările generale pentru teme se găsesc pe pagina de Indicații generale.
În cazuri excepționale (tema trece testele prin nerespectarea cerințelor) și în cazul în care tema nu trece toate testele se poate scădea mai mult decât este menționat mai sus.
Arhiva temei va fi submisă pe vmchecker, în conformitate cu precizările din pagina de reguli.
Din interfața vmchecker alegeți opțiunea Kernel API
, aferentă acestei teme.
Pentru întrebări legate de temă puteți consulta arhivele listei de discuții sau puteți trimite un e-mail (trebuie să fiți înregistrați).