Differences

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

Link to this comparison view

so2:laboratoare:lab12:exercitii [2018/05/16 10:05]
ionel.ghita
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.
  
 +O implementare pentru funcția de afișare de type este
 +
 +<code c>
 +static ssize_t
 +type_show(struct device *dev, struct device_attribute *attr, char *buf)
 +{
 + struct bex_device *bex_dev = to_bex_device(dev);​
 +
 + return sprintf(buf,​ "​%s\n",​ bex_dev->​type);​
 +}
 +DEVICE_ATTR_RO(type);​
 +</​code>​
 ==== 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>
Line 131: Line 162:
 </​note>​ </​note>​
  
-Creați un device nou și verificați dacă este vizibil în ''/​sys/​bus/​devices''​. Eliminați-l și verificați că a dispărut din ''​sysfs''​.+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''​.
  
 <note tip> <note tip>
Line 157: Line 207:
 Încercați din nou adăugarea unui dispozitiv de tip ''​bex''​ și observați că de data aceasta funcția de ''​probe''​ este apelată. Încercați din nou adăugarea unui dispozitiv de tip ''​bex''​ și observați că de data aceasta funcția de ''​probe''​ este apelată.
  
-==== 5. [2p] Î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>
Line 174: Line 224:
 </​note>​ </​note>​
  
-==== 6. [0.5p] Monitorizarea notificărilor uevent ====+==== 6. [1p] Monitorizarea notificărilor uevent ====
 Folosiți comanda ''​udevadm''​ și observați ce se întâmplă când: Folosiți comanda ''​udevadm''​ și observați ce se întâmplă când:
   * modulele ''​bex.ko''​ and ''​bex_misc.ko''​ sunt inserate   * modulele ''​bex.ko''​ and ''​bex_misc.ko''​ sunt inserate
so2/laboratoare/lab12/exercitii.1526454343.txt.gz · Last modified: 2018/05/16 10:05 by ionel.ghita
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