2010-09-29 2 views
0

Je suis un programmeur de pilote de périphérique linux.pas obtenir le cntl à l'application

J'ai récemment écrit un pilote pour le matériel de renifleur.

Ce matériel de renifleur lira en continu les données de la ligne de bus.

J'ai un gestionnaire d'interruption dans mon pilote pour notifier les données reçues.

Je suis utilisé mappage d'adresse dma pour stocker les données. H/w utilise l'adresse physique, l'adresse virtuelle d'utilisation du pilote.

mon problème, toujours interrompre le gestionnaire a reçu l'interruption de données pour recevoir les données.

Mon application n'a pas pu obtenir cntl pour obtenir les données du pilote.

Le gestionnaire d'interruption ne donne pas cntl du côté de l'application. Bcoz de continuos ne s'arrête pas d'interruption.

Que puis-je faire? Aidez-moi, s'il vous plaît.

Merci Sundar

Répondre

0

On dirait que vous avez besoin de savoir comment accélérer votre gestionnaire d'interruption.

0

Utilisez NAPI comme méthode - lorsque vous obtenez l'interruption qui vous informe sur les données existantes, vous:

  1. interruption Désactiver Rx.
  2. Démarrer/réactiver un thread noyau/une file d'attente de travail pour démarrer la collecte des données à partir du périphérique. Continuez à faire cela jusqu'à ce que vous ayez récolté toutes les données dans le tampon circulaire. Assurez-vous de laisser l'application s'exécuter de temps en temps (par exemple, veillez à X ms tous les 1000 paquets).
  3. Une fois que vous avez fini de récolter toutes les données entrantes, tuez/mettez en veille la file d'attente du noyau/la file d'attente de travail et réactivez les interruptions Rx.
Questions connexes