IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Développement d'un driver linux. Pb d'utilisation des tasklets.


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Développement d'un driver linux. Pb d'utilisation des tasklets.
    Bonjour à tous et merci d'avance à ceux qui y consacreront un peu de temps.

    Je travaille dans les systèmes embarqués depuis peu et je dois écrire un drivers pour recupérer des données d'un FGPA.

    Le kernel est un 2.6.21.

    Je reçois des interruptions toutes les 2ms pour m'indiquer que les données sont pretes. Pour que le gestionnaire d'IT s'execute le plus rapidement possible j'utilise des tasklets, mais celles-ci mettent 4 ms pour se lancer, sachant que le taux d'occupation de processeur est d'environ 1% .

    D'apres les docs que j'ai pu lire, une tasklet devrait mettre de 20 à 200 usec.

    Voici une partie de mon code. Pour les tests je n'effectue aucun traitement.


    void doTasklet( unsigned long );

    DECLARE_TASKLET( tasklet , doTasklet , 0 );


    static irqreturn_t itExtFpga( int irq , void *dev_id )
    {

    static unsigned long myRead;

    //------------------------------------------------------------------------
    *( unsigned long* ) ( pc_registerPointeur + 0xc08 ) = 0x00300000;
    //-------------------------------------------------------------------------


    PDEBUG( "IT reçue \n " );
    ul_timeStart = jiffies;
    tasklet_hi_schedule( &tasklet );

    return IRQ_HANDLED;
    }


    void doTasklet( unsigned long inutile )
    {
    unsigned long ul_interval = ( jiffies - ul_timeStart ) *1000000/HZ;
    PDEBUG( "interval de temps : : %ld. \n" , jiffies );
    PDEBUG( "interval de temps : : %ld. \n" , ul_interval );
    }



    Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    J'aurais du mal a t'aider au sujet des tasklet car je n en ai jamais mis en oeuvre.

    Par contre, pour tes problèmes de temps de réponse lorsque tu dis que tu n'effectues aucun traitement pense qu'un appel à PDEBUG induit un appel à la fonction printk qui je crois dévalide les interruptions et écroule le système s'il est appellé trop souvent, ce qui semble être ton cas.

    Lors de la mise au point d'un drivers série classique en mode caractère qui au final fonctionne très bien à 115 Kbds, j'avais mis un printk à la réception de chaque caractères et je perdais la majorité des caractères même à de très faibles vitesses.

    Bonne continuation

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse, pour ce test, je provoque une seule IT afin de mesurer le temps de réaction. Avant de le mettre en place, j'effectuais tout le traitement dans le gestionnaire d'IT et cela fonctionne. Le problème de cette solution vient du fait que le traitement prend la majorité du temps ce qui devient génant pour les applications accédant au driver. D'ou la mise en place d'une tasklet. Une autre solution serait d'utilisait les work queues avec mise en sommeil mais le temps de réveil est incertain et peut s'avérer encore plus long.

    Si il existe d'autres solutions ?

    merci.

Discussions similaires

  1. Utiliser des drivers linux avec Android
    Par matleb dans le forum Android
    Réponses: 4
    Dernier message: 01/02/2011, 17h12
  2. Utiliser des drivers linux avec android
    Par matleb dans le forum Android
    Réponses: 3
    Dernier message: 23/11/2010, 11h29
  3. Utilisation des partitions sous linux
    Par alfa88 dans le forum Administration système
    Réponses: 19
    Dernier message: 18/05/2006, 22h28
  4. [D2005]Comment utiliser des assembly développées en delphi
    Par Valéry dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 16/08/2005, 18h36
  5. [Kylix] Développement de service sous linux
    Par Therich dans le forum EDI
    Réponses: 1
    Dernier message: 05/08/2003, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo