Differences

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

Link to this comparison view

so2:laboratoare:lab12:exercitii [2018/05/16 08:59]
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. 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 116: Line 121:
 Eliminați modulul și observați că intrările din ''​sysfs''​ sunt eliminate. Eliminați modulul și observați că intrările din ''​sysfs''​ sunt eliminate.
  
-==== 2. Adăugare atribute pentru tip și versiune ====+==== 2. [2p] Adăugare atribute pentru tip și versiune ====
  
 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.
  
-==== 3. Adăugare atribute del și add ====+O implementare pentru funcția de afișare de type este
  
-Adăugați două atribute write-only, numite ''​del''​ și ''​add''​. +<code c> 
-''​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''​.+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 ==== 
 + 
 +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''​. 
 + 
 +<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 142: Line 192:
 </​note>​ </​note>​
  
-==== 4. Înregistrarea driver-ului bex misc ====+==== 4. [2p] Înregistrarea driver-ului bex misc ====
  
 Modificați fișierul ''​bex-misc.c''​ pentru a înregistra driver-ul la magistrala ''​bex''​. ​ Modificați fișierul ''​bex-misc.c''​ pentru a înregistra driver-ul la magistrala ''​bex''​. ​
-Inserați modulul ​bmx_misc.ko și creați un nou device de tip ''​bex''​ din ''​sysfs'',​ cu numele //Test//, tipul //misc// și versiunea //2//. Urmăriți comentariile marcate cu ''​TODO 4''​.+Inserați modulul ​bex_misc.ko și creați un nou device de tip ''​bex''​ din ''​sysfs'',​ cu numele //Test//, tipul //misc// și versiunea //2//. Urmăriți comentariile marcate cu ''​TODO 4''​.
  
 Verificați dacă noul driver este vizibil în ''/​sys/​bus/​bex/​drivers''​. Verificați dacă noul driver este vizibil în ''/​sys/​bus/​bex/​drivers''​.
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. Î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. 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.1526450373.txt.gz · Last modified: 2018/05/16 08:59 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