windows - files - tag folders
Controlador PCIe para Windows CE y Windows Desktop (2)
Necesito un pequeño consejo para el desarrollo de un controlador PCIe personalizado. El controlador debe ser compatible con Windows CE 6.0 y Windows Desktop (xp, 7 y 8 cuando esté listo).
Tenemos mucha experiencia en el desarrollo de controladores para Windows CE pero ninguno para Windows Desktop. Estoy bastante seguro de que podemos desarrollar un buen y sólido controlador de Windows CE, pero creo que no podremos hacer lo mismo con el escritorio de Windows sin ayuda externa. Creo que tenemos dos opciones:
1) Use un marco de controladores existente como Jungo WinDriver, que nos permite desarrollar el controlador una vez y compilar para multiples plataformas. Esto también tiene la ventaja de que la mayor parte del desarrollo estará en el espacio del usuario, por lo que debe simplificar el proceso de desarrollo.
2) Obtenga ayuda externa para configurar un buen controlador de escritorio de Windows donde todo el plomería esté hecho y simplemente necesitamos agregar el código que se comunica con nuestra placa y exponer los IOControls relevantes. Tal vez mover tanto como sea posible del código en una biblioteca de espacio de usuario.
¿Cuáles serían los beneficios y las desventajas de cada opción? ¿Recomendarías enfoques alternativos?
Como solicité hace un momento, intentaré compartir mi experiencia ahora más de un año después de haber formulado la pregunta original. Decidimos usar Windriver, pero hasta ahora solo hemos escrito un controlador para Windows CE 6.0, por lo que no puedo comentar sobre el soporte multiplataforma.
Usar Windriver en Windows CE 6.0 tiene ventajas y desventajas. Significa que todo nuestro código de controlador se encuentra ahora en la biblioteca, por lo que ha sido más fácil de desarrollar y depurar (en comparación con un controlador estándar que requiere Platform Builder). Entonces, desde el punto de vista del desarrollo, ha sido agradable. El rendimiento también ha estado bien. Hubo algunos gastos indirectos al principio al aprender la API de Windriver y cómo usarla, especialmente con DMA e interrupciones, pero no creo que fuera peor que aprender la API PCI de Windows CE 6.0 sin procesar.
La única desventaja real que puedo pensar es que un controlador "real" es más fácil de compartir entre múltiples procesos que la biblioteca que hemos creado usando Windriver. En nuestra aplicación (sistema integrado con un proceso) no es realmente un problema, pero es más difícil crear utilidades de depuración / desarrollo que operen en el hardware detrás del proceso principal. Hemos utilizado ese enfoque para probar / depurar en otras plataformas, pero es un poco más complicado de hacer aquí.
Para resumir todo, creo que tomamos la decisión correcta y me alegra que tengamos la capacidad de transferir nuestro "controlador" al escritorio de Windows con (afortunadamente) muy poco esfuerzo cuando lo necesitamos.
Después de haber usado Windriver para desarrollar controladores para Windows / Linux, quiero responder esta pregunta.
Prefiero Windriver, si la aplicación que utiliza el controlador también va a ser escrita por usted. Como usted menciona que está desarrollando un controlador personalizado, asumo que también va a escribir la aplicación usted mismo. En este caso, la aplicación no necesita cambiar mucho entre Windows y Windows CE, ya que la mayoría de las funciones del controlador van a ser generadas por Windriver. Es como llamar a funciones de biblioteca estándar en lugar de utilizar IOCTL, etc.
En el pasado, he utilizado windriver para generar código de interfaz de controlador básico y aplicaciones desarrolladas (principalmente aplicaciones de diagnóstico) que utilizan el código generado por el generador de viento. Con pequeñas modificaciones, pudimos usar el controlador y la aplicación entre Windows y Linux. No estoy abogando por usar Jungo, pero fue fácil de usar.
Ya que la pregunta es para pedir sugerencias, es difícil dar una respuesta exacta, solo estoy compartiendo mis comentarios.