Differences

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

Link to this comparison view

so2:laboratoare:lab12:exercitii [2018/05/16 13:07]
razvan.deaconescu [2. [2p] Adăugare atribute pentru tip și versiune]
so2:laboratoare:lab12:exercitii [2019/05/20 14:32] (current)
razvan.deaconescu [1. [2p] Implementare bus]
Line 103: Line 103:
 ===== Completare formular de feedback ===== ===== Completare formular de feedback =====
  
-Apreciem opinia voastră legată de activitățile cursului de SO2. Ne ajută să îmbunătățim cursul și să facem materia cât mai accesibilă și interesantă. Pentru această vă rugăm să completați [[http://cs.curs.pub.ro/​2017/blocks/feedbackacs/​stats.php?courseid=144&​blockid=2391|formularul de feedback de pe cs.curs.pub.ro]] (trebuie să fiți autentificați și înrolați în cadrul cursului). Vă mulțumim!+Apreciem opinia voastră legată de activitățile cursului de SO2. Ne ajută să îmbunătățim cursul și să facem materia cât mai accesibilă și interesantă. Pentru această vă rugăm să completați [[https://acs.curs.pub.ro/​2018/course/view.php?id=295|formularul de feedback de pe cs.curs.pub.ro]] (trebuie să fiți autentificați și înrolați în cadrul cursului). Vă mulțumim!
  
 ==== 1. [2p] Implementare bus ==== ==== 1. [2p] Implementare bus ====
 +
 Analizați conținutul fișierului ''​bex.c'',​ care conține implementarea unui driver de magistrală. Urmăriți comentariile marcate cu ''​TODO 1''​ pentru a implementa părțile ce lipsesc: înregistrați driverul de magistrală și adăugați un nou device, numit ''​root'',​ cu tipul ''​none''​ și versiunea ''​1''​. Analizați conținutul fișierului ''​bex.c'',​ care conține implementarea unui driver de magistrală. Urmăriți comentariile marcate cu ''​TODO 1''​ pentru a implementa părțile ce lipsesc: înregistrați driverul de magistrală și adăugați un nou device, numit ''​root'',​ cu tipul ''​none''​ și versiunea ''​1''​.
  
 <note tip> <note tip>
 Aruncați o privire pe implementarea funcției ''​bex_add_dev()''​. Aruncați o privire pe implementarea funcției ''​bex_add_dev()''​.
 +</​note>​
 +
 +<note tip>
 +Înregistrarea și deînregistrarea o faceți folosind respectiv funcțiile ''​bus_register()''​ și ''​bus_unregister()''​.
 </​note>​ </​note>​
  
Line 119: Line 124:
  
 Adăugați două atribute read-only: ''​type''​ și ''​version''​. Urmăriți comentariile marcate cu ''​TODO 2''​. Adăugați două atribute read-only: ''​type''​ și ''​version''​. Urmăriți comentariile marcate cu ''​TODO 2''​.
 +
 +<note tip>
 +Va trebui să adăugați cele două atribute ''​type''​ și ''​version''​ în structura ''​bex_dev_attrs''​ pe modelul:
 +<​code>​
 +&​dev_attr_<​insert-attribute-type-here>​.attr,​
 +</​code>​
 +</​note>​
  
 Observați că cele două atribute noi sunt vizibile în ''/​sys/​bus/​bex/​devices/​root''​. Verificați conținutul acestor atribute. Observați că cele două atribute noi sunt vizibile în ''/​sys/​bus/​bex/​devices/​root''​. Verificați conținutul acestor atribute.
Line 124: Line 136:
 O implementare pentru funcția de afișare de type este O implementare pentru funcția de afișare de type este
  
-<​code>​+<​code ​c>
 static ssize_t static ssize_t
 type_show(struct device *dev, struct device_attribute *attr, char *buf) type_show(struct device *dev, struct device_attribute *attr, char *buf)
Line 136: Line 148:
 ==== 3. [2p] Adăugare atribute del și add ==== ==== 3. [2p] Adăugare atribute del și add ====
  
-Adăugați două atribute write-only, numite ''​del''​ și ''​add''​. +Adăugați două atribute write-only, numite ''​del''​ și ''​add''​. ''​del''​ așteaptă un nume de device pentru a îl elimina, iar ''​add''​ așteaptă numele, tipul și versiunea pentru a crea un device ​nou. Urmăriți comentariile marcate cu ''​TODO 3''​. 
-''​del''​ așteaptă un nume de device pentru a îl elimina, iar ''​add''​ așteaptă numele, tipul și versiunea pentru a crea un device ​noi. Urmăriți comentariile marcate cu ''​TODO 3''​.+ 
 +<note tip> 
 +Va trebui să adăugați atributele ''​del''​ și ''​add''​ în structura ''​bex_bus_attr''​ pe modelul: 
 +<​code>​ 
 +&​bus_attr_<​insert-attribute-name-here>​.attr,​ 
 +</​code>​ 
 + 
 +</​note>​
  
 <note tip> <note tip>
 Folosiți ''​sscanf''​ pentru a parsa inputul de la ''​sysfs''​ și ''​bex_del_dev()''​ and ''​bex_add_dev()''​ pentru a șterge și crea un device nou. Folosiți ''​sscanf''​ pentru a parsa inputul de la ''​sysfs''​ și ''​bex_del_dev()''​ and ''​bex_add_dev()''​ pentru a șterge și crea un device nou.
 </​note>​ </​note>​
 +
 +Un exemplu de funcție de tipul ''​store''​ este:
 +
 +<code c>
 +static ssize_t
 +add_store(struct bus_type *bt, const char *buf, size_t count)
 +{
 + char type[32], name[32];
 + int version;
 + int ret;
 +
 + ret = sscanf(buf, "%31s %31s %d", name, type, &​version);​
 + if (ret != 3)
 + return -EINVAL;
 +
 + return bex_add_dev(name,​ type, version) ? : count;
 +}
 +BUS_ATTR(add,​ S_IWUSR, NULL, add_store);
 +</​code>​
  
 Creați un device nou și verificați dacă este vizibil în ''/​sys/​bus/​bex/​devices''​. Eliminați-l și verificați că a dispărut din ''​sysfs''​. Creați un device nou și verificați dacă este vizibil în ''/​sys/​bus/​bex/​devices''​. Eliminați-l și verificați că a dispărut din ''​sysfs''​.
Line 171: Line 209:
 ==== 5. [1.5p] Înregistrarea unui device bex misc în funcția probe ==== ==== 5. [1.5p] Înregistrarea unui device bex misc în funcția probe ====
  
-Modificați ''​bex.c''​ astfel încât operația ''​probe''​ să eșueze dacă ''​version > 1''​. Înregistrați device-ul misc în funcția ''​bex_misc_probe''​ și deînregistrați-l în ''​bex_misc_remove''​. Urmăriți comentariile marcate cu ''​TODO 6''​.+Modificați ''​bex_misc.c''​ astfel încât operația ''​probe''​ să eșueze dacă ''​version > 1''​. Înregistrați device-ul misc în funcția ''​bex_misc_probe()''​ și deînregistrați-l în ''​bex_misc_remove''​. Urmăriți comentariile marcate cu ''​TODO 6''​.
  
 <note tip> <note tip>
so2/laboratoare/lab12/exercitii.1526465250.txt.gz · Last modified: 2018/05/16 13:07 by razvan.deaconescu
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