32 votes

Pilote PCIe pour Windows CE et Windows Desktop

J'ai besoin d'un petit conseil pour le développement d'un pilote PCIe personnalisé. Le pilote doit supporter à la fois Windows CE 6.0 et Windows Desktop (xp, 7, et 8 quand il sera prêt).

Nous avons beaucoup d'expérience dans le développement de pilotes pour Windows CE, mais pas pour Windows Desktop. Je suis pratiquement sûr que nous pouvons développer un bon et solide pilote pour Windows CE, mais je pense que nous ne serons pas en mesure de faire de même pour Windows Desktop sans aide extérieure. Je pense que nous avons deux options :

1) Utiliser un cadre de pilote existant tel que Jungo WinDriver, qui nous permet de développer le pilote une seule fois et de le compiler pour plusieurs plateformes. Cela présente également l'avantage que la plupart du développement se fera dans l'espace utilisateur, ce qui devrait simplifier le processus de développement.

2) Obtenir une aide extérieure pour mettre en place un bon pilote Windows Desktop où toute la plomberie est faite et où il suffit d'ajouter le code qui communique avec notre carte et expose les commandes IOC pertinentes. Il est possible de déplacer autant que possible le code dans une bibliothèque de l'espace utilisateur.

Quels seraient les avantages et les inconvénients de chaque option ? Recommanderiez-vous d'autres approches ?

2voto

Allan Larsen Points 306

Comme on me l'a demandé il y a quelque temps, je vais essayer de partager mon expérience, plus d'un an après avoir posé la question initiale. Nous avons décidé d'utiliser Windriver, mais jusqu'à présent nous n'avons écrit qu'un pilote pour Windows CE 6.0, je ne peux donc pas faire de commentaires sur le support multiplateforme.

L'utilisation de Windriver sur Windows CE 6.0 présente à la fois des avantages et des inconvénients. Cela signifie que tout le code de notre pilote est maintenant dans une bibliothèque, ce qui facilite le développement et le débogage (par rapport à un pilote standard qui nécessite Platform Builder). Du point de vue du développement, c'est donc une bonne chose. Les performances sont également bonnes. Il y a eu quelques surcharges au début pour apprendre l'API Windriver et comment l'utiliser, surtout avec le DMA et les interruptions, mais je ne pense pas que ce soit pire que d'apprendre l'API PCI brute de Windows CE 6.0.

Le seul véritable inconvénient auquel je pense est qu'un "vrai" pilote est plus facile à partager entre plusieurs processus que la bibliothèque que nous avons créée avec Windriver. Dans notre application (système embarqué avec un seul processus), ce n'est pas vraiment un problème, mais il est plus difficile de créer des utilitaires de débogage/développement qui fonctionnent sur le matériel derrière le processus principal. Nous avons utilisé cette approche pour le test/débogage sur d'autres plateformes, mais c'est un peu plus compliqué à faire ici.

Pour résumer, je pense que nous avons fait le bon choix et je suis heureux que nous ayons la possibilité de porter notre "pilote" sur Windows Desktop avec (espérons-le) très peu d'efforts lorsque nous en aurons besoin.

1voto

Ayant utilisé Windriver pour développer des pilotes pour Windows/Linux, je souhaite répondre à cette question.

Je préfère Windriver, si l'application qui utilise le pilote doit également être écrite par vous. Puisque vous mentionnez que vous développez un pilote personnalisé, je suppose que vous allez également écrire l'application par vous-même. Dans ce cas, l'application ne doit pas changer beaucoup entre Windows et Windows CE, car la plupart des fonctions du pilote seront générées par Windriver lui-même. C'est comme appeler des fonctions de la bibliothèque standard plutôt que d'utiliser des IOCTL, etc.

Dans le passé, j'ai utilisé windriver pour générer un code d'interface de base pour les pilotes, et j'ai développé des applications (principalement des applications de diagnostic) qui utilisent le code généré par windriver. Avec peu de modifications, nous avons pu utiliser le pilote et l'application entre Windows et Linux. Je ne préconise pas l'utilisation de Jungo, mais il était facile à utiliser.

Puisque la question porte sur la demande de suggestions, il est difficile de fournir une réponse exacte, je ne fais que partager mon avis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X