Differences

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

Link to this comparison view

so2:teme:tema2 [2017/03/23 22:36]
adrian.stanciu [Schemă buffer-e]
so2:teme:tema2 [2020/03/29 21:18] (current)
constantin.ghioc [Resurse]
Line 1: Line 1:
 ====== Tema 2 - Driver UART ====== ====== Tema 2 - Driver UART ======
  
-  * Termen de predare: **Duminică, Aprilie ​2017, ora 23:00**+  * Termen de predare: **Sâmbătă, 12 Aprilie ​2020, ora 23:00**
                                    
  
Line 18: Line 18:
 Să se scrie un modul de kernel care să implementeze un driver pentru portul serial (''​UART16550''​). Device driver-ul trebuie să suporte cele două porturi seriale standard dintr-un PC, ''​COM1''​ şi ''​COM2''​ (''​0x3f8''​ și ''​0x2f8'',​ de fapt întreg range-ul de ''​8''​ adrese ''​0x3f8-0x3ff''​ și ''​0x2f8-0x2ff''​ specific celor două porturi). În afară de rutinele standard care trebuie implementate (''​open'',​ ''​read'',​ ''​write'',​ ''​close''​),​ driver-ul trebuie să aibă suport și pentru schimbarea parametrilor de comunicație cu ajutorul unei operaţii ''​ioctl''​ (''​UART16550_IOCTL_SET_LINE''​). ​ Să se scrie un modul de kernel care să implementeze un driver pentru portul serial (''​UART16550''​). Device driver-ul trebuie să suporte cele două porturi seriale standard dintr-un PC, ''​COM1''​ şi ''​COM2''​ (''​0x3f8''​ și ''​0x2f8'',​ de fapt întreg range-ul de ''​8''​ adrese ''​0x3f8-0x3ff''​ și ''​0x2f8-0x2ff''​ specific celor două porturi). În afară de rutinele standard care trebuie implementate (''​open'',​ ''​read'',​ ''​write'',​ ''​close''​),​ driver-ul trebuie să aibă suport și pentru schimbarea parametrilor de comunicație cu ajutorul unei operaţii ''​ioctl''​ (''​UART16550_IOCTL_SET_LINE''​). ​
  
-Driverul trebuie să folosească înteruperi atât pentru recepție cât și pentru transmisie, pentru a reduce latența și timpul de utilizare a procesorului. De asemenea, apelurile ''​read''​ și ''​write''​ trebuie să fie blocante. Temele care nu respectă aceste cerințe nu se iau în considerare. Este indicat să folosiţi în cadrul driver-ului un buffer de citire și un buffer de scriere pentru fiecare port serial.+Driverul trebuie să folosească înteruperi atât pentru recepție cât și pentru transmisie, pentru a reduce latența și timpul de utilizare a procesorului. De asemenea, apelurile ''​read''​ și ''​write''​ trebuie să fie blocante. ​<​html><​span style="​color:​red;">​Temele care nu respectă aceste cerințe nu se iau în considerare.</​span></​html> ​Este indicat să folosiţi în cadrul driver-ului un buffer de citire și un buffer de scriere pentru fiecare port serial.
  
 Un apel read blocant înseamnă că rutina de read apelată din user-space se va bloca până la citirea a **cel puţin** un octet (buffer-ul de read din kernel este gol și nu se pot citi date). Un apel write blocant înseamnă că rutina de write apelată din user-space se va bloca până la scrierea a **cel puţin** un octet (buffer-ul de write din kernel este plin și nu se pot scrie date). Un apel read blocant înseamnă că rutina de read apelată din user-space se va bloca până la citirea a **cel puţin** un octet (buffer-ul de read din kernel este gol și nu se pot citi date). Un apel write blocant înseamnă că rutina de write apelată din user-space se va bloca până la scrierea a **cel puţin** un octet (buffer-ul de write din kernel este plin și nu se pot scrie date).
Line 56: Line 56:
 ===== Testare ===== ===== Testare =====
  
-Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul ​unor [[http://elf.cs.pub.ro/so2/res/teme/2-uart.zip|teste publice]]. ​Indicații despre utilizarea suitei de teste se găsesc în fișierul ''​README''​ din cadrul arhivei.+Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul ​testelor publice care se găsesc în noua infrastructură. Pentru testarea locală, folosiți următoarele comenzi: 
 + 
 +<​code>​ 
 +$ git clone https://github.com/linux-kernel-labs/linux.git 
 +$ cd linux/tools/​labs 
 +$ LABS=assignments/​2-uart ​make skels  
 +# dezvoltarea temei se va efectua în directorul 2-uart/ 
 +$ make build 
 +$ make copy 
 +$ make boot 
 +</​code>​ 
 + 
 +Indicații despre utilizarea suitei de teste se găsesc în fișierul ''​README''​ din cadrul arhivei.
  
 ==== Sfaturi ==== ==== Sfaturi ====
Line 95: Line 107:
   *documentație despre portul serial găsiți pe [[http://​retired.beyondlogic.org/​serial/​serial.htm | beyondlogic]] sau pe [[ http://​tldp.org/​HOWTO/​Serial-HOWTO-19.html | tldp]]   *documentație despre portul serial găsiți pe [[http://​retired.beyondlogic.org/​serial/​serial.htm | beyondlogic]] sau pe [[ http://​tldp.org/​HOWTO/​Serial-HOWTO-19.html | tldp]]
   *[[ http://​www.byterunner.com/​16550.html | tabela cu registre]]   *[[ http://​www.byterunner.com/​16550.html | tabela cu registre]]
-  *[[ http://www.ti.com/lit/ds/symlink/pc16550d.pdf | datasheet 16550]]+  *[[ https://pdf1.alldatasheet.com/datasheet-pdf/view/9301/NSC/​PC16550D.html | datasheet 16550]]
   *[[ http://​en.wikibooks.org/​wiki/​Serial_Programming/​8250_UART_Programming | documentaţie alternativă]]   *[[ http://​en.wikibooks.org/​wiki/​Serial_Programming/​8250_UART_Programming | documentaţie alternativă]]
  
so2/teme/tema2.1490301375.txt.gz · Last modified: 2017/03/23 22:36 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