This shows you the differences between two versions of the page.
so2:teme:tema0 [2018/03/01 23:53] daniel.baluta |
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: **Joi, 15 Martie 2018, 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 schelet-ul de cod [[https://github.com/dbaluta/linux/blob/master/tools/labs/templates/api_assignment/kernel-api/list.c | list.c]]. | + | 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> | <code> | ||
$ git clone https://github.com/linux-kernel-labs/linux.git | $ git clone https://github.com/linux-kernel-labs/linux.git | ||
$ cd linux/tools/labs | $ cd linux/tools/labs | ||
- | $ LABS=api_assignment make skels | + | $ LABS=assignments/0-list make skels |
- | # scheletul de cod se va gasi in api_assignment/kernel-api/list.c | + | # scheletul de cod se va gasi in api_assignment/0-list/list.c |
$ make build | $ make build | ||
+ | $ make copy | ||
$ make boot | $ 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. | ||
- | [[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. | + | [[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 42: | Line 45: | ||
===== 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 [[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''. | + | 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''. |
<hidden> | <hidden> | ||
Line 64: | 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 70: | 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> | ||