= Que es el IGEPv2 =
El IGEPv2 board es una placa embebida muy parecida a la conocida Beagle board, pero con 512MB de memoria RAM y 512MB de NAND flash (en lugar de los 256 de la Beagle). Esta placa lleva una CPU muy rápida (un ARM Cortex A8, OMAP 3530 que corre a 720MHz), y una GPU PowerVR SGX530 a 110MHz que permite correr un servidor de X de manera eficiente. Ademas cuenta con puertos de I/O de audio estéreo, salida de video DVI-D usando HDMI (720p HD), ethernet RJ45, microSD, USB host/device y conectividad inalámbrica WiFi y Bluetooth.
Teniendo en cuenta que su tamaño es aproximadamente el mismo que el de una tarjeta de crédito, y que su consumo es de solo 5W, se trata de una placa muy apetecible para montar sistemas embebidos de todo tipo. La limitación aquí ya no viene dada por las capacidades de la placa, sino por la de tu propia imaginación...
Por el reducido consumo, yo lo usaré como servidor en Internet dedicado las 24h. Pero es solo una idea de las muchas que seguro se te ocurren: cámaras de vídeo vigilancia, receptores de GPS, TPV táctiles, lectores de tarjetas, cajeros automáticos, control de domótica, robots inteligentes, señalización de autopistas, videoconsolas, centro de datos multimedia, etc. etc. etc.
Es un hardware diseñado y fabricado íntegramente en Barcelona por la empresa catalana ISEE, que lo vende a un precio de 188€. Tratándose de un producto nacional, de una calidad excelente, y tal como están las cosas en este país con esta maldita crisis, merece la pena destacar a una empresa nacional que continua invirtiendo en I+D, y desarrollando tecnología puntera a nivel internacional.
= Material necesario para trabajar con el IGEPv2 =
Además del IGEPv2, necesitas material adicional para trabajar con la placa: un alimentador de 5V y un cable para el puerto serie de debug con conector plano (que también vende el fabricante). Una tarjeta microSD de al menos 2GB, un lector de tarjetas microSD, y si tu PC no tiene conector de puerto serie DB9 (lo habitual en estos días), un conversor de USB a DB9. También es necesario un conversor NULL MODEM (para cruzar las señales Tx y Rx). Sería ideal que el conversor de USB a DB9 ya fuera NULL MODEM (de esa manera nos evitamos comprar el conversor NULL MODEM), aunque yo no he encontrado ninguno de estos en el mercado.
= El arranque del IGEPv2 =
En general, los procesadores OMAP35xx pueden arrancar desde una microSD.
El IGEPv2 (basado en el OMAP35xx) usa la tarjeta microSD como el dispositivo de arranque de mas alta prioridad, lo que significa que el procesador intenta arrancar desde la microSD antes que intentar arrancar desde cualquier otro dispositivo (desde la NAND flash).
El procesador intenta cargar un archivo llamado MLO, que reside en la primera partición de la tarjeta microSD, y que también se conoce como x-loader. El procesador solamente carga y ejecuta el programa MLO e ignora el resto. El x-loader (MLO) pasa a ejecutarse por el procesador. Ya es responsabilidad del x-loader que el arranque continúe cargando un kernel, un bootloader (u-boot), o cualquier otra cosa.
= Fabricación de la microSD para arrancar el IGEPv2 =
La tarjeta microSD debe reconfigurarse con unas características determinadas para que puedas usarla para arrancar el IGEPv2:
- Una geometría particular (heads, sectors, cilindros)
- Dos particiones primarias (una de msdos 'boot' y otra de linux 'rootfs').
= Definir la geometría y las particiones en la microSD =
Mucho cuidado! Usaremos /dev/sde como fichero dispositivo para la microSD, pero ten en cuenta que este nombre de fichero dispositivo lo decide el kernel cuando detecta un nuevo dispositivo conectado al sistema, por lo que asegúrate de confirmar este valor antes de continuar (comando dmesg), o en caso contrario podrías dañar tu equipo completamente. Avisado quedas.
Borra la tabla de particiones:
$ sudo dd if=/dev/zero of=/dev/sde bs=1024 count=1024
Arranca el fdisk sobre el dispositivo de la microSD con los flag -u=cylinders (para establecer unidades en cilindros) y -c=dos (para establecer el modo de compatibilidad DOS), ya que por defecto es NONDOS y la microSD que genera no funciona correctamente.
$ sudo fdisk -u=cylinders -c=dos /dev/sde
Borra todas las particiones creadas en esa tarjeta SD:
Command (m for help): [d] Selected partition 1Printa la geometría actual de la tarjeta microSD:
Orden (m para obtener ayuda): p
Disco /dev/sde: 4035 MB, 4035969024 bytes 125 cabezas, 62 sectores/pista, 1017 cilindros Unidades = cilindros de 7750 * 512 = 3968000 bytes Tamaño de sector (lógico / físico): 512 bytes / 512 bytes Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes Identificador de disco: 0x000a6737La geometría de la tarjeta microSD debe ser esta:
- 255 heads
- 63 sectors/track
- CCC cilindros
4035969024 / 255 / 63 / 512 = 490.677734375
En este caso, CCC=490 (es decir, se trunca, no se redondea)
Como vemos en el listado obtenido antes, nuestra tarjeta microSD no tiene estos parámetros de geometría, por lo que tenemos que cambiarlos. Para establecer los valores calculados, entra en el modo extendido:
Orden (m para obtener ayuda): x
Orden avanzada (m para obtener ayuda): h Número de cabezas (1-256, valor predeterminado 125): 255
Orden avanzada (m para obtener ayuda): s Número de sectores (1-63, valor predeterminado 62): 63 Atención: estableciendo desplazamiento de sector para compatibilidad con DOS Orden avanzada (m para obtener ayuda): c Número de cilindros (1-1048576, valor predeterminado 1017): 490 (CCC)Vuelve al modo normal, y printa el trabajo realizado:
Orden avanzada (m para obtener ayuda): r Orden (m para obtener ayuda): p Disco /dev/sde: 4035 MB, 4035969024 bytes 255 cabezas, 63 sectores/pista, 490 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Tamaño de sector (lógico / físico): 512 bytes / 512 bytes Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes Identificador de disco: 0x000a6737
Crea ahora la partición primaria de 'boot'
Orden (m para obtener ayuda): n Acción de la orden e Partición extendida p Partición primaria (1-4) p Número de partición (1-4): 1 Primer cilindro (1-490, valor predeterminado 1): Se está utilizando el valor predeterminado 1 Último cilindro, +cilindros o +tamaño{K,M,G} (1-490, valor predeterminado 490): +8 Orden (m para obtener ayuda): t Se ha seleccionado la partición 1 Código hexadecimal (escriba L para ver los códigos): c Se ha cambiado el tipo de sistema de la partición 1 por c (W95 FAT32 (LBA))Marca la partición de 'boot' como bootable:
Orden (m para obtener ayuda): a Número de partición (1-4): 1
Ahora crea la partición primaria del 'rootfs':
Orden (m para obtener ayuda): n Acción de la orden e Partición extendida p Partición primaria (1-4) p Número de partición (1-4): 2 Primer cilindro (52-490, valor predeterminado 52): Se está utilizando el valor predeterminado 52 Último cilindro, +cilindros o +tamaño{K,M,G} (52-490, valor predeterminado 490): Se está utilizando el valor predeterminado 490El trabajo realizado hasta ahora debe visualizarse de esta manera:
Orden (m para obtener ayuda): p Disco /dev/sde: 4035 MB, 4035969024 bytes 255 cabezas, 63 sectores/pista, 490 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Tamaño de sector (lógico / físico): 512 bytes / 512 bytes Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes Identificador de disco: 0x4b4b1fee Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sde1 * 1 9 72261 c W95 FAT32 (LBA) /dev/sde2 10 490 3863632+ 83 LinuxPor último, graba y sal:
Orden (m para obtener ayuda): w ¡Se ha modificado la tabla de particiones! Llamando a ioctl() para volver a leer la tabla de particiones. ATENCIÓN: Si ha creado o modificado alguna de las particiones DOS 6.x, consulte la página man de fdisk para ver información adicional. Se están sincronizando los discos.
= Formatear las particiones =
Antes de continuar, asegúrate de desmontar las dos particiones recién creadas, ya que a veces el auto montado las monta automáticamente, y ahora mismo no es lo que deseamos (comando umount). Después haz lo siguiente:
Formatea la partición de boot (label 'boot'):
$ sudo mkfs.msdos -F 32 /dev/sde1 -n boot mkfs.msdos 3.0.7 (24 Dec 2009)Formatea la partición del rootfs (label 'rootfs'):
$ sudo mkfs.ext4 -L rootfs /dev/sde2 mke2fs 1.41.11 (14-Mar-2010) Etiqueta del sistema de ficheros=rootfs Tipo de SO: Linux Tamaño del bloque=4096 (bitácora=2) Tamaño del fragmento=4096 (bitácora=2) Stride=0 blocks, Stripe width=0 blocks 241920 nodos-i, 965908 bloques 48295 bloques (5.00%) reservados para el superusuario Primer bloque de datos=0 Número máximo de bloques del sistema de ficheros=989855744 30 bloque de grupos 32768 bloques por grupo, 32768 fragmentos por grupo 8064 nodos-i por grupo Respaldo del superbloque guardado en los bloques: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Escribiendo las tablas de nodos-i: hecho Creating journal (16384 blocks): hecho Escribiendo superbloques y la información contable del sistema de ficheros: hecho Este sistema de ficheros se revisará automáticamente cada 37 montajes o 180 días, lo que suceda primero. Utilice tune2fs -c o -i para cambiarlo.
Con esto ya tienes lista la tarjeta microSD para arrancar el IGEPv2.
= Trabajo pendiente =
En la partición 'boot' hay que copiar 3 ficheros:
- MLO: el binario del x-loader
- igep.ini: un fichero de configuración proporcionado por ISEE
- zImage: la imagen del kernel que deseamos arrancar.
- El rootfs descomprimido (aplicaciones del userspace).