[pso] [Tema2][Linux]Generare intrerupere
Razvan Deaconescu
razvand at cs.pub.ro
Wed Apr 25 22:58:20 EEST 2007
Costin Boldisor wrote:
> Stiu ca e cam tarziu pentru intrebari legate de tema 2 :)
de ce ar fi prea tarziu? ideea e sa faceti temele si, in consecinta,
intrebarile/nelamuririle au rostul lor
> Dar:
>
> 1. Structura cdev se foloseste numai pentru a se adauga un nou driver
> (cu MKDEV, etc) si
> pentru a retine metodele handler (open, read, write, etc)? Sau ar
> mai trebui folosit si altundeva?
corect (adica doar operatiile cdev_add si cdev_init)
> 2. Dupa ce am copiat in write din user space in buffer, cum generez
> intrerupere ca sa mi se apeleze handlerul
> si sa scriu pe port?
intreruperile de buffer gol (THREI - Transmitter Register Empty
Interrupt) sunt generate in momentul cand buffer-ul este gol, dupa ce ai
configurat linia; se recomanda sa le dezactivezi dupa ce ai scris
informatii in rutina de tratare a intreruperii si sa le reactivezi in
momentul in care ai scris date in buffer-ul din user space
va trebui sa configurezi corespunzator registrul IER (registru de
control) si sa analizezi registrul IIR (registru de stare)
> 3. In handler, al doilea parametru (dev_id) va fi dev_id-ul dat ca
> parametru la inregistrarea intreruperii (request_irq)?
da; poate fi NULL sau poti sa transmiti structura asociata
dispozitivului tau (cea care contine si struct cdev, buffer-e); o poti
folosi ca un "cookie" pentru a face deosebirea intre cele doua
dispozitive utilizate (intre cei doi minori): uart0 si uart1
Razvan
More information about the pso
mailing list