Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2012 - Enero 2013

La arquitectura del Maemo

TO BE WRITTEN!

1. Actividades

1.1. Debate sobre el modelo de interfaces gráficas de Maemo

1.1.2. Recursos

1.1.3. Plan de trabajo

  • Al llegar a clase, el profesor os asignara aleatoriamente en grupos de al menos cinco personas y os organizaréis. (10 minutos)

  • Siguiendo un turno rotario, comentaréis grupalmente el modelo de interfaz gráfica de Maemo

  • Las preguntas que el profesor os hará son las siguientes:(50 minutos)

    1. ¿Sabrías explicar la figura 4.1 de la guía? ¿Cuáles son las principales diferencias entre esta figura y la figura 3.4?

    2. ¿Qué es GNOME?

    3. ¿Es lo mismo diseñar una aplicación gráfica para un ordenador de sobremesa que para Maemo? Argumenta tu respuesta.

    4. ¿Qué GTK?

    5. ¿Qué es Hildon?

    6. ¿Por qué Hildon tiene cuatro tipos de vistas diferentes (normal view, with toolbar, Full Screen, Full Screen with toolbar)?

    7. ¿Cómo se comunica GTK con la aplicación? ¿Serías capaz de poner un ejemplo de uso?

    8. Explicación de la figura 4.7 ¿Qué es un event-loop model?

    9. ¿Cómo facilita el Gnome-VFS la comunicación con las aplicaciones gráficas?

    10. En una aplicación gráfica, ¿para qué se utiliza D-BUS?

  • Debes de tomar notas de cada una de las explicaciones que surjan a lo largo de la clase.

1.2. Lectura individual sobre la Arquitectura de Linux

1.2.2. Recursos

1.2.3. Plan de trabajo

El trabajo al que se enfrenta es el de deducir a partir de cierta documentación real cuál es la estructura de la arquitectura de cierto sistema Linux. Para ello, en vez de centrarse en texto que explique en detalle los entresijos de la arquitectura de un sistema Linux, se sigue el camino inverso: a partir del manual de introducción de un sistema (Maemo) que internamente soporta Linux, el alumno se familiarizará con la arquitectura de dicho sistema. Por lo que en este análisis tan sólo se presentan aquellas partes que son relevantes para el estudiante.

Para conseguir esto se proponen los siguientes pasos:

  1. Leer el capítulo 3 (The Linux System Model) de aproximadamente 10 páginas (45 minutos).

  2. Haz una segunda lectura muy rápida y anota los principales conceptos de cada página (10 minutos).

  3. Centrándote en esos conceptos, escribe un resumen de la lectura (45 minutos). Puedes hacerlo bien en papel o bien en ordenador. Si lo haces en papel, recuerda enseñárselo al profesor. Si lo haces en el ordenador, súbelo a tu repositorio.

Cuando vayas a clase, el profesor va a discutir sobre una serie de temas. Emplea algún tiempo antes de ir a clase en examinar la siguiente lista de preguntas (escogidas por el profesor tras analizar el texto sobre Linux) (15 minutos):

  1. ¿Por qué es necesario un kernel? ¿Para qué sirve? ¿Qué funciones tiene encomendadas?

  2. ¿Por qué Maemo tiene un Linux en su interior?

  3. ¿Por qué hay dos espacios: uno de usuario y otro de kernel?¿Qué ventajas aporta?

  4. ¿Qué es una llamada al sistema?

  5. ¿Qué es un proceso? ¿Qué información interna maneja?

  6. ¿Qué es el PID? ¿Cómo se crean procesos? ¿Cuándo se terminan?

  7. ¿Cómo se inicia un nuevo proceso?¿Cómo se termina un proceso?¿Qué tipo de señales puede recibir?

  8. ¿En qué consiste montar un sistema de ficheros?

  9. ¿Qué tres tipos de pseudo-filesystems hay en Linux?

  10. ¿Qué es un inodo? ¿Por qué se definieron?

  11. ¿Qué es un enlace simbólico?

  12. ¿Qué tipos de permisos de fichero hay en Linux?

  13. ¿Por qué existen varios tipos de permisos, cada uno de ellos para diferentes tipos de usuarios?

  14. ¿Cuál es la diferencia entre un programa, un demonio (daemon) y una libería? ¿Cuál es su relación?

  15. ¿Por qué decimos que httpd, lpd y cron son daemons? ¿Qué tipo de servicios ofertan?

  16. ¿Cuál es la diferencia entre enlazado estático y dinámico?

  17. ¿Cuál es la estructura que tiene una aplicación que utiliza sólo la línea de comandos?

1.2.4. Evaluación

Cuando finalices, sube los documentos en la carpeta MaemoLinux de Subversion o, si lo hiciste en papel, enséñaselos a tu profesor en clase.

1.3. Comentario grupal sobre la Arquitectura de Linux

1.3.2. Recursos

1.3.3. Plan de trabajo

En esta actividad, se trabajará ciertos conceptos de la arquitectura de Linux de forma grupal.

En clase, la dinámica que se seguirá es la que sigue:

  • El profesor os agrupará de cuatro en cuatro, en grupos pequeños, dejándoos un tiempo para que os organicéis.

  • Siguiendo un ciclo rotatorio entre los diferentes grupos, os realizará una serie de preguntas.

    • Cuando seáis el grupo que está en posesión del turno tendréis que responder a la cuestión.

    • Cuando no lo seáis tendréis que anotar las principales ideas expuestas por el grupo.

  • Al final de la clase, se os pedirán las notas que habéis tomado durante la sesión.

Esta es la lista de preguntas con las que se trabajará:

  1. ¿Por qué es necesario un kernel? ¿Para qué sirve? ¿Qué funciones tiene encomendadas?

  2. ¿Por qué Maemo tiene un Linux en su interior?

  3. ¿Por qué hay dos espacios: uno de usuario y otro de kernel?¿Qué ventajas aporta?

  4. ¿Qué es una llamada al sistema?

  5. ¿Qué es un proceso? ¿Qué información interna maneja?

  6. ¿Qué es el PID? ¿Cómo se crean procesos? ¿Cuándo se terminan?

  7. ¿Cómo se inicia un nuevo proceso?¿Cómo se termina un proceso?¿Qué tipo de señales puede recibir?

  8. ¿En qué consiste montar un sistema de ficheros?

  9. ¿Qué tres tipos de pseudo-filesystems hay en Linux?

  10. ¿Qué es un inodo? ¿Por qué se definieron?

  11. ¿Qué es un enlace simbólico?

  12. ¿Qué tipos de permisos de fichero hay en Linux?

  13. ¿Por qué existen varios tipos de permisos, cada uno de ellos para diferentes tipos de usuarios?

  14. ¿Cuál es la diferencia entre un programa, un demonio (daemon) y una libería? ¿Cuál es su relación?

  15. ¿Por qué decimos que httpd, lpd y cron son daemons? ¿Qué tipo de servicios ofertan?

  16. ¿Cuál es la diferencia entre enlazado estático y dinámico?

  17. ¿Cuál es la estructura que tiene una aplicación que utiliza sólo la línea de comandos?

1.3.4. Evaluación

Recuerda que antes de irte de clase has de entregar tus apuntes al profesor.

1.4. El emulador de Maemo - Lectura previa

1.4.2. Recursos

1.4.3. Plan de trabajo

Lee el apartado 1 del manual que se te ofrece como recurso, donde se explica brevemente el entorno de desarrollo de Maemo (10 minutos).

El primer dibujo de la guía explica cuál es la cadena de pasos que hay en un entorno ordinario de desarrollo, a grandes rasgos.

Después de leer la sección 1, piensa qué comandos/herramientas de entre los que se citan a continuación: "gedit", "sb2 -e ./ejecutable","sb2 gcc","sb2 -eR cp", necesitaremos para realizar las siguientes acciones: editar un fichero, compilar, copiar y ejecutar. (10 minutos)

La segunda figura nos muestra los tres universos que existen en el desarrollo para Maemo: (1) huésped, (2) de compilación cruzada y (3) de ejecución.

Para cada uno de ellos indica el tipo de plataforma con la cual crees que trabajarás en el laboratorio. Las opciones con las que cuenta son: (1) i386, (2) ARM y/o (3) ambos. Justifique su respuesta. (10 minutos)

Lee el resto de secciones de la guía (20 min.), para que tengas una idea de las herramientas que podemos usar.

1.5. Lectura individual sobre el modelo de interfaces gráficas de Maemo

1.5.2. Recursos

1.5.3. Plan de trabajo

En esta actividad vas a completar la lectura de la sesión anterior con cierta información sobre el modelo de interfaces gráficas soportado por Maemo. Dichas interfaces están basadas fuertemente en software ya existente en Linux; el cual, ha sido readaptado para Maemo.

  1. Leer el capítulo 4 (The GUI components of Maemo). (30 minutos)

  2. Trata de explicar en un documento Word cuáles son las partes más importantes de un GUI. (15 minutos)

La siguiente lista de preguntas quizás te pueda ayudar a organizar tu información. Son preguntas que le han surgido a la persona que ha leído el texto propuesto. Échales un vistazo. (15 minutos)

  1. ¿Sabrías explicar la figura 4.1 de la guía? ¿Cuáles son las principales diferencias entre esta figura y la figura 3.4?

  2. ¿Qué es GNOME?

  3. ¿Es lo mismo diseñar una aplicación gráfica para un ordenador de sobremesa que para Maemo? Argumenta tu respuesta.

  4. ¿Qué GTK?

  5. ¿Qué es Hildon?

  6. ¿Por qué Hildon tiene cuatro tipos de vistas diferentes (normal view, with toolbar, Full Screen, Full Screen with toolbar)?

  7. ¿Cómo se comunica GTK con la aplicación? ¿Serías capaz de poner un ejemplo de uso?

  8. Explicación de la figura 4.7 ¿Qué es un event-loop model?

  9. ¿Cómo facilita el Gnome-VFS la comunicación con las aplicaciones gráficas?

  10. En una aplicación gráfica, ¿para qué se utiliza D-BUS?

1.6. La arquitectura de Maemo

1.6.2. Recursos

1.6.3. Plan de trabajo

Lee "Chapter 5: Maemo platform overview". (30 minutos)

La siguiente figura aparece etiquetada como la pila software que contiene Maemo.

  • Tu primer trabajo va a consistir en reproducir esta figura en una hoja de papel. (15 minutos)

  • Después de ello vas a escribir una pequeña descripción de los siguientes elementos de la arquitectura. Puedes hacer uso de Internet si fuese necesario.(15 minutos)

    • Initfs

    • Bootloader

    • Core Daemon

    • GNU C Library

    • GPS

    • Core-Libs

    • Linux-Kernel

    • Sockets

    • Help Framework

1.7. El emulador de Maemo - tutorial guiado

En este tutorial guiado paso a paso vamos a aprender a:

  • Compilar una aplicación con un compilador de un entorno de desarrollo cruzado.

  • Ejecutar dicha aplicación en un emulador.

  • Copiar permanentemente la aplicación dentro de un entorno de ejecución simulado (en su imagen), de tal manera que permanezca en el emulador hasta que se borre.

  • Instalar dicha aplicación utilizando el gestor de aplicaciones, mediante la construcción de un paquete Debian.

1.7.2. Recursos

Los siguientes recursos son de apoyo al plan de trabajo y no se requiere su lectura previa.

1.7.3. Plan de trabajo

1.7.3.1. Edición en el universo huésped

En este tutorial, la aplicación que realizarás se llamará helloworld y se almacenará en un directorio llamado project.

  1. Crea dicha carpeta con mkdir en la cuenta del usuario teleco:

    Nota: en caso de que ya exista la carpeta, este comando muestra un error por pantalla.

  2. El siguiente paso a dar es entrar en la carpeta recién creada.

  3. Cread el fichero (con kate u otro editor) para que muestre por pantalla el mensaje "Hola mundo! Somos ...", y muestre vuestros nombres por pantalla. Salvad el fichero.

1.7.3.2. Compilación en el universo de compilación cruzada

Crear una aplicación ejecutable para el dispositivo Nokia a partir del código es sencillo, tan sólo hay que:

  1. Hacer que el comando de compilación gcc se invoque desde el entorno o universo de compilación cruzada del emulador ScratchBox mediante el comando sb2 gcc. Este comando hace que el entorno, también llamado universo, donde se esté invocando el gcc no sea el de nuestro PC, si no el de compilación cruzada. En este universo hay herramientas especiales (como el compilador para la plataforma ARM que corre en el NOKIA) que permiten compilar la aplicación.

    Notas: El comando ls nos permite comprobar que realmente se ha creado el ejecutable helloworld.

  2. Fíjate que el ejecutable generado es para un ARM y no para la arquitectura I386 (la de la maquina virtual o los PCs del laboratorio).

    Nota: El comando file nos indica el tipo de fichero que hemos generado. En este caso es un ejecutable para ARM.

En general para ejecutar un comando en los universos del emulador, sólo tenemos que preceder el comando que queramos por la orden sb2 si es para el universo de compilación cruzada, o sb2 -e si es para el universo de ejecución simulada. Por ejemplo para hacer ls en el entorno de compilación ejecutaríamos sb2 ls.

1.7.3.3. Universo de ejecución: Entorno simulado de ejecución
  1. El directorio donde estamos trabajando (esto es, el directorio project) se comparte entre el universo del huésped y los universos del emulador ScratchBox, por lo que no es necesario copiar nada al emulador para poder ejecutarlo. Puedes probar la aplicación en el entorno de ejecución simulado del ScratchBox con el comando sb2 -e ./helloworld.

  2. Fíjate que si ejecutamos ese archivo desde el el universo huésped, el código ya no funciona, pues está compilado para la arquitectura de un ARM.

  3. Fíjate que también la aplicación funciona en el entorno o universo de compilación cruzada. Esto es así porque este entorno corre también sobre un ARM.

1.7.3.3.1. Copia del ejecutable en el emulador

Para copiar la aplicación en el directorio de programas del emulador (/usr/bin) para que se quede permanentemente, los pasos a seguir son los siguientes:

  1. Antes de nada comprobamos que no existe el fichero en el directorio /usr/bin del emulador con el comando ls, ejecutándolo en el universo de ejecución.

  2. Después, copiamos el ejecutable desde el directorio project a /usr/bin con el comando cp. Fíjate que ha de ir precedido de sb2 -eR porque queremos trabajar dentro del entorno de ejecución.

    La opción R ejecuta el comando como root (esto es, con privilegios máximos). Esta opción es necesaria en este caso para poder copiar el fichero en el directorio /usr/bin en el cual sólo puede crear ficheros el root.

  3. Probemos a ejecutar el programa directamente en el universo de ejecución del ScratchBox; es decir, en el entorno de ejecución simulada.

    Fíjate que para ejecutar ya no es necesaria la opción -R. Esto es así porque no hacen falta privilegios de root para ejecutar una aplicación.

  4. Ahora el fichero se encuentra instalado en el directorio de programas del entorno de ejecución simulada.

  5. Recuerda que los archivos se comparten entre los distintos universos del emulador, así que también puedes comprobar que el programa está instalado en el entorno de compilación cruzada, aunque no es necesario.

  6. Si intento ejecutar en el universo huésped ( sin sb2) el comando falla y ni siquiera encuentra el ejecutable.

  7. Para borrar el fichero una vez instalado se puede realizar esta operación con "rm" (precedido claro está del comando sb2 -eR).

    Una vez más se necesitan privilegios de root para poder realizar la ejecución.

1.7.3.3.2. Empaquetado de la aplicación

Existe la posibilidad de que deseemos instalar la aplicación (no copiándola directamente en el directorio /usr/bin) haciendo uso de un paquete. La ventaja que tiene es que para gestionarlos se puede utilizar el gestor de aplicaciones. Para ello empaquetaremos el código que ya tenemos en un paquete llamado "helloworld" haciendo uso de alien.

  1. Primero creamos una jerarquía de directorios similar a la del entorno final. Esto es, con subdirectorios idénticos a los que tiene el universo de ejecución del dispositivo (o del simulador), en nuestro caso "usr/" y "usr/bin".

    Nota: El punto y coma nos permite introducir dos comandos (uno tras otro) en un mismo paso.

  2. Copiamos el fichero helloworld en esta jerarquía de ficheros.

  3. Comprimimos todo en un fichero ".tar.gz" marcando el número de la versión del paquete.

    Fíjate en varios detalles:

    • Las opciones de tar para comprimir son cvfz.

    • El nombre del paquete ha de coincidir con el nombre dado al fichero "tar" que has creado.

    • La versión del paquete también aparece reflejada en el nombre del fichero (helloworld-1.0.0.tar.gz).

  4. Una vez comprimido, utilizamos la herramienta "alien" para pasar de ".tar.gz" a ".deb". Esta herramienta consigue pasar un fichero ".tar.gz" a un paquete Debian sencillo (no comprueba las dependencias, pero permite que sea reconocido por el gestor de paquetes).

    Fíjate que el comando alien aparece precedido de fakeroot. Si intentamos ejecutar alien sin utilizar fakeroot nos dirá que necesitamos ser root para generar el paquete. La forma de solucionarlo es llamar al comando utilizando fakeroot, un comando que permite simular que se poseen privilegios de root.

  5. El resultado final queda disponible en el directorio actual.

1.7.3.3.3. Instalar/Desinstalar la aplicación

Instalar y desinstalar el paquete "helloworld" es sencillo. Para ello utilizaremos las herramientas "apt-get" y "dpkg" en el universo de ejecución del emulador.

  1. Previo a la instalación del paquete, comprobamos que la aplicación no está instalada haciendo uso de ls.

  2. A continuación, para instalar utilizamos dpkg -i nombre-del-paquete.deb precedido de sb2 -eR.

  3. Tras instalar, podemos invocar helloworld en el entorno de ejecución simulado.

  4. Podemos borrar el paquete llamando al comando apt-get remove en el universo de ejecución en modo root (esto es, con sb2 -eR).

Si has llegado hasta aquí significa que ya eres capaz de construir, ejecutar e instalar aplicaciones en el emulador de Maemo.

¡ENHORABUENA!

1.7.3.4. Universo de ejecución: Dispositivo final

Para terminar, instala el paquete debian en un N810 y muestra que puedes ejecutarlo al profesor:

  1. Sube el paquete .deb al directorio DebianPackage de tu SVN, bájalo luego desde el dispositivo. Para ello abre una ventana en el navegador del dispositivo, copia la URL de tu carpeta SVN, después de poner tus credenciales te mostrará el contenido de tu carpeta, selecciona el paquete .deb, por defecto lo coloca en una carpeta que está en /home/usr/MyDocs/.documents

  2. Para instalarlo (comando dpkg) en el Nokia, no te dejará como user, así que conéctate al propio Maemo con ssh como root: ssh root@localhost usando la clave teleco y, una vez ahí, ya puedes usar dpkg con la opción -i; recuerda que tras conectarte por ssh, tendrás que ir hacia atrás (pues estás en el directorio de root) al directorio de home/user, que es donde está el directorio con las carpetas donde te has bajado el .deb.

  3. Probablemente el dispositivo ya tenga un helloworld instalado (lo verás ejecutando helloworld sin más, por la línea de comandos). Si ya existe, desinstálalo primero.

  4. Para terminar, instálalo con dpkg y ejecútalo.

Si el dispositivo no encontrara el comando ssh, es que no está instalado. Tendrás que activar los Maemo extras si no están activados e instalar la aplicación "open-ssh".

1.7.4. Evaluación

Sube al directorio DebianPackage de SVN el siguiente material:

  • Pantallazo de la línea de comandos donde se vea que habéis sido capaces de ejecutar el "holamundo".

  • Fichero helloworld-1.0.0.deb

1.8. Preguntas finales de autoevaluación

  1. ¿Qué son las System Calls?

    • Son funciones genéricas del sistema para el manejo de memoria, de procesos o de disposivos en los sistemas operativos Linux. Qualquier persona puede implementar funciones de este tipo.

    • Son funciones genéricas del sistema para el manejo de memoria, de procesos o de disposivos en los sistemas operativos.

    • Son las funciones que programamos cuando implementamos un programa.

  2. ¿Cuál es el objetivo de separar la memoria virtual del sistema en dos espacios, el kernel space y el user space?.

    • Uno de los objetivos es protejer el espacio de memoria reservado para las funcionalidades del sistema.

    • Uno de los objetivos es organizar el sistema de memoria para facilitar la implementación de nuevos programas.

    • Uno de los objetivos es facilitar la implementación de nuevas funcionalidades del Kernel.

  3. Los procesos consisten en:

    • De un código ejecutable.

    • De un código ejecutable, de un conjunto de recuross, de una dirección de memoria, datos internos para el kernel, hilos y datos de sección.

    • De un conjunto de recursos.