linux embedded operating-system windows-ce

Windows CE vs Embedded Linux



operating-system windows-ce (8)

un SO parcialmente personalizado

Es mucho más fácil de lograr si el sistema operativo es de código abierto (y usted tiene la experiencia).

Ahora estoy seguro de que todos conocemos los méritos relativos de Linux frente a Windows Desktop. Sin embargo, he oído mucho menos sobre el mundo del desarrollo integrado. Me interesan principalmente las soluciones para la industria y, por lo tanto, no me interesan el iPhone o Android y estoy más interesado en estos dos sistemas operativos.

¿Cuáles son los intercambios relativos entre las dos plataformas en el mundo integrado? Si estaba pensando en construir una caja para un proyecto específico con hardware personalizado, un SO parcialmente personalizado y una aplicación personalizada, ¿cuál elegiría y por qué?

Supongo que Windows CE gana en herramientas y Linux gana en costo y posiblemente en rendimiento. Sin embargo, esto es solo una especulación total. ¿Alguien tiene algún hecho o experiencia de los dos?


Hablaré por el lado de Linux, al menos para la categoría de software con la que estoy familiarizado (que es el equipo de recolección de datos RF). O aplicaciones industriales frente a aplicaciones para consumidores.

Windows CE (y sus herramientas asociadas) IMH bastante reciente E) está fuertemente predispuesto a crear una "Experiencia de Windows" en una pantalla pequeña. El modo de entrada del usuario enfatiza las acciones similares a las del mouse. Los inicios de sesión, la selección de aplicaciones, etc. todos intentan ser lo más similar posible al Windows estándar.

Si un usuario maneja una carretilla elevadora, o llena un carrito de picking, o mueve material de un lugar a otro, hay un problema.

Y es un objetivo en movimiento, especialmente en el lado de .NET. El tiempo de ejecución de .NET compacto es muy limitado, y las bibliotecas importantes (como las redes, el manejo de datos y la IU) están incompletas y las versiones a menudo dejan de lado la versión anterior. . CE parece ser el hijastro de la familia de Windows (posiblemente porque no hay mucha competencia activa vendiendo a los integradores de hardware).

Una buena consola estable de filas y columnas de Linux es un contexto bastante útil para muchas (en mi experiencia la mayoría) de las aplicaciones de alto uso en una pantalla pequeña.

Sin embargo, no es muy bueno para juegos en tu teléfono celular o Zune.

NOTA:

Creo que ctacke probablemente hable con precisión para el lado del integrador de hardware. Estoy más alineado con los jugadores que están más abajo: integradores de software y usuarios.


He trabajado en proyectos que implican personalizar el software de una placa OEM y no diría que Linux es más barato. Al comprar una placa, también debe comprar el SDK. Aún necesita pagar incluso por la versión de Linux. Algunos fabricantes ofrecen soluciones Windows CE y Linux para sus placas y no hay diferencia de precio. Para Windows CE también necesita Platform Builder y pagar las licencias, pero es más fácil ir sin soporte.

Otro problema importante es si está construyendo una interfaz de usuario o un dispositivo sin cabeza. Para los dispositivos que requieren una pantalla LCD y la interacción humana es mucho más fácil ir con Windows CE. Si, por otro lado, está construyendo un dispositivo sin cabeza, Linux puede ser una opción más sólida, especialmente si se trata de protocolos de red. Creo que las implementaciones de Linux son más confiables y fáciles de modificar.


Trabajé durante varios años en una empresa que proporcionaba tanto CE como Linux para todo su hardware, así que estoy bastante familiarizado con ambos lados de esta ecuación.

  • Herramientas: Las herramientas de Windows CE ciertamente son mejores que las que proporciona Linux, aunque las herramientas de Linux ciertamente están mejorando.
  • Rendimiento: Windows CE es en tiempo real. Linux no es. El kernel de Linux no está diseñado para el determinismo en absoluto. Hay extensiones que puede agregar para obtener una especie de tiempo real, pero CE lo supera.
  • Costo: Esta es un área de gran incomprensión. Mi experiencia general es que CE tiene un costo más bajo desde el primer momento ($ 1k para Platform Builder y tan solo $ 3 por dispositivo para un tiempo de ejecución de envío. "¿Qué?" Usted pregunta? "Linux es gratis." Bueno, no tanto , especialmente en el campo incrustado Sí, hay distribuciones gratuitas como Debian, pero hay muchas piezas que puede necesitar que no estén en esa categoría gratuita. Los marcos de interfaz de usuario como QT, tiempos de ejecución de Java y códecs de medios son solo un comienzo. Además, la mayoría de las distribuciones de Linux con un sistema de soporte con respaldo comercial (por ejemplo, MontaVista) están lejos de ser gratuitas.
  • Disponibilidad de origen: los proponentes de Linux pueden querer decir que CE es una mala elección debido a la falta de código fuente. Todo lo que puedo decir es que en más de una década de trabajo con CE, la mitad de los cuales gasté kernel y controladores personalizados para placas personalizadas, solo he tenido la necesidad de una fuente que no incluyera CE (envían una gran cantidad de mayoría de ella) una vez. También me gusta tener una fuente, pero Microsoft brinda soporte, por lo que en el caso poco probable de que pienses que necesitas esa fuente, puedes hacer que solucionen el problema (la única vez que necesitábamos una fuente, Microsoft proporcionó una solución y de forma gratuita, es su modelo bajo CE.

¿Esto significa que CE gana todo el tiempo? No. No lo sugeriría en absoluto. Si usted es una tienda de Linux y tiene mucha experiencia en Linux y recursos de código, sería una tontería agotarse e ir a CE. Sin embargo, si está ingresando desde cero CE generalmente tiene un TCO más bajo. Los desarrolladores con experiencia en Win32 / C # son más frecuentes y, en consecuencia, menos costosos. También obtienes mucho más "en la caja" con CE que la mayoría de las demás distribuciones, lo que significa un tiempo de comercialización más rápido si todavía no tienes estas cosas hechas internamente.


He desarrollado controladores de red que funcionan tanto en RT Linux (para ser más específicos, núcleo preventivo de Linux con parche RT) como en Windows CE. Mi experiencia fue Windows CE fue más estable en términos de respuesta en tiempo real. Los tiempos de fotogramas también mostraron que Windows CE tenía menos inestabilidad.

En RT Linux, tuvimos todo tipo de problemas. Por ejemplo, cuando el usuario movió el mouse; nuestros marcos se retrasaron. Adivina qué, ciertas variantes de x-windows desactivan las interrupciones. También puede sentir que está más seguro solo en la pantalla de la consola. Si tiene habilitados los búferes de cuadros VGA, está condenado de nuevo. Solo tuvimos un problema con Windows CE en términos de inestabilidad de nuevo. El problema ocurrió cuando el controlador USB estaba configurado en un modo incorrecto en el BIOS y Windows CE usaba mucho tiempo para el sondeo.

Para ser honesto, Windows CE tenía más soporte. En Linux, estás solo. Tienes que leer todas las listas de correo posibles para entender qué problemas puedes tener.


Con Linux, nunca estás solo y nunca dependes de una sola entidad para otorgar permisos. Hay muchas opciones de soporte y usted tiene la libertad de elegir sus opciones de soporte para cualquier parte del sistema a través de muchas fuentes competidoras.

Con Windows CE, debe cumplir con la licencia y las restricciones establecidas en los complejos acuerdos de licencia que deben acordarse. Conseguir un abogado. Con Windows CE, solo tiene una fuente de propiedad exclusiva para la compatibilidad con el sistema operativo y procederá solo cuando lo considere oportuno para brindar soporte y brindarle lo que necesita. Puede no estar de acuerdo con su posición, pero no tendrá ningún recurso más que atenerse a lo que prescriben. Los costos de los componentes incrementales, módulos, kits de desarrollo, licencias y soporte tienden a acumularse con plataformas propietarias. A más largo plazo, ¿qué sucede cuando el proveedor ya no desea respaldar la plataforma y usted no tiene los derechos para respaldarlo y distribuirlo usted mismo? ¿Qué sucede cuando el proveedor se mueve a una tecnología más nueva y quiere que usted se mueva junto con ellos a pesar de que no esté listo para hacer el cambio? $$$

Nuestra experiencia con las soluciones de Windows en general es que tienden a volverse más caras con el tiempo. Lo que originalmente se consideraba como el TCO más bajo gravita rápidamente hacia y la solución es gravosa y costosa de mantener y respaldar. Las licencias tienen que ser renegociadas con el tiempo y las nuevas tecnologías, a menudo innecesarias, se ven obligadas en la imagen por el capricho del proveedor por el bien de SUS necesidades comerciales. Además de eso, los acuerdos de licencia están CAMBIANDO CONTINUAMENTE: consiga un abogado.

Con Linux, tiene la libertad de proporcionar soporte y experiencia interna sin tener que preocuparse por la distribución de la solución que necesita. También tiene la libertad de continuar utilizando y admitiendo tecnología que los proveedores originales ya no desean admitir. Tener el código fuente y los DERECHOS que tienen que ver con lo que quiere (GPL, LGPL) es un atractivo poderoso en lo que respecta a la continuidad del negocio y los costos, a la vez que proporciona acceso a las últimas tecnologías o tecnologías que se adaptan a sus necesidades.


Android es una buena opción para algunos sistemas integrados (está basado en Linux)

  • Usted tiene muchos expertos que pueden desarrollarse en este sistema.

  • Usted tiene acceso a muchas bibliotecas en Java o C.

pero usa mucha memoria y energía.

Lo que a menudo olvidamos con software pagado / licenciado es que tiene que lidiar con licencias. ¡Requiere tiempo y energía! Luego tienes que rastrear si pagas correctamente. Involucra a muchas personas diferentes con diferentes habilidades y cuesta en decisión.

Este costo a menudo no se incluye en los estudios que muestran que el código abierto / gratuito es más costoso que el software pago.

Con el "software libre" es mucho más fácil lidiar con las licencias y dedica menos tiempo a lidiar con estos problemas. Personalmente, prefiero evitar las comunicaciones innecesarias con su equipo legal / financiero cada vez que cambie algunas partes del software.


La elección a menudo se hace en gran parte 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 considerar:

DESARROLLO DE SOFTWARE DEL SISTEMA

Las preguntas en este ámbito incluyen soporte de CPU, calidad de controlador, actualizaciones de software de campo, soporte de sistema de archivos, disponibilidad de controladores, etc. Uno de los cambios que ha sucedido en los últimos dos años es que los proveedores de CPU ahora están transfiriendo Linux a sus nuevos chips como 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 la 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 la gente piensa muy poco en el sistema de compilació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 vuelven 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 del desarrollador, esto no es mucho, pero también debe considerar los costos continuos de mantenimiento, la actualización a nuevas versiones del sistema operativo, etc.

DESARROLLO DE APLICACIONES

Tanto Embedded Linux como 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. 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.

FLUJO DE DESARROLLO

En un entorno productivo, la mayoría de las aplicaciones integradas avanzadas se desarrollan y depuran en una PC, no en 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.

TENDENCIAS GUI

Es importante tener en cuenta las tendencias de los dispositivos integrados con pantallas pequeñas impulsadas por 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 al tema de las herramientas de depuración, la mayoría de las personas se detienen en el escenario donde el dispositivo se está configurando 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

Seleccionar cualquier tecnología avanzada no es una tarea simple, y es bastante difícil de hacer, incluso con la 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.