Forum Linux.noyau Driver pour une carte DSP PCI

Posté par  .
Étiquettes : aucune
0
28
août
2007
Post qui fait suite à un post sur forum.general.

Bonjour

Mon problème consiste à réaliser un driver pour une carte DSP PCI avec un acces DMA. Je dispose d'un driver minimal implementé en mode user par un collègue qui ne permet pas d'acces DMA.

Ma question est de savoir si le mode user permet un tel acces.
Un reponse m'a été faites disant qu' en mode user la memoire n'est pas accessible a une adresse fixe et de ce fait rend le DMA impossible.

Pourtant mes recherches ont permis de trouver des documents qui admette un acces DMA en mode user avec l'utilisation de fonctions différentes. Voilà le résumé :

En mode noyau, l'implementation du DMA utilise :
kmalloc, get_free_pages,virt_to_bus

Alors qu'en mode user :
memalign, mlock, recherche dans /dev/mem

Est ce que cet analyse vous semble plausible ??

julien
  • # Mémoire physique et mémoire virtuelle

    Posté par  . Évalué à 2.

    Le problème en mode user est que tu manipules des adresses virtuelles, alors qu'un controleur DMA va travailler sur des adresses physiques. Et à ma connaissance, il n'y a pas moyen de connaitre le mapping en userland sans aide. Qui plus est, le noyau est susceptible de procéder à des remplacements de pages de manière complètement transparente, ce qui change le mapping (bien qu'avec mlock() on doit pouvoir s'en affranchir). Enfin, un contrôleur DMA va généralement signaler la fin de son travail par une IRQ, et on ne peut pas installer de handler d'interruption en userland.

    J'avais vu un jour un patch pour gérer du PCI en userland et aussi des IRQ (sauf que les shared IRQ c'était pas supporté), et je crois pas que le DMA était géré. Je retrouve pas le nom là, même avec de la recherche google. Mais bon, ça me paraissait ultra-crade personnellement.

    Mon conseil: fais ça sous forme de module, tu te simplifieras grandement la vie.
    • [^] # Re: Mémoire physique et mémoire virtuelle

      Posté par  . Évalué à 1.

      Ok ça marche je vais m'y coller.
      Il faudra donc que je recompile le noyau ??

      Est ce que tu aurais sous la main du code illustrant ce genre de driver ?
    • [^] # Re: Mémoire physique et mémoire virtuelle

      Posté par  . Évalué à 1.

      Ok ça marche je vais m'y coller.
      Il faudra donc que je recompile le noyau ??

      Est ce que tu aurais sous la main du code illustrant ce genre de driver ?
      • [^] # Re: Mémoire physique et mémoire virtuelle

        Posté par  . Évalué à 2.

        Non .
        Pour charger ton driver il suffira de taper #modprobe tondriverson .
        J'ai fait pareil quand j'ai installé fusion (téléchargé du site DirectFB) .
        • [^] # Re: Mémoire physique et mémoire virtuelle

          Posté par  . Évalué à 1.

          A priori, pour couper les problèmes en deux d'un côté le Bus Mastering (DMA) et de l'autre le mode du driver, je vais donc essayer de le developper en mode utilisateur étant donné que j'ai une base en mode utilisateur du driver.

          Mon problème pour les nouveau venu sur le post est :

          Je souhaite faire du Bus mastering avec une carte PCI DSP qui n'a qu'un simple driver en mode utilisateur réalisé par un collègue. Je vais donc updater ce driver pour ajouter la fonction Bus mastering.

          Pour ça j'aimerai en savoir plus sur le mapping entre la mémoire physique et la mémoire virtuelle en bus mastering. Est ce que quelqu'un sait si les requetes de lecture et d'écriture de la part du peripherique se font sur des memoires physiques ou sur des memoires virtuelles ?

          D'une manière générale comment ca se passe ?

          julien.
        • [^] # Re: Mémoire physique et mémoire virtuelle

          Posté par  . Évalué à 1.

          A priori, pour couper les problèmes en deux d'un côté le Bus Mastering (DMA) et de l'autre le mode du driver, je vais donc essayer de le developper en mode utilisateur étant donné que j'ai une base en mode utilisateur du driver.

          Mon problème pour les nouveau venu sur le post est :

          Je souhaite faire du Bus mastering avec une carte PCI DSP qui n'a qu'un simple driver en mode utilisateur réalisé par un collègue. Je vais donc updater ce driver pour ajouter la fonction Bus mastering.

          Pour ça j'aimerai en savoir plus sur le mapping entre la mémoire physique et la mémoire virtuelle en bus mastering. Est ce que quelqu'un sait si les requetes de lecture et d'écriture de la part du peripherique se font sur des memoires physiques ou sur des memoires virtuelles ?

          D'une manière générale comment ca se passe ?

          julien.

Suivre le flux des commentaires

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