Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:teme:tema0 [2017/03/03 23:40]
adrian.stanciu [Sfaturi]
so2:teme:tema0 [2020/03/01 20:03] (current)
constantin.ghioc [Sfaturi]
Line 1: Line 1:
 ====== Tema 0 - Kernel API ====== ====== Tema 0 - Kernel API ======
  
-Termen de predare: Duminică, ​12 Martie ​2017, ora 23:00+  * Termen de predare: ​**Duminică, ​15 Martie ​2020, ora 23:00**
  
  
Line 16: Line 16:
 Este obligatorie folosirea [[https://​github.com/​torvalds/​linux/​blob/​master/​include/​linux/​list.h|API-ului de liste]] implementat în kernel. Pentru detalii puteți urmări [[http://​ocw.cs.pub.ro/​courses/​so2/​laboratoare/​lab03#​liste|laboratorul 3]].  Este obligatorie folosirea [[https://​github.com/​torvalds/​linux/​blob/​master/​include/​linux/​list.h|API-ului de liste]] implementat în kernel. Pentru detalii puteți urmări [[http://​ocw.cs.pub.ro/​courses/​so2/​laboratoare/​lab03#​liste|laboratorul 3]]. 
  
-Pentru realizarea temei, trebuie să porniți de la [[http://elf.cs.pub.ro/so2/res/teme/list-skeleton.c|scheletul de cod]] oferit.+Pentru realizarea temei, trebuie să porniți de la schelet-ul de cod [[https://github.com/linux-kernel-labs/linux/blob/master/​tools/​labs/​templates/​assignments/​0-list/list.c | list.c]].
  
 +Folositi noua infrastructura de testare ruland comenzile de mai jos:
 +
 +<​code>​
 +$ git clone https://​github.com/​linux-kernel-labs/​linux.git
 +$ cd linux/​tools/​labs
 +$ LABS=assignments/​0-list make skels
 +# scheletul de cod se va gasi in api_assignment/​0-list/​list.c
 +$ make build
 +$ make copy
 +$ make boot
 +</​code>​
 Modulul exportă un director numit **list** în //procfs//. Directorul conține două fișiere: 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   * **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.   * **preview**:​ cu acces read-only; este interfața prin care se poate vizualiza conținutul intern al listei din kernel.
  
-[[http://elf.cs.pub.ro/so2/res/teme/list-skeleton.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.+[[https://github.com/linux-kernel-labs/linux/blob/master/​tools/​labs/​templates/​assignments/​0-list/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'':​ Pentru a interacționa cu lista din kernel, trebuie să scrieți comenzi (folosind comanda ''​echo''​) în fișierul ''/​proc/​list/​management'':​
Line 32: Line 43:
 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. 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.
  
-<​note>​ 
-Pentru a vă asigura că modulul este compilat pentru kernel-ul pe care îl rulează mașina virtuală, trebuie să aveți ''​KDIR = /​usr/​src/​linux-so2''​ în Makefile. 
-</​note>​ 
 ===== Testare ===== ===== 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 [[http://elf.cs.pub.ro/so2/res/teme/list-checker|script de testare]] numit ''​list-checker''​. Scriptul de testare presupune că numele modului de kernel este denumit ''​list''​. +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/linux-kernel-labs/linux/blob/master/​tools/​labs/​templates/​assignments/​0-list/checker/_checker|script de testare]] numit ''​_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:<​code bash> +
-wget http://​elf.cs.pub.ro/​so2/​res/​teme/​list-checker +
-chmod a+x list-checker +
-</​code>​ +
-Apoi scriptul trebuie copiat în directorul ''​fsimg/​root/''​ al [[:​so2:​resurse:​masini-virtuale|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:<​code bash> +
-./​list-checker +
-</​code>​+
  
 <​hidden>​ <​hidden>​
Line 67: Line 67:
 ==== Sfaturi ==== ==== 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 [[http://lxr.free-electrons.com/​source/​Documentation/​process/​coding-style.rst | Coding Style]].+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 [[https://elixir.bootlin.com/​linux/​v4.19.19/​source/​Documentation/​process/​coding-style.rst | Coding Style]].
  
 De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul: De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul:
Line 73: Line 73:
 === checkpatch.pl === === checkpatch.pl ===
  
-  * <code bash> ​/path/to/linux-4.9.11/​scripts/​checkpatch.pl --no-tree --terse -f /​path/​to/​your/​list.c </​code>​+  * <code bash> linux/​scripts/​checkpatch.pl --no-tree --terse -f /​path/​to/​your/​list.c </​code>​
 === sparse === === sparse ===
   * <code bash> sudo apt-get install sparse </​code>​   * <code bash> sudo apt-get install sparse </​code>​
   * <code bash>   * <code bash>
- ​cd ​/path/to/linux-4.9.11 ​+ cd linux
  make C=2 /​path/​to/​your/​list.c </​code>​  make C=2 /​path/​to/​your/​list.c </​code>​
  
Line 99: Line 99:
  
 <note important>​ <note important>​
-Resursele temei se găsesc și în repo-ul [[https://​github.com/​systems-cs-pub-ro/​so2-assignments|so2-assignments]] de pe GitHub. Repo-ul conține și un [[https://​github.com/​systems-cs-pub-ro/​so2-assignments/​blob/​master/​so2-create-repo.sh|script Bash]] care vă ajută să vă creați un repository privat pe instanța de [[https://gitlab.cs.pub.ro|GitLab]] ​facultății. Urmăriți indicațiile din [[https://​github.com/​systems-cs-pub-ro/​so2-assignments/​blob/​master/​README.md|README]] și de pe [[:​so2:​teme:​folosire-gitlab| pagina de Wiki dedicată pentru git]].+Va recomandam sa folositi ​gitlab ​pentru ​va stoca temele. Urmăriți indicațiile din [[https://​github.com/​systems-cs-pub-ro/​so2-assignments/​blob/​master/​README.md|README]] și de pe [[:​so2:​teme:​folosire-gitlab| pagina de Wiki dedicată pentru git]].
 </​note>​ </​note>​
  
 ===== Întrebări ===== ===== Întrebări =====
  
-Pentru întrebări legate de temă puteți consulta [[http://news.gmane.org/gmane.education.region.romania.operating-systems-design ​| arhivele]] listei de discuții sau puteți trimite un [[so2@cursuri.cs.pub.ro |e-mail]] (trebuie să fiți [[http://​cursuri.cs.pub.ro/​cgi-bin/​mailman/​listinfo/​so2 | înregistrați]]).+Pentru întrebări legate de temă puteți consulta [[http://cursuri.cs.pub.ro/​pipermail/​so2/ | arhivele]] listei de discuții sau puteți trimite un [[so2@cursuri.cs.pub.ro |e-mail]] (trebuie să fiți [[http://​cursuri.cs.pub.ro/​cgi-bin/​mailman/​listinfo/​so2 | înregistrați]]).
so2/teme/tema0.1488577252.txt.gz · Last modified: 2017/03/03 23:40 by adrian.stanciu
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