Toon posts:

[c/c++] signal raising door device driver

Pagina: 1
Acties:

Verwijderd

Topicstarter
Platform: Suse Linux (momenteel nog versie 7.3, maar dat moet binnenkort veranderen).

Situatie: ik heb een programma (zeg Prog A). Prog A maakt gebruik van een library en een device driver, beiden geleverd door de fabrikant van de hardware waar e.e.a. om draait (een CTI kaart). Ik heb dus geen sources van de driver en/of library. Dit programma (Prog A dus) draait onder controle van een soort watchdog (prog. B ). Nu heb ik het probleem dat af en toe programma A bij opstarten onderuit gaat, en daarbij tevens programma B meetrekt (althans zo lijkt het).

Na een hoop gezoek lijkt of blijkt, dat de driver of de library een signal verstuurt, SIGUSR2 om precies te zijn. Prog A doet hier niks mee (die kent helemaal geen signals) en het signal gaat (denk ik?) door naar de parent van prog A, prog B dus, die kan hier niet tegen en gaat onderuit, en sluit daarbij ook prog A af (andersom dus als de 1e analyse).

Nou heb ik om e.e.a. even te checken aan prog A een signal handler toegevoegd die alle SIGUSR2 's afvangt en een regeltje in een logfile zet alvorens de signals door te geven aan de oorspronkelijke signal handler. En nu blijkt dat dat signal zo'n beetje bij elke call naar de API verstuurd wordt (ca. 40 keer per seconde).... Mijn signal handler vangt dat dus nu af, stuurt hem naar de oorspronkelijke handler (in de lib) en die handelt e.e.a. af (maar heel soms niet goed dus, waarna het signal kennelijk weer "naar boven" gestuurd wordt). Mijn gevolgtrekking nu is, dat de device driver communiceert met de library d.m.v. dit signal.

Vraag: is dit normaal gedrag voor een device driver?? Ik ging er tot dusverre van uit dat signals alleen verstuurd worden in uitzonderlijke situaties. De library/driver zijn namelijk in opdracht gemaakt, en als die zondigen tegen algemeen gangbare regels, gaan we ermee terug...

[ Voor 9% gewijzigd door Verwijderd op 23-08-2004 14:22 ]


  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

Als een kernel space driver signals naar userspace verstuurt moet je de ontwikkelaar ter plekke lynchen. Verder zijn signals niet bedoeld voor dit soort toepassingen, en moet je dit met ioctl's of polling regelen.

Ik zou eens gaan vragen hoe eea precies opgebouwd is.

Verwijderd

Topicstarter
igmar schreef op 23 augustus 2004 @ 15:34:
Als een kernel space driver signals naar userspace verstuurt moet je de ontwikkelaar ter plekke lynchen.
Zoiets vermoedde ik al. Bedankt.