Documentos de Académico
Documentos de Profesional
Documentos de Cultura
www: microe.udea.edu.co/proyectos/DMA
email: infodma@microe.udea.edu.co
tel: +574 2105567
fax: +574 211 9028
TABLA DE CONTENIDO
1. INTRODUCCIÓN ........................................................................................ 3
4. AGRADECIMIENTOS ............................................................................... 15
5. REFERENCIAS......................................................................................... 16
2
Compilación de una máquina virtual
de java para el I.MXL LiteKit
Juan Felipe Botero Vega
Mónica Ayde Vallejo V
1. INTRODUCCIÓN
3
2.1.1 Características
2.1.2 Soporte
4
2.1.3 Ventajas de Pytohn
5
comercial y es distribuido con su código fuente. Jython es complementario a
Java y está diseñado para las siguientes tareas:
6
160kb de memoria disponible para Java
Procesador de 16-bit
Bajo consumo energético
Conexión a una red (a menudo de 96000 bps pero puede ser menor el
ancho de banda)
• El java como tal puede ser muy grande y pesado. Solución: J2ME Java 2
Platform, Micro Edition (J2ME).
• El Java y/o el J2ME no está disponible en binario en todas las
plataformas. Solución: Compilar el código fuente, usar alternativas a la
implementación Java de Sun como lo es el proyecto GNU Kaffe.
Kaffe es un open source “Java runtime enviroment” que puede ser descargado
de http://www.kaffe.org. La máquina virtual, el recolector de basura y los
métodos nativos que trae fueron escritos en C y assembler. Por lo que, aunque
7
kaffe no fue escrito pensando en sistemas embebidos, es posible llevar kaffe a
cualquier plataforma en la que exista un compilador de C. La lista de
procesadores soportados por kaffe es amplia, está conformada por:
386/486/Pentium, SPARC, Alpha, PowerPC, 68k, ARM y MIPS. Esta familia de
procesadores está soportada también por el compilador GNU C Compiler
(GCC). Para la memoria, una combinación del intérprete, recolector de basura
y los métodos nativos requiere menos de 100-kbytes de espacio. Kaffe puede
ser usado con o sin un sistema operativo, esta es una característica única entre
las máquinas virtuales de Java. Esto es posible porque Kaffe contiene sus
propias implementaciones internas de hilos.
8
Paso 2: Hilos Internos
Una parte del código fuente dependiente de la plataforma que debe ser
modificada para usarla en cualquier sistema embebido es el cargador dinámico
de clases. Éste es una parte del “Java runtime enviroment” que es responsable
de cargar los métodos cuando son llamados. En un ambiente de escritorio, los
Bytecodes asociados con cada método son almacenados en un archivo .class.
El cargador dinámico de clases busca los directorios y archivos en la ruta de
clases del Java (classpath) para un método de acuerdo al nombre que éste
tenga. Pero hay muy pocos sistemas embebidos con un sistema de archivos,
por los que el cargador de clases debe ser modificado para que busque las
clases en la memoria (puede se RAM ó ROM).
9
Paso 6: Hilos Nativos (opcional)
Por defecto, kaffe tiene sus propios mecanismos internos de hilos para
inicializar y programar cada uno de los hilos en una aplicación Java. Kaffe logra
esto creando estructuras de datos de hilos que son separadas e invisibles al
sistema operativo. En otras palabras, la máquina virtual del Kaffe es por si
misma una herramienta que subdivide su tiempo de ejecución y lo distribuye en
cada uno de sus hilos. En la figura 4 podemos ver la relación entre los hilos de
Kaffe y el sistema operativo.
Se espera que Kaffe sea compilado para un sistema operativo basado en UNIX
o en DOS y que sea invocado desde la línea de comandos, usualmente con un
parámetro que dice cual clase JAVA ejecutar primero. Pero como se quiere
usar el kaffe en un sistema embebido, se necesitará una manera menos
dinámica de iniciar la máquina virtual y algún mecanismo para pasar la clase
JAVA inicial. La inicialización se puede lograr con una llamada a la rutina
initializeKaffe().
Una vez que el “Kaffe runtime enviroment” ha sido inicializado, el sistema está
listo para ejecutar archivos JAVA.
3.1 cross-compilación
10
3.2 Herramientas y dispositivos:
Generalmente se usa la cross-compilación cuando se quiere compilar
programas para dispositivos móviles como PDA o alguna otra máquina
pequeña que tiene un lento procesador principal.
11
Los pasos que se siguieron para cross-compilar el Kaffe se dividen en 2 partes;
compilar las librerías por fuera del Scratchbox y cross-compilar el Kaffe dentro
del scratchbox.
La razón por la que las librerías se compilan fuera del scratchbox, es que no
existe un compilador JAVA para la arquitectura ARM, si existiera, la cross-
compilación no se tendría que realizar en dos pasos. Pero las librerías
necesitan ser compiladas con un compilador JAVA, y el compilador JAVA que
se tiene trabaja en la arquitectura del computador personal y no el una
arquitectura ARM.
Los pasos para compilar las librerías por fuera del scratchbox son los
siguientes:
Paso 1:
Situarse en el directorio /scratchbox/users/monica/home/monica/kaffe-1.1.5 y
generar el Makefile con la siguiente instrucción:
Paso 2:
Quitar el comentario de la línea 393 al Makefile ubicado en el directorio
/libraries/javalib.
MAYBE_PEERLESS_KAFFE_AWT = awt-implementations
Paso 3:
Exportar las banderas del javac, así:
export JAVAC_FLAGS=
Paso 4:
Agregar en el archivo Makefile ubicado en la carpeta /libraries/javalib/awt-
implementation/kaffe, lo siguiente:
12
En la línea de las banderas de Java
Esta línea permite que el compilador encuentre la dirección en que están las
librerías que debe compilar.
Paso 5:
Ingresar al directorio /libraries/javalib y compilar las librerías, mediante los
comandos:
make clean
make
Si vamos bien hasta acá, quiere decir que las librerias compilaron bien, es
decir, el primer gran paso está realizado
Luego nos logueamos como usuarios (este usuario debe ser el mismo usuario
que configuramos en el scratchbox):
su monica
/scratchbox/login
Ahora se verán los pasos que hay que dar dentro del scratchbox (cross-
compilación):
Paso 6:
Ingresar al directorio root de kaffe y realizar la siguiente configuración.
Las opciones son las mismas que en el primer configure, con la differencia que
se dan las rutas en las cuales están las librerías del Nano-X (microwindows) y
se le da la ruta del rt.jar, que es un archivo que se genera al compilar las
librerías. Las rutas se dan suponiendo que el microwindows está en el mismo
directorio que el kaffe, es decir en:
/scratchbox/users/monica/home/monica/microwindows-0.91.
13
Paso 7:
Borrar del Makefile principal, es decir, ubicado en
/scratchbox/users/monica/home/monica/kaffe-1.1.5, la línea 405 que dice:
libraries/javalib
Este paso sirve para que el scratchbox no compile las librerías, puesto que
éstas ya fueron compiladas en los pasos anteriores.
Paso 8:
Compilar el paquete, en el mismo directorio /kaffe-1.1.5
make clean
make
make install
1
Recuérdese que para que se puedan compartir archivos mediante NFS, se debe levantar éste
servicio, y se debe incluir en el archivo /etc/exports el directorio que se va a compartir.
14
4. También hay que compartir la carpeta de las librerías del microwindows.
Este proceso se realiza de la misma manera que el descrito en el paso
anterior, se utilizan los siguientes comandos:
export
BOOTCLASSPATH=/mnt/nfs/targets/mxl/usr/local/kaffe/jre/lib/arm/kaffeawt.jar:/
mnt/nfs/targets/mxl/usr/local/kaffe/jre/lib/arm/rt.jar
y
export
BOOTCLASSPATH=/mnt/nfs/targets/mxl/usr/local/kaffe/jre/lib/arm/kaffeawt.jar:/
mnt/nfs/kaffe/jre/lib/arm/rt.jar
/mnt/nfs/targets/mxl/usr/localkaffe/bin$
/mnt/nfs/targets/mxl/usr/localkaffe/jre/bin/kaffe-bin HolaMundo
7. Para ejecutar una aplicación gráfica hay, en primer lugar, que iniciar el
Nano-X y el nanowm, esto se realiza ubicados en el directorio
/mnt/nfs/home/monica/microwindows-0.91/src/bin mediante los
comandos:
$ nano-X
$ nanowm
/mnt/nfs/targets/mxl/usr/localkaffe/bin$
/mnt/nfs/targets/mxl/usr/localkaffe/jre/bin/kaffe-bin -
Dkaffe.awt.nativelib=nanoxawt example
4. AGRADECIMIENTOS
15
5. REFERENCIAS
16