This is an old revision of the document!


Tema 0 - Kernel API

  • Termen de predare: Joi, 15 Martie 2018, ora 23:00

Scopul temei

  • familiarizarea cu setup-ul qemu
  • inserarea/ștergerea de module de kernel
  • familiarizarea cu API-ul de liste implementat în kernel
  • have fun :)

Enunț

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 schelet-ul de cod list.c.

Folositi noua infrastructura de testare ruland comenzile de mai jos:

$ git clone https://github.com/linux-kernel-labs/linux.git
$ cd linux/tools/labs
$ LABS=api_assignment make skels
# scheletul de cod se va gasi in api_assignment/kernel-api/list.c
$ make build
$ make copy
$ make boot

Modulul exportă un director numit **list** în //procfs//. Directorul conține două fișiere:
  * **management**: cu acces write-only; este interfața pentru transmiterea comenzilor către modulul de kernel
  * **preview**: cu acces read-only; este interfața prin care se poate vizualiza conținutul intern al listei din kernel.

[[https://github.com/dbaluta/linux/blob/master/tools/labs/templates/api_assignment/kernel-api/list.c|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 listei
  * ''adde nume'': adaugă elementul ''nume'' la sfârșitul listei
  * ''delf 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.

===== Testare =====

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 [[https://github.com/dbaluta/linux/blob/master/tools/labs/templates/api_assignment/checker/list-checker|script de testare]] numit ''list-checker''. Scriptul de testare presupune că numele modului de kernel este denumit ''list''.

<hidden>
Pentru a face deploy la o nouă versiune de schelet sau de teste, folosim comenzile de mai jos, în directorul cu repository-ul Git pentru teme:<code bash>
razvan@einherjar:~/school/current/so2/git-repos/teme/tema0$ scp -r util/ so2@elf.cs.pub.ro:res/current/teme/tema0-util
list-skeleton.c                               100% 2480     2.4KB/s   00:00    
razvan@einherjar:~/school/current/so2/git-repos/teme/tema0$ cd checker/
/home/razvan/school/current/so2/git-repos/teme/tema0/checker
razvan@einherjar:~/school/current/so2/git-repos/teme/tema0/checker$ make -f Makefile.checker deploy
ln list-checker _checker
zip list.zip _checker
updating: _checker (deflated 88%)
rm _checker
scp list.zip so2@elf.cs.pub.ro:vmchecker-storer/tests/
list.zip                                      100% 2014     2.0KB/s   00:00    
scp list-checker so2@elf.cs.pub.ro:res/current/teme/
list-checker                                  100%   15KB  15.3KB/s   00:00

</hidden>

Sfaturi

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 Coding Style.

De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul:

checkpatch.pl

  •  /path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/list.c 

sparse

  •  sudo apt-get install sparse 
  •  cd /path/to/linux-4.9.11 
     make C=2 /path/to/your/list.c 

cppcheck

  •  sudo apt-get install cppcheck 
  •  cppcheck /path/to/your/list.c 

Depunctări

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.

Submitere

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.

Resurse

Va recomandam sa folositi gitlab pentru a va stoca temele. Urmăriți indicațiile din README și de pe pagina de Wiki dedicată pentru git.

Întrebări

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).

so2/teme/tema0.1519941301.txt.gz · Last modified: 2018/03/01 23:55 by daniel.baluta
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0