Archivo de la Categoría “microprocesadores”

Vamos a hablar un poquito del sistema operativo Windows CE,  un sistema operativo en tiempo real (a diferencia de su homólogo ucLinux) de 32 bits diseñado para operar en dispositivos con mayores limitaciones que un PC convencional de sobremesa.

Windows CE es un sistema operativo bastante utilizado en procesadores embebidos (como pueden ser los módulos de Digi) y es por eso por lo que vamos a hablar un poco sobre él y sobre la evolución que ha tenido desde la versión Windows CE 1.0, nacida hace ya más de una década, hasta la última versión Windows CE 6.0 que apareció hace pocos meses.

windows-ce.jpg

Windows CE no nació en 1994 con ese nombre, sino con el nombre de “proyecto Pulsar”, el cual al final acabó convirtiéndose en este conocido Sistema Operativo.
 
 
Veamos un poquito de historia acerca de las distintas versiones de Microsoft Windows CE:

Windows CE 1.0.
 
Código fuente fue escrito desde cero y fue lanzado comercialmente en el año 1996.
Parcialmente compatible con el Windows tradicional pues soporta una parte de la famosa API Win32.
Independiente del hardware pues es compatible con las arquitecturas más comunes de  de 32 bits. 


Windows CE 2.0
 

Basado en la versión predecesora 1.0 vió la luz en 1997.
Se añadió soporte para procesadores Intel y AMD
Soporta pantallas con resolución de 24 bits
Conexión de red LAN
Soporte de tecnología ActiveX
Incorpora la máquina virtual java.
Soporte parcial MFC (Microsoft Foundatin Classes, una librería de clases en C++ para programación bajo Windows, incluida en MS. Visual C++)
Conectividad USB e infrarrojos
Soporte FAT e impresión
 

Windows CE 3.0
 
Esta versión salió al mercado en el año 2000 con el fin de comperir con el sistema operativo de PALM.
Incorporación de las interrupciones con prioridades.
Mayor eficiencia en la gestión de threats y en las comunicaciones entre procesos
Mayor capacidad de almacenamiento.
Es la base del sistema operativo PocketPC 2002, que se podía encontrar entonces en algunas PDA y teléfonos.
 

Windows CE 4.0

Esta nueva versión del sistema operativo apareció en Marzo del año 2002
Sistema operativo mucho más robusto y eficiente a nivel pultiproceso que la anterior versión.
Mayor grado de comunicación y sincronización con el sistema Windows tradicional.
De el nació en Junio del 2003 la conocida versión Windows Mobile 2003. Prácticamente fue un cambio de nombre y unas aplicaciones añadidas.
 

Windows CE 5.0

Penúltima versión de este sistema operativo lanzado en Mayo del año 2005.
Mejora del software ofimático y multimedia.
Mejoras en el stack bluetooth
De él nacio la versión Windows Mobile 5.0 disponible en multitud de teléfonos móviles y PDAs.
 

Windows CE 6.0

Última versión de este sistema operativo lanzado a principios de este año.
Un 30% superior en prestaciones a su predecesor Windows CE 5.0
Es posible acceder mediante API a un I/O en un ciclo de 100us
Los mayores cambios se encuentran en el Kernel.
La arquitectura del sistema operativo ha sido completamente revisada.
Cada proceso es capaz de direccionar 2GB (antes 32Mb)
El nº de procesos simultáneos han aumentado de 32 a 32.000

Espero que alguna vez pueda resultaros de utilidad esta breve historia sobre la evolución de Windows CE ;-)

Comments 1 Comentario »

Se acaban las vacaciones para todos. Muchos decimos, “ufff, vuelta a madrugar, vuelta a trabajar … a ver si tengo suerte y me toca la lotería … “. De hecho la recaudación por loterías aumenta siempre en Septiembre de forma cosiderable. Hoy me han enviado un email con un link a un flash de esos que no dejan indiferente. Lo podéis ver aquí. Tras ver ese flash uno puede darse cuenta realmente de la suerte que tiene por tener que madrugar, por tener que trabajar … en definitiva la suerte que tenemos de haber nacido donde hemos nacido y de lo insignificantes que realmente son la mayoría de nuestros problemas y pequeños sacrificios cotidianos en comparación con esa tragedia. Espero y deseo que algún día Internet pueda llevar el conocimiento gratuito a toda esa gente, que es la base imprescindible para poder prosperar.

En fin … volviendo al temas más mundanos, hoy voy a empezar una serie de artículos relacionados con módulos embebidos (o embedded modules) bajo Linux embbeded. Los iré alternando con otros artículos de temática diversa. Como hay que basarse en algo, lo voy a hacer en módulos embebidos de Digi, concretamente en los modelos ConnectCore9C, ConnectCore9P o ConnectCoreWi9C. A aquellos que vayan a utilizar otra marca creo que también les puede servir, pues los conceptos son muy parecidos. Evidentemente a quien use los módulos de Digi (de los que he de reconocer que ha mejorado mucho la documentación) les resultará más útil e interesantes todos estos post. De hecho para estos capítulos me voy a basar en la documentación oficial de Digi.

digi-connectcore-wi9c.gif

¿Qué diferencias hay entre aplicaciones para PC convencional o para sistemas embebidos?

No es lo mismo desarrollar aplicaciones para un PC convencional que para un sistema embebido. El desarrollo de aplicaciones para sistemas embebidos implica tocar bastantes elementos además de la propia aplicación, como son el Sistema Operativo y sus posibles personalizaciones, los drivers, el sistema de ficheros, entre otros. Como he dicho antes nos vamos a basar en el S.O. Linux Embedded, muy extendido hoy en día en este tipo de dispositivos debido a la propia naturaleza de Linux, disponible para muchas arquitecturas de hardware que lo hacen un buen candidato para estos menesteres. Veamos algunos conceptos.
 

Cross-compilation  (compilación cruzada).

Siempre que desarrollemos el software para un dispositivo embebido en una plataforma con una arquitectura de procesador diferente, es necesario utilizar un entorno de desarrollo cruzado. Un compilador cruzado es un compilador que se ejecuta en el sistema de desarrollo, es decir, en  nuestro PC portátil o de sobremesa (Intel x86, por ejemplo) donde desarrollamos la aplicación para el módulo embebido, pero que el código que genera se ejecuta en otro procesador. En nuestro caso de los módulos de Digi, en procesadores ARM.
 
 
Boot loader.

El boot loader es un pequeño software que se ejecuta justo al encender un ordenador. Si hablamos de nuestro PC de sobremesa, este pequeño programa que reside en el MBR (Master Boot Record) de nuestro disco duro, se ejecuta una vez que la BIOS del ordenador ha inicializado todo el sistema. El boot loader entonces pasa información del sistema al Kernel, es decir, la partición del disco duro donde se montará la root y finalmente se ejecuta el propio kernel.

Pero si hablamos de sistemas embebidos esto es más complicado, ya que estos sistemas NO tienen BIOS que inicialicen el sistema y la inicialización del microprocesador, de los controladores de memoria, y en definitiva de todo el hardware de la placa debe hacerlo el programita de la boot antes de que se ejecute el Kernel del sistema.

Como mínimo el boot loader debe inicializar el hardware, especialmente los controladores de memoria y arrancar el sistema operativo con los parámetros adecuados, aunque también puede tener funcionalidades adicionales, como la lectura y escritura en memoria, y todas aquellas funcionalidades que permiten poder actualizar el firmware (sistema operativo, aplicaciones, …) en la memoria flash del equipo vía serie o ethernet.
 
 
El Kernel

El Kernel es la parte fundamental del sistema operativo, el núcleo del sistema. Es el responsable de la gestión de los recursos y las comunicaciones entre el harware y el software, proporcionando una abstracción de hardware y proporcionando una manera segura de acceder al sistema de memoria. También es el responsable del control de las interrupciones y de todas las operaciones de E/S (Entrada/Salida).
 
 
Modulos del Kernel.

Los módulos del kernel son pequeños programitas que son cargados y descargados por el kernel del sistema en función de las necesidades. A modo de ejemplo, un driver de un dispositivo lo podéis ver como un módulo del kernel, el cual permite a dicho kernel poder acceder al hardware conectado al sistema. Si no hubiera módulos tendrían que implementarse en el propio kernel y éste sería terriblemente largo y poco abierto. De esta manera cuando modifiquemos un módulo no tendremos la necesidad de recompilarlo todo de nuevo.
 
 
Root File System.

Como sabéis los Sistemas Operativos manejan ficheros y directorios.  El Root File System digamos que está en el techo del árbol de directorios y ficheros. Éste contiene ficheros y directorios críticos para las operaciones del sistema como pueden ser los programas de inicialización del sistema.
 
 
Aplicaciones.

Esto es lo que más conocéis todos, pues son los programas que utilizan los recursos de un procesador para realizar tareas. Las aplicaciones hacen uso de los dispositivos hardware, como hemos dicho a través de los drivers, los cuales son parte del kernel.
 
 
Espero que os haya resultado interesante esta primera introducción. ;-)

Comments 4 Comentarios »