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 TheBreton . Évalué à 1.
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/
[^] # Re: DMA user land...reponse en trois partie
Posté par rouliaan . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.