SO Destacado: ODROID GameStation Turbo

Uno de los proyectos más destacados en los que estoy trabajando para la comunidad ODROID es la imagen ODROID GameStation Turbo, que funciona como interfaz para juegos y reproducción multimedia. Está pensada para ser un sistema de entretenimiento que te permita controlar tu ODROID con solo usar un mando de juegos sin tener que tocar el teclado para ver películas, escuchar música o jugar a tus juegos favoritos. Para comprender mejor la posible utilidad de la imagen, quisiera proporcionarte una visión interna de cómo llegue a crear la imagen, qué me motivo a hacerla y cómo puedes adaptarla para satisfacer tus propias necesidades.

Motivación

El primer dispositivo basados en tecnología ARM que tuve en cuenta fue en realidad Open Pandora, pero cuando estuve listo para comprar uno, no estaba disponible. No obstante, incluso cuando volvió a estar disponible, era tan caro que no me lo podía permitir. Finalmente, cuando logré reunir el suficiente dinero, me volví un poco escéptico y decidí buscar otras opciones. La placa Pandora es un dispositivo con un único núcleo ARM de solo 1GHz y con tan solo 512MB de RAM por 700$, ¿Realmente merece la pena? Bueno, aunque la comunidad era y sigue siendo tremenda, y es un dispositivo totalmente portátil (como una Nintendo DS), en mi opinión, era demasiado caro para lo que podía hacer. En ese momento, había mejores dispositivos disponibles, incluido el ODROID. Después de ver el ODROID-X2 en un artículo en una página alemana de noticias TI, realmente me enganchó. Cuando se anunció Ubuntu para ODROID, me compré un X2. Sin embargo, para lo que quería Pandora que era para ejecutar juegos, ODROID no tenía demasiados juegos por aquel entonces (2012). A medida que mis sobrinos se hacían mayores, pensé que podría hacer algo realmente bueno para ellos que evolucionase con ellos a medida que se hacían mayores. En primer lugar, el ODROID podría ser una consola que ejecutase juegos y más tarde funcionar como un PC para hacer tareas escolares y aprender Linux. Básicamente este fue mi objetivo y motivación para crear la imagen.

Pasos hacia el éxito

El primer paso para lograr mi objetivo era generar contenido, de modo que tuve que exportar muchos juegos y emuladores a ODROID. Si echas un vistazo a la sección de Ubuntu (All Linuxes) de ODROID Forum, encontrarás allí muchos juegos y programas que he exportado por mi cuenta. Me supuso bastante esfuerzo, ya que pasé de no saber prácticamente nada sobre como exportar juegos y compilar software en Linux a tener amplios conocimientos de ello. ODROID fue de gran ayuda a la hora de aprender nuevas habilidades y mejorar aprendiendo con este tipo de cosas. Ahora, sé cómo optimizar ciertos programas, cómo aplicar diferentes indicadores de optimización y cuándo son necesarios aplicar esos indicadores. Aprendí más sobre cómo funcionan las CPU ARM y, especialmente, sobre los diferentes hardware de las placas de Hardkernel. Mi primer proyecto fue exportar muchos juegos y compilar también algunos emuladores. Si ha leído mis artículos publicados en anteriores números de ODROID Magazine, encontrarás mucha información sobre qué juegos pueden ejecutarse realmente en ODROID, la lista sigue creciendo. El siguiente gran paso fue hacer que fuese sencillo, incluso para niños, usar y trabajar con Linux y jugar a juegos. Empecé a montar Gamestation Turbo partiendo de la imagen Linaro Ubuntu 12.04. La escogí sobre el resto de imágenes de sistemas operativos porque incorporaba Unity Desktop. Unity es fácil de usar y entender incluso para personas que nunca antes hayan usado Linux. Puede que no sea el mejor entorno de escritorio para todas las aplicaciones, pero es colorido y fácil de manejar. Para alguien que nunca haya usado Linux antes, es una muy buena forma de empezar con Linux. Lo primero que aborde fue intentar hacer que los programas fueran lo suficientemente fáciles de ejecutar en todo el sistema. Proporcioné a todas las aplicaciones y juegos que creé un archivo de icono .desktop, para que puedas localizarlo en Unity o simplemente colocar un acceso directo en el escritorio. Esto funcionaba muy bien con los juegos, pero no para los emuladores, ya que los emuladores normalmente usan su propia interfaz de administrador de archivos para cargar los ROM. Aunque los adultos podrían ser capaces de iniciar manualmente todos los juegos, los niños no tendrán ni idea de lo que significaría determinadas expresiones, y resultaba un tanto complicado ver qué juegos están disponibles o qué buscar en Unity. Inmediatamente me quedó claro que necesitaba algún tipo de interfaz para iniciar los juegos. Ya había usado XBMC en una PC antiguo que funcionaba como PC de cine en Casa (HTPC), y posteriormente descubrí un buen complemento XBMC llamado Rom Collection Browser (RCB). RCB te permite organizar las ROM del emulador de la misma forma que organizas tu colección de videos. Incluso puede descargar imágenes de vista previa y portadas, y proporcionar una breve descripción de los juegos, algo similar a los servicios de video para las películas.

Figure 1 - Rom Collection Browser in ODROID GameStation Turbo
Figura 1 - Rom Collection Browser en ODROID GameStation Turbo

Sabiendo esto, me surgió la idea de utilizar XBMC como frontend y configurarlo para que los niños jugaran y se divirtieran o, mejor dicho, configurarlo de forma que incluso un niño pudiera jugar con él. Por aquel entonces, la reproducción de video y XBMC acelerados por hardware estaban fuera de onda ya que su desarrollo aún no se había completado. La versión XBMC que venía con Ubuntu 12.04 era XBMC 11 (Eden), que funcionaba, pero no muy rápido debido a la descodificación por software. Aunque el menú funcionaba sin problemas, la reproducción de video no era muy fluida. Aun así, funcionaba lo suficientemente bien como para poder probar Rom Collection Browser, y comencé experimentar como configurarlo todo. Cuando salió la primera imagen de XBMC 12 (Frodo) para ODROID, todavía no era compatible con la reproducción de películas acelerada por hardware, pero sí que soportaba OpenGL ES 2. Las cosas se volvieron un tanto difíciles llegado a este punto, ya que la compilación del código fuente de XBMC de Hardkernel no me funcionaba en mi caso, la versión que ofrecían no tenía soporte para joystick, lo cual era algo que consideraba crucial en mis planes. Decidí que, ya que estaba pensada para ser una plataforma de juegos, la reproducción de video no iba ser una característica tan importante, aun así, podía reproducir sin problemas todo lo que no era HD, siempre y cuando fuese 720p o menos. A los niños, normalmente no les importa demasiado si su anime o historieta favorita está en HD o solo en SD. Pues bien, fue en ese momento cuando se lanzó una imagen de XBMC acelerada por hardware que funcionaba, y fui capaz de reconstruir la imagen con el soporte de joystick necesario. Poco antes de lanzar la primera versión de GameStation Turbo, me pase a una versión XBMC completamente funcional.

Componentes que fueron incluidos

Después de decidir cómo debería funcionar la imagen, era importante unir todas las piezas pequeñas en una imagen muy bien empaquetada, y para ello, se necesitaba realizar algunas tareas y contar con diferentes tipos de programas para lograr lo que realmente quería hacer. La máxima prioridad la tenía el sistema operativo, tenía que ser muy estable, fácil de mantener y disponer de una interfaz que le fuese familiar a muchas personas. Las únicas alternativas eran Ubuntu 12.04 y Debian Wheezy. Cualquier otra imagen o era inestable (Debian Jessie / Sid) o tenía soporte por poco tiempo (Ubuntu 13.04 o la recién lanzado 13.10). Ubuntu 12.04 es una versión LTS que dispone de soporte hasta 2017, lo cual siempre es bueno, sin embargo, Debian Wheezy tenía mejor rendimiento que Ubuntu 12.04. También descubrí mientras desarrollaba Debian Wheezy que los programas tenían más posibilidades de ejecutarse en Ubuntu 12.04 y versiones posteriores sin ningún problema, pero no al revés. Así que, decidí usar Debian Wheezy y LXDE, que usa menos de 150 MB de RAM incluso con XBMC y un par de programas ejecutándose. Después de esto, era cuestión de reunir el tipo de software adecuado para convertir el ODROID en una máquina de juegos.

Rom Collection Browser

Utilicé Rom Collection Browser como base para instalar diferentes tipos de emuladores como Retoarch, Mednafen, PPSSPP y ScummVM. Una vez completada la configuración básica, resultó que no todo funcionaba con un gamepad con simplemente conectarlo, así que decidí incluir antimicro, que es capaz de asignar determinadas teclas a los botones del joystick con el fin de cubrir las lagunas donde los drivers del joystick no funcionaban. También mantengo mis propias compilaciones del kernel e incluyo los archivos cabecera, ya que algunas partes del núcleo proporcionadas por Hardkernel no satisfacían mis necesidades, no estando incluidos los archivos cabecera. Además de esto, había una enorme diferencia de espacio entre los módulos del kernel de hardkernel y el que yo produje. El tamaño de la compilación de Hardkernel era de más de 300 MB, pero la mío era tan solo 16 MB, que simplemente se lograba depurando los módulos. Mis scripts también permiten a los usuarios instalar o desinstalar paquetes del kernel, en lugar de simplemente copiar el kernel directamente sobre los archivos existentes.

Complicaciones

El mayor problema con el que me encontré fue el de lograr que todas las piezas funcionasen en conjunto, y facilitar a la gente el uso de la imagen, incluso si no tienen conocimientos de cómo configura las cosas. El Rom Collection Browser era un tanto difícil de usar para un principiante, ya que tenías que elegir el emulador, poner en marcha los parámetros y proporcionar la extensión estándar de los archivos ROM para configurarlo y ejecutarlo. Así que tuve que idear un sistema que facilitase al usuario esta cuestión. Había otro problema. Quería tener el control total de Joystick (GamePad), pero algunos emuladores necesitaban además otras teclas, como Retroarch y Mednafen que requerían la tecla ESC para finalizar el juego actual y volver a XBMC, y también los juegos MAME que necesitaban introducir un "OK" para continuar.

Configuración

Un problema con la pre-configuración del Rom Collection Browser era que necesita la ruta completa del lugar donde se encuentran el emulador y las ROM, y qué extensión de archivo se utiliza para buscar las ROMs. Esto puede ser bastante complicado para alguien que nunca ha trabajado con Rom Collection Browser. Es por eso que pre-seleccioné el emulador y los juegos, y creé una estructura de carpetas donde deberían colocarse las ROM, para que Rom Collection Browser pudiera localizar los juegos. Se pueden agregar emuladores adicionales presionando la tecla C dentro de Rom Collection Browser y seleccionando "Add a new ROM collection". Se debe indicar la ruta del emulador, la ruta de las ROMs, la ruta donde se debe almacenar la información, las imágenes y la extensión de las ROMs para poder localizarlas El archivo de configuración de ROM Collection Browser se almacena en

/home/odroid/.xbmc/userdata/addon_data/script.game.rom.collection.browser/config.xml
Al editar este archivo, también puedes cambiar otras opciones, como si se debe extraer un archivo .zip en una carpeta temporal y si se debe buscar una ROM dentro de un archivo .zip (que, por ejemplo, debe desactivarse para los juegos MAME). Si tienes suficiente experiencia, incluso puedes añadir nuevas colecciones directamente en este archivo.

Iniciando un emulador

Aunque iniciar una ROM directamente a través del emulador sin duda alguna funciona, tiene un par de desventajas. En primer lugar, XBMC seguirá ejecutándose en segundo plano utilizando algunos recursos que podrían ser necesarios para mejorar la experiencia de juego. En segundo lugar, como he mencionado anteriormente, algunos emuladores necesitan teclas adicionales que no están asignadas a los botones. Si usa un joystick que no es compatible, necesitas antimicro para mapear los botones. Si es así, debes asegurarte de que el antimicro se inicia cuando realmente lo necesites, lo que podría no ser tan siempre como parece. Iniciar directamente antimicro junto con el emulador tampoco funciona. Para resolver estos y otros problemas, dejé que XBMC ejecutara un pequeño script en lugar de iniciar directamente el emulador. En ese script, se inicia el emulador, que luego ejecuta el archivo ROM que es ofrecido al script como un parámetro de línea de comandos desde XBMC. De esta forma, puedo definir los diferentes pasos que me aseguren que el emulador se ejecutará de la mejor forma posible.

Example: running an SNES game with Retroarch:
#!/bin/sh
/usr/bin/killall -STOP xbmc.bin
if [ `ps aux | grep antimicro | grep -v grep | wc -l` -lt 1 ]; then
antimicro --tray --profile /home/odroid/joydev.xml &
else
/usr/bin/killall -CONT antimicro
fi
/usr/local/bin/retroarch -L /usr/local/share/retroarch/cores/working/snes9x_next_libretro.so "$1"
/usr/bin/killall -CONT xbmc.bin
/usr/bin/killall -STOP antimicro
Si analizas el código anterior, podrás ver que XBMC está configurado para que entre en modo suspensión, lo cual significa que no usará capacidad de procesamiento alguna mientras ejecutamos nuestro emulador. Después de esto, realizo una comprobación para ver si se está ejecutando antimicro y, o bien lo cargo con el archivo de perfil requerido, o lo reanudo en caso de que todavía esté en ejecución. A continuación, llamo al emulador en sí. Aquí puedo pasar parámetros de comando que me permiten configurar el emulador. Una vez que finalice el emulador al salir del mismo, se reanuda XBMC y se suspende antimicro. Justo después de que el script complete todo el proceso, el control vuelve a XBMC. Esto nos permite realizar algunos trabajos de limpieza que quizás sean necesarios. Escribí varios scripts para poder adaptarme a las diferentes circunstancias. Por ejemplo, el script ScummVM y Amiga es un poco más complicado; pero en general es más o menos lo mismo.

  • Suspende los procesos que no necesitas (por ejemplo, XBMC)
  • Configura tu entorno preparando el sistema con las cosas que necesitas (por ejemplo, cargar antimicro con el perfil correcto)
  • Llama al emulador y le proporcionamos los parámetros que crees que vas a necesitar. El "$1" representa el archivo ROM que XBMC pasa como parámetro.
  • Realiza un trabajo de limpieza y reanuda los procesos que suspendiste anteriormente

Todos los scripts que utilicé para iniciar los emuladores se encuentran en /usr/local/bin/, donde puedes revisar, mejorar o añadir tus propios scripts.

FAQ

De vez en cuando, recibo algunas preguntas sobre mi imagen que me gustaría responder a continuación a modo de Preguntas frecuentes.

¿Dónde tengo que poner los archivos ROM para mis juegos? Dirígete a /home/odroid/ROMS, donde encontrarás una estructura de carpetas ya creada para cada tipo de ROM que quieras ejecutar, como GBA y SNES. Consulta el post del foro http://bit.ly/1nVvQqz para obtener más detalles sobre qué extensiones de archivos son compatibles.

¿Hay alguna forma de cargar ROM desde un almacenamiento externo? Copia los contenidos de /home/odroid/ROMS al dispositivo de almacenamiento externo y luego monta automáticamente el dispositivo externo en /home/odroid/ROMS agregándolo a /etc/fstab o usando /etc/rc.local para hacerlo permanente.

¿Qué joystick/gamepad son compatibles? Creé la imagen para utilizarla con un mando inalámbrico Xbox 360 y un receptor USB inalámbrico Xbox 360. De modo que, si tiene este hardware, la imagen debería funcionar de tirón sin tener que hacer ninguna modificación, a menos que haya olvidado algo. Además, cualquier joystick/gamepad compatible con Linux debería funcionar también, pero tendrás que adaptar la configuración a tu dispositivo. Por lo tanto, deberás cambiar la configuración del joystick en los emuladores de forma individual. Al ejecutar Mednafen, puedes simplemente presionar ALT + MAYÚS + 1 para configurar los controles de tu dispositivo. El programa de configuración es fácil de entender. El segundo jugador, si lo soporta el emulador, se puede configurar con ALT + MAYÚS + 2, y así sucesivamente. Para Retroarch, es un poco más complicado. Salte de XBMC, abre un terminal y escribe retroarch-joyconfig, luego sigue las instrucciones de la pantalla. Al final, obtendrás una larga lista de parámetros de configuración en la ventana de Terminal. Copia esta lista, luego abre el archivo /home/odroid/.config/retroarch/retroarch.cfg, donde encontrarás los mismos parámetros de la lista. Reemplaza los parámetros existentes con los que obtuviste con retroach-joyconfig, y tu dispositivo debería funcionar en retroarch.

Desafortunadamente, XBMC no admite muchos dispositivos con soporte de joystick. Aunque los mandos de la Xbox 360 funcionan muy bien, otros simplemente no hacen nada. Con PPSSPP, puedes cambiar la configuración del mando dentro del emulador simplemente dirigiéndote al menú. Sin embargo, en PPSSPP, la forma en que se implementan los mandos es bastante lenta, de modo que sólo unos cuantos llegan a funcionar realmente bien. En el peor de los casos, ya no puedrás usar el teclado puesto que la configuración del mando no te permitirá presionar ciertas teclas de dirección. Si esto te sucede, elimina el archivo /home/odroid/.config/ppsspp/PSP/SYSTEM/controls.ini y empieza de nuevo. Si todo lo demás falla, elimina todas las asignaciones para el mando y mantén la configuración solo para el Teclado, que siempre debería funcionar. A continuación, le toca el turno a tu mejor amigo, ¡antimicro! Si usas un dispositivo de joystick diferente y realmente tiene problemas para hacerlo funcionar con PPSSPP o XBMC, Antimicro te servirá de mucha ayuda. Usando antimicro, puedes asignar los comandos del teclado a un botón de tu gamepad/joystick de la misma forma que simplemente podías asignar las teclas de dirección del teclado a tus gamepads.

¿La imagen es compatible con CEC? En principio No. La imagen tiene libcec instalado, que funciona en HDMI 1, pero eliminé CEC de la imagen XBMC porque causaba problemas. Sin embargo, puedes instalar XBMC con soporte CEC si lo deseas desde mi repositorio http://oph.mdrjr.net/meveric/.

Cuando salgo de un emulador, la ventana del XBMC es rmuy pequeña, ¿cómo puedo solucionar esto? Si sales del XBMC y lo reinicia nuevamente, volverá a la pantalla completa. Te aconsejería "maximizar" la ventana del XBMC de todos modos para que te sea más fácil seleccionar las opciones.

¿Hay algún entorno aparte del XBMC en la imagen? Sí, detrás de XBMC existe una completa distribución de Debian con LXDE. Esto significa que puede instalar todo lo que quieras en la imagen que esté disponible desde el repositorio de Debian, y mucho más. También puede hacer todo lo que sueles hacer en las imágenes de Ubuntu, como navegar por internet, editar documentos y diseñar elementos gráficos.

¿En el que estado está el rendimiento del XBMC y el 3D? ODROID GameStation Turbo utiliza los últimos drivers Mali (r4p0) proporcionados por Hardkernel, junto con los nuevos drivers framebuffer de armsoc y parches de Xorg que ofrecen muy buen rendimiento. El programa para pruebas de rendimiento es2gears se ejecuta con más de 250 fps, y glmark2-es2 se ejecuta a más de 90 fps. XBMC funciona a toda velocidad con 60 fps y admite reproducción 1080p de películas h.264. Incluso permite vsync en la reproducción de películas y cambiará la frecuencia de tu televisor para que coincida con la tasa de frames de las películas. Al hacerlo, usa muy poca CPU y RAM y tiene mejor rendimiento que la imagen original Lubuntu 13.10 que publiqué anteriormente.

Be the first to comment

Leave a Reply