Empêcher Windows 7 de modifier le registre de commandes PCI


1

J'ai une carte Compact PCI dans un châssis PXI; il dispose de 2 barrettes de mémoire qui devraient être accessibles via les opérations National Instruments NiVisa. Je ne parviens pas à modifier le registre de commandes de la carte pendant la séquence de démarrage de Windows 7 afin que les barrettes mémoire de la carte soient inaccessibles. J'ai exécuté un analyseur de bus et constate que le registre de commande de l'espace de configuration est défini sur une valeur souhaitable (0x0197) après l'exécution du BIOS.

Je voudrais que cette valeur persiste dans la séquence de démarrage de Windows. Il reste le même lorsque vous utilisez le système d'exploitation Windows XP, mais pas sous Windows 7. J'ai configuré une machine à double démarrage avec Windows XP et Windows 7 pour m'assurer que tout le matériel est identique lors de la comparaison. Après la séquence de démarrage de Windows 7, la valeur est 0x0194.

Je suis en mesure de définir le registre de commande sur 0x197 pour obtenir ces deux derniers bits comme je le souhaite dans le programme que j'utilise pour parler à la carte PXI, ce qui me permet d'utiliser la carte comme vous le souhaitez, mais c'est pas une solution stable. Lors du démarrage de nouvelles sessions de communication (après la fermeture d'anciennes sessions), il arrive souvent que la librairie National Instruments n'affecte pas la mémoire.

  • Est-il possible d'empêcher Windows 7 de configurer la carte PXI?

Il semble que ce soit déjà ce que je veux après le BIOS. Il semble que Windows CE désactive la configuration de la carte avec un Registre NoConfig drapeau. Je ne pouvais pas trouver une méthode qui fonctionnait sous Windows 7 ou Windows XP.

Windows XP tente également de reconfigurer l'espace de configuration de la carte, mais le laisse dans un état utilisable. Facultativement, comme cela augmenterait ma compréhension, mais est probablement tangent à la résolution de mon problème, je suis intéressé par:

  • Quelle différence fait la reconfiguration de Windows 7 avec un résultat différent de celui obtenu par Windows XP dans cette carte?

Réponses:


1

Bienvenue au 21ème siècle. Vous utilisez un système d'exploitation Plug and Play.

Vous ne pouvez pas mapper la mémoire de l'appareil et les registres d'E / S dans la mémoire et l'espace d'E / S bon gré mal gré, exactement ce que l'activation manuelle de la mémoire et des accès d'E / S sur votre périphérique PCI fera. La cartographie des ressources du périphérique doit être effectuée conjointement avec le gestionnaire Plug and Play du système d'exploitation. Le gestionnaire Plug-and-Play surveille quelles plages d'adresses mémoire et d'E / S sont utilisées et par qui, et veille à ce qu'aucun conflit ne survienne du fait que plusieurs périphériques mappent les mêmes plages d'adresses.

Windows désactive la mémoire et les cycles d'E / S de votre périphérique, car il n'a pas été possible d'affecter de la mémoire et des ressources d'E / S à votre périphérique dans le cadre de l'énumération du bus Plug-and-Play et de l'arbitrage des ressources. (J'écarte la possibilité que Windows ait décidé de vous éteindre, étant donné qu'il a laissé busmastering activé.) Soit il n'y a tout simplement pas de place dans la carte de mémoire physique de votre machine pour les ressources que le périphérique veut mapper, ou il n'a pas été programmé. t possible de démarrer votre appareil avec une configuration de ressource assignée. (J'écarte la possibilité que votre périphérique soit simplement en panne et ne signale pas correctement ses besoins en ressources dans l'espace de configuration PCI.)

Ce dernier est le plus probable. La cause habituelle est un périphérique PCI qui ne possède pas de pilote de périphérique. Sans pilote de périphérique pour piloter le périphérique en premier lieu, le gestionnaire PaP ne peut attribuer une configuration de ressources à votre périphérique et l'amener à l'état "démarré". Celles-ci nécessitent un pilote de périphérique (de fonction) pour répondre aux IRP PaP appropriés. Dans ce cas: Votre périphérique a besoin d'un pilote de périphérique.

Le Gestionnaire de périphériques vous dira ce qui se passe avec votre appareil à cet égard.


Comme je ne suis pas un expert du PCI, je me suis tourné vers Internet pour m'aider à résoudre ce problème. Quelques sites ont suggéré qu'il était approprié d'activer les bits du registre de commande à partir du logiciel requis pour l'exécution de votre application. L'activation de la mémoire et des E / S sur votre carte ne devrait pas poser de problème si vous savez que la carte a cette capacité, et vous le faites avant d'essayer d'utiliser les opérations de mémoire et d'E / S disponibles. Avez-vous des références indiquant que la modification du registre de commandes ne doit pas être effectuée? Le gestionnaire de périphériques pense que tout va bien avec la carte. Je vais rechercher "IORP".
Atreys

Vous voulez dire Excepté section 6.5.2 de la Spécification de bus local PCI version 2.3? (-: Il n’est pas difficile de comprendre dès le départ que ce n’est pas votre registre à programmer. Les BAR doivent être configurés en premier, avec les adresses attribué par le PaP Manager , car l'activation du décodage permet le décodage à quelle que soit l'adresse est dans la barre . Sous Windows, tout cela est pris en charge par le pilote de bus PCI, qui répond au PaP correspondant. Paquets de demande d'E / S . Si les BAR n’ont pas été programmées ni le décodage activé, c’est que la gestion de PaP a décidé de ne pas le faire.
JdeBP

Merci pour la référence, c'est très utile. Mon gestionnaire d'appareils répertorie les plages d'adresses mémoire des BAR pour les fonctions de la carte qui ont de la mémoire. Cela signifie-t-il que PaP a attribué cette mémoire à la carte à utiliser?
Atreys

Si les ressources sont répertorié par rapport au périphérique dans le Gestionnaire de périphériques , et le Gestionnaire de périphériques n'indique pas un conflit de ressources, ces ressources auraient donc dû être affectées au périphérique, oui. Pour la plupart des périphériques PCI, le PDO fourni par pci.sys programme les barres avec les ressources affectées lorsque le IRP_MN_START_DEVICE L'IRP est reçu. Il est possible qu'un pilote de niveau supérieur modifie ce processus. C’est toutefois à quiconque a écrit ce pilote de périphérique. Ce n'est pas la manière normale des choses.
JdeBP

Soit dit en passant, cela devrait être la section 6.2.5, pas 6.5.2. Erreur de frappe de ma part.
JdeBP
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.