Forum Linux.général Driver pour une carte DSP PCI

Posté par  .
Étiquettes : aucune
0
28
août
2007

Bonjour,

Je travaille actuellement sur une application temps réel avec une ditribution RedHawk, une distribution RED HAT modifié.

Le problème est que je dispose d'une carte DSP PCI avec un driver en mode utilisateur, developpé par un collègue dans lequel le DMA n'est pas exploité. Soumis à des contraintes temporelles dures, je souhaiterai implementer l'accès DMA.

Premièrement, j'ai lu dans pas mal de travaux que le mode utilisateur pouvait causer des corruptions de mémoire dans l'utilisation du DMA. Est ce que quelqu'un à d'autres infos et est ce qu'il serait souhaitable que j epasse le driver en mode noyau.

Deuxièment, je suis vraiment nouveau dans le developpement de driver, et il me semble que l'implementation DMA implique uniquement un mappage différent des mémoires ?? est ce que quelqu'un a déjà fait ce type de travail ?? Avez vous des exemples explicites de codes  ??

Merci par avance de vos réponses

julien

  • # DMA user land...reponse en trois partie

    Posté par  . Évalué à 1.

    Le problème est que je dispose d'une carte DSP PCI avec un driver en mode utilisateur, developpé par un collègue dans lequel le DMA n'est pas exploité. Soumis à des contraintes temporelles dures, je souhaiterai implementer l'accès DMA.

    Deja pour faire du temps réel si le traitement de tes données est aussi prioriataire que leur aquisition il faudrait deporté le traitement dans les taches real-time land.

    Premièrement, j'ai lu dans pas mal de travaux que le mode utilisateur pouvait causer des corruptions de mémoire dans l'utilisation du DMA. Est ce que quelqu'un à d'autres infos et est ce qu'il serait souhaitable que j epasse le driver en mode noyau.

    En mode user la memoire n'est pas accessible a une adresse fixe, donc il n'est pas possible de faire du DMA, c'est peut etre ca la corruption?
    Le composant DMA de la carte fais circuler l'adresse PHYSIQUE de la memoire dans laquelle il fait l'ecriture, il te faut donc etre dans le kernel pour alloué de la memoire par une adresse physique car en user-land on alloue de la memoire par adresse LOGIQUE, si on tente un DMA en communiquant au controleur une adresse logique il va y ecrire comme une adresse physique et donc n'importe ou dans la mémoire.

    Deuxièment, je suis vraiment nouveau dans le developpement de driver, et il me semble que l'implementation DMA implique uniquement un mappage différent des mémoires ?? est ce que quelqu'un a déjà fait ce type de travail ?? Avez vous des exemples explicites de codes ??

    Nouveau dans le monde des drivers?
    bienvenue je te conseille la lecture du rubini
    http://lwn.net/Kernel/LDD3/
    et de postez tes questions dans le bon forum ;-)
    https://linuxfr.org/forums/36/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.