La elección se hace a menudo en gran medida en la percepción y la cultura, en lugar de datos concretos. Y, tomar una decisión basada en datos concretos es difícil si se tiene en cuenta la complejidad de un sistema operativo moderno, todos los problemas asociados con la migración al hardware personalizado y los requisitos futuros desconocidos. Incluso desde la perspectiva de una aplicación, las cosas cambian a lo largo de la vida de un proyecto. Los requisitos vienen y van. Te encuentras haciendo cosas que nunca pensaste que harías, especialmente si son posibles. Los omnipresentes puertos USB y de red abren muchas posibilidades, por ejemplo, agregando soporte para módems celulares o soporte para impresoras. El almacenamiento basado en Flash hace que el software en campo actualice el modo de operación estándar. Y al final, cada solución tiene sus fortalezas y debilidades: no hay una solución mágica que sea la mejor en todos los casos.
Al considerar el desarrollo de Embedded Linux, a menudo uso la analogía del iceberg; lo que ves al entrar en un proyecto es la parte sobre el agua. Estas son las piezas con las que interactúa tu aplicación, los controladores que necesitas personalizar, la parte que entiendes. El otro 90% está bajo el agua, y en esto radica una gran cantidad de variabilidad. Los problemas de calidad con los controladores o la imposibilidad de encontrar un controlador para algo que quizás desee admitir en el futuro puede dañar fácilmente las partes conocidas del proyecto. Hay muy pocas personas que tengan mucha experiencia con las soluciones de WinCE y Linux, de ahí la tendencia a aceptar lo que es cómodo (o con qué se sienten cómodos los gerentes), o con qué experiencia tenemos.A continuación se presentan ideas sobre una serie de aspectos a tener en cuenta:
software del sistema DESARROLLO
Las preguntas en este campo incluyen el soporte de la CPU, la calidad del conductor, en el campo de las actualizaciones de software, soporte de sistema de archivos, la disponibilidad de controladores, etc. Uno de Los cambios que han sucedido en los últimos dos años, son los proveedores de CPU que están portando Linux a sus nuevos chips como el primer sistema operativo. Antes, la migración del sistema operativo solía realizarla empresas de software de Linux como MontaVista o esfuerzos de la comunidad. Como resultado, el kernel de Linux ahora es compatible con la mayoría de las CPU incluidas con algunos parches adicionales. Esto es radicalmente diferente de la situación hace 5 años. Debido a que muchas personas usan el mismo código fuente, los problemas se solucionan y, a menudo, se vuelven a aportar a la fuente principal. Con WinCE, el soporte de BSP/controlador tiende a ser más una implementación de referencia, y luego los OEM/usuarios lo toman, arreglan cualquier problema, y ahí es donde las soluciones tienden a permanecer.
Desde una perspectiva del sistema, es muy importante considerar la flexibilidad para las necesidades futuras. El hecho de que no sea un requisito ahora no significa que no será un requisito en el futuro. Obtener el soporte del controlador para un periférico puede ser casi imposible, o puede ser un esfuerzo demasiado grande para que sea práctico.
La mayoría de las personas piensa muy poco en el sistema de construcción, o nunca mira mucho más allá de la idea de que "si hay una buena gui alrededor de la herramienta, debe ser fácil". OpenEmbedded es una forma muy popular de crear productos Linux incorporados, y recientemente ha sido respaldado como la base tecnológica del producto Linux 6 de MontaVista, y los usuarios nuevos lo consideran "difícil de usar". Mientras que las herramientas de construcción de WinCE parecen más simples en la superficie (el 10% por encima del agua), todavía tiene el problema de lo que sucede cuando necesito personalizar algo, implementar funciones complejas como actualizaciones de software, etc. Para construir un sistema de producción con grado de producción características, todavía necesita que alguien en su equipo comprenda el sistema operativo y pueda trabajar en el nivel de detalle tanto del sistema operativo como del sistema de compilación. Con WinCE o Embedded Linux, esto generalmente significa que las empresas necesitan tener desarrolladores internos experimentados o contratar expertos para que realicen partes del desarrollo del software del sistema. El desarrollo del software del sistema no es lo mismo que el desarrollo de aplicaciones, y generalmente no es algo que desee realizar sin experiencia a menos que tenga mucho tiempo. Es bastante común que las empresas contraten la ayuda de expertos para los primeros proyectos en pareja, y luego realizan proyectos de seguimiento internamente. Otra característica a considerar es el soporte paralelo de compilación. Con las estaciones de trabajo de cuatro núcleos convirtiéndose en el estándar, ¿es una gran cosa que se pueda hacer una compilación completa en 1.2 horas frente a 8? Qué tan flexible es el sistema de compilación para extraer y generar código fuente de varias fuentes, como diversos sistemas de control de revisiones, etc.
Los procesadores integrados se están volviendo cada vez más complejos. Ya no es lo suficientemente bueno como para tener la CPU ejecutándose. Si considera la familia de CPU OMAP3 de TI, entonces debe hacer las siguientes preguntas: ¿hay bibliotecas disponibles para el motor de aceleración 3D e incluso puedo obtenerlas sin comprometer millones de unidades por año? ¿Hay soporte para el puente DSP? ¿Cuál es el costo de todo esto? En un proyecto reciente en el que participé, un BSP básico de WinCE para Atmel AT91SAM9260 cuesta $ 7000. En términos de tiempo de desarrollo, esto no es mucho, pero hay que tener en cuenta también los costes acumulables de mantenimiento, la actualización a nuevas versiones del sistema operativo, etc.
DESARROLLO DE APLICACIONES
Tanto Embedded Linux y WinCE admiten una variedad de bibliotecas de aplicaciones y lenguajes de programación. C y C++ tienen un buen soporte. La mayoría de las aplicaciones de tipo empresarial se están moviendo a C# en el mundo de WinCE. Linux tiene Mono, que proporciona una amplia compatibilidad con tecnologías .NET y funciona muy bien en sistemas Linux incorporados. Existen numerosos entornos de desarrollo Java disponibles para Embedded Linux. Un área donde te encuentras con las diferencias son las bibliotecas de gráficos.En general, las API gráficas de Microsoft no son bien compatibles con Linux, por lo que si tiene un equipo de aplicaciones grande que son programadores de GUI rígidos para Windows, entonces quizás tenga sentido WinCE. Sin embargo, hay muchas opciones para los kits de herramientas GUI que se ejecutan tanto en PC con Windows como en dispositivos Embedded Linux. Algunos ejemplos incluyen GTK +, Qt, wxWidgets, etc. The Gimp es un ejemplo de una aplicación GTK + que se ejecuta en Windows, además de que hay muchas otras. Los enlaces son C# para GTK + y Qt. Otra característica que parece venir fuerte en el espacio de WinCE es Windows Communication Foundation (WCF). Pero, de nuevo, hay proyectos para llevar WCF a Mono, dependiendo de las porciones que necesita. El soporte integrado de Linux para lenguajes de scripting como Python es muy bueno, y Python funciona muy bien en procesadores ARM de 200MHz.
A menudo existe la percepción de que WinCE es en tiempo real, y Linux no lo es. El soporte en tiempo real de Linux es decente en los kernels comunes con la opción PREEMPT, y el soporte en tiempo real es excelente con la adición de un parche relativamente pequeño en tiempo real. Puede alcanzar fácilmente un tiempo de milisegundos con Linux. Esto es algo que ha cambiado en los últimos años con la fusión de la funcionalidad en tiempo real en el kernel común.
DESARROLLO DE FLUJO
En un entorno productivo, aplicaciones integradas más avanzadas se han desarrollado y depurado en un PC, no el hardware de destino. Incluso en configuraciones donde la depuración remota en un sistema de destino funciona bien, la depuración de una aplicación en la estación de trabajo funciona mejor. Entonces, el hecho de que una solución tenga una buena depuración en el objetivo, mientras que la otra no es realmente relevante. Para sistemas centrados en datos, es común tener modos de simulación donde la aplicación puede probarse sin conexión a E/S reales. Con las aplicaciones Linux y WinCE, la programación de aplicaciones para un dispositivo integrado es similar a la programación para una PC. Embedded Linux lleva esto un paso más allá. Debido a que la tecnología Linux integrada es la misma que la del escritorio y la tecnología Linux del servidor, casi todo lo desarrollado para escritorio/servidor (incluido el software del sistema) está disponible para embeberse de forma gratuita. Esto significa compatibilidad de controladores muy completa (consulte ejemplos de impresoras y módems USB anteriores), soporte de sistema de archivos robusto, administración de memoria, etc. La amplitud de opciones para Linux es asombrosa, pero algunos pueden considerar esto como un punto negativo, y preferirían un solución integrada como Windows CE donde todo viene de un lugar. Hay una pérdida de flexibilidad, pero en algunos casos, la compensación puede valer la pena. Para ver un ejemplo de la cantidad de paquetes que pueden compilarse para los sistemas Embedded Linux que utilizan Openembedded, consulte.
GUI TENDENCIAS
Es importante tener en cuenta las tendencias para dispositivos embebidos con pequeñas pantallas siendo impulsados por los teléfonos celulares (iPhone, Palm Pre, etc). Los widgets de la GUI estándar que son comunes en los sistemas de escritorio (cuadros de diálogo, casillas de verificación, listas desplegables, etc.) no se cortan para los sistemas integrados modernos. Por lo tanto, será importante considerar la compatibilidad con efectos 3D y bibliotecas de widgets diseñados para ser utilizados por dispositivos de pantalla táctil. La biblioteca Clutter es un ejemplo de este tipo de soporte.
soporte remoto
Volviendo a la cuestión de las herramientas de depuración, la mayoría de las personas se detienen en el escenario en el que el dispositivo se está poniendo al lado de una estación de trabajo en el laboratorio. ¿Pero qué pasa cuando necesita solucionar un problema de un dispositivo que está siendo probado en forma beta a la mitad del mundo? Ahí es donde un depurador de línea de comandos como Gdb es una ventaja, y no una desventaja. ¿Y cómo se conecta al dispositivo si no tiene soporte para módems celulares en Nueva Zelanda, o un mecanismo de conexión eficiente como ssh para el acceso al shell y la transferencia de archivos?
RESUMEN
La selección de cualquier tecnología avanzada no es una tarea sencilla, y es bastante difícil de hacer incluso con experiencia. Por lo tanto, es importante hacer las preguntas correctas y analizar la decisión desde muchos ángulos. Espero que este artículo pueda ayudar en eso.
Es posible que desee especificar más detalles sobre el tipo de hardware y el propósito, ya que harán una diferencia. Probablemente encontrará que Linux se ejecutará en una amplia gama de hardware, el soporte en tiempo real es diferente entre los dos, etc ... – carson
bien no se puede hablar de Linux. pero: si eres un "desarrollador serio", entonces tal vez winCE es una buena idea. si eres un "niño solitario" con un interés en el desarrollo integrado, es posible que gane algo parecido a un jardín cerrado con paredes altas, con un conocimiento compartido limitado y gratuito. – n611x007