Forum Linux.noyau 1 périphérique PCIe / 2 drivers

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
28
sept.
2015

Bonjour,

Je souhaite accéder à une carte PCIe en utilisant une bibliothèque fournit par le vendeur. Mais cette bibliothèque et le driver associé ne fournissent pas tout ce dont j'ai besoin, entre autre les notifications asynchrones et la gestion des interruptions.
Je voudrais écrire mon propre driver pour faire cette gestion.
Est il possible d'enregistrer simultanément 2 drivers différents pour le même périphérique depuis un seul processus, autrement dit 2 opens avec chacun un pci_register_driver sur le même device ?

Merci de votre aide.
Frédéric

  • # A mon avis : Non

    Posté par  . Évalué à 2.

    Est il possible d'enregistrer simultanément 2 drivers différents pour le même périphérique depuis un seul processus, autrement dit 2 opens avec chacun un pci_register_driver sur le même device ?

    Je ne vois pas bien ce que "open" viens faire la dedans (cad dans le kernel, car pour gerer les interruptions il faut être au niveau kernel). Quand le système cherche à assigner un driver à une carte, il parcours la liste des drivers déclaré par pci_register_driver en fonction de PCI_PID et PCI_VID de la carte.
    Le kernel invoque alors la fonction "probe" du driver et si celui ci retourne 0, alors il devient "propriétaire" de la gestion de la carte et le parcours du "probe" s'arrête la.
    Au driver de gérer la suite (re-mapping mémoire des mem_regions de la cartes , allocation de l'interrupt etc…)

    • [^] # Re: A mon avis : Non

      Posté par  . Évalué à 1.

      Donc, si le module qui appelle la fonction probe devient propriétaire de la gestion de la carte, cela signifie que cette propriété est exclusive et qu'il est impossible a un autre module d'enregistrer le même device tant qu'il n'a pas été libéré par le premier module ?

      • [^] # Re: A mon avis : Non

        Posté par  . Évalué à 2.

        Oui, c'est le kernel qui appelle la fonction "probe" des modules ayant déclaré les PID&VID (par pci_register_driver) de la carte PCI, chaque module doit vérifier (tour à tour) si c'est bien une version/révision de carte qu'il sait gérer et ensuite en obtient la gestion (propriété exclusive) si il l'indique au systeme (et le système arrête de chercher).

        Si le module "owner" est "rmmod" alors le "insmod" suivant d'un autre module déclarant la gestion des PID&VID de la carte provoqueras bien un "probe" du nouveau module.
        Mais il me semble que si les deux modules étaient déjà en mémoire, alors le "rmmod" du propriétaire ne provoque pas de "probe" de celui rester en mémoire et personne n'est plus "owner" de la carte ( à vérifier ) .

        • [^] # Re: A mon avis : Non

          Posté par  . Évalué à 1.

          C'est clair, merci.

          • [^] # Re: A mon avis : Non

            Posté par  . Évalué à 2.

            pour aller plus loin tu peux refuser le pilote fournit pas le kernel par defaut,
            on appelle ca "blacklister" un module

            afin de forcer le noyau à prendre le module suivant (celui que tu auras developpé)

            • [^] # Re: A mon avis : Non

              Posté par  . Évalué à 1.

              Je crois qu'il n'est pas possible d'empiler les drivers, par contre est-il possible d'écrire un driver qui délègue les fonctions que tu n'a pas envie de ré-implémenter au pilote fourni avec le matériel ? (un peut comme une bibliothèque utiliserait certaines fonctions d'une autre bibliothèque)

Suivre le flux des commentaires

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