[pso] [Tema2][Linux] /proc/interrupts

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sat Apr 10 15:46:43 EEST 2010


On Sat, 2010-04-10 at 02:45 -0700, Andrei Trandafir wrote:
> Am reusit sa rezolv problema, pana la urma. Eu, dupa ce inseram
> handler-ul,

Te referi la request_irq?

> mai faceam 3 operatii: resetam registrii,

s/registri/registre; s/registrii/registrele[1]

> activam intreruperile din IER si activam FIFO-ul, iar apoi citeam
> starea curenta a registrilor UART. Am mutat toate aceste 3 operatii in
> functia de deschidere a dispozitivului si acum functioneaza totul
> corect.
> Totusi, nu am inteles unde era problema. Ordinea de initializare (si
> ordinea inversa de eliminare) in modul era:
> - porturi
> - intreruperi
> (*)
> - device
> (**)
> 
> De ce efectuarea celor 3 operatii in (*) dadea problema
> din /proc/interrupts (care apoi ducea la blocarea sistemului) si in
> (**) nu mai face asta...is beyond me.

Ordinea de initializare trebuie sa fie:

register_chrdev_reqion (dispozitiv)
request_region (porturi)
request_irq (intreruperi)

Primele doua pot fi in orice ordine dar _ultima_ initializare trebuie sa
fie cea a intreruperilor. Aceasta pentru ca dupa activarea
intreruperilor se transmit semnale catre procesor. Daca acesta nu a
inregistrat inca porturi (request_region) pentru lucrul cu dispozitivul
dat atunci evil things will happen.

Ca good practice, operatiile legate de intreruperi trebuie sa fie
realizate tot timpul ultimele.

Razvan

[1] http://dexonline.ro/definitie/registru



More information about the pso mailing list