33
Bring your favorite modern game titles from your office to your living room Juega y Disfruta usando ODROID-C2 y GameStream ODROID Magazine ODROID Magazine Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar Android Llévate tus modernos juegos favoritos de tu despacho a tu salón Juega y Disfruta usando ODROID-C2 y GameStream • Monitoriza en Remoto Registros Modbus usando un ODROID-XU4 • Dispositivo IoT y Aplicación ODROID: Sistema de Aviso Mecánico Gmail Año Tres Num. #34 Oct 2016

Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Bring your favorite modern game titles from your office to your living room

Juega y Disfruta usando ODROID-C2 y

GameStream

ODROIDMagazine

ODROIDMagazine

Juegos LinuxAndroid bull Gentoo para ODROID-C2 bull Compilar Android

Lleacutevate tus modernos juegos favoritos de tu despacho a tu saloacuten

Juega y Disfruta usando ODROID-C2 y

GameStreambull Monitoriza en Remoto Registros Modbus usando un ODROID-XU4

bull Dispositivo IoT y Aplicacioacuten ODROID

Sistema de Aviso Mecaacutenico Gmail

Antildeo TresNum 34Oct 2016

Queacute defendemosNos esmeramos en presentar una tecnologiacutea punta futura joven teacutecnica y para la sociedad de hoy

Nuestra filosofiacutea se basa en los desarrolladores Con-tinuamente nos esforzamos por mantener estrechas relaciones con eacutestos en todo el mundo

Por eso siempre podraacutes confiar en la calidad yexperiencia que representa la marca distintiva de nuestros productos

Simple moderno y uacutenicoDe modo que tienes a tu alcance lo mejorpara hacer todo lo que imagines

Realizamos envios de ODROID-C2and ODROID-XU4 a los paiacuteses de la UE Ven y visita nuestra tienda online

Direccioacuten Max-Pollin-Straszlige 1 85104 Pfoumlrring Alemania

Teleacutefono amp Faxtelf +49 (0) 8403 920-920email servicepollinde

Nuestros productos ODROID se pueden encon-trar en httpbitly1tXPXwe

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Aunque con los ODROIDs ya es posible jugar a miles de juegos incluyendo los que estaacuten disponibles en Play Store los juegos nativos del Linux que han sido exportados por desarrolla-

dores y juegos emulados usando RetroArch muchos de los juegos modernos todaviacutea no son capaces de funcionar de forma nativa

en la plataforma ARM Sin embargo NVIDIA ha lanzado un software que permite ejecutar juegos de uacuteltima ge-neracioacuten via streaming por red lo cual

permite que los ODROIDs puedan trabajar como estaciones de juegos remotas Esto

nos da la posibilidad de ejecutar un servidor de juego en casa y jugar a los mejores juegos en cual-

quier lugar de la casa sobre un gran monitorTambieacuten contamos con un par de proyectos de bricolaje este mes

incluyendo un proyecto de IoT de Miltiadis que levanta una bandera cuando llega un correo electroacutenico Adrian nos muestra coacutemo configurar una caacutemara IP Joel nos describe su configuracioacuten sobre automatizacioacuten industrial y Bo documenta su buacutesqueda sobre la mejor configuracioacuten de refrigeracioacuten para el ODROID-XU4 Si quieres tener un con-trol completo sobre su sistema operativo disponemos de instrucciones para compilar tanto Gentoo y Android Lollipop Tambieacuten contamos con el anaacutelisis de algunos de nuestros juegos favoritos de Android y Linux

Manuel Adamuz Editor EspantildeolTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Editor ArtiacutesticoSoy una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrategias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Gestiono muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maqu-etacioacuten DVD Tengo un ODROID-U3 que utilizo para ejecutar un servidor web sandbox Vivo en el aacuterea de la Bahiacutea de California y disfruta haciendo senderismo acampada y tocando muacutesica Visita mi web httpwww

nicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SenioriquestEs GameStream el Santo Grial al que Bruno siempre deseaba jugar con sus juegos favoritos de PC en el saloacuten de su

casa cuando su esposa se largaba a su laboratorio de disentildeo Tal vez Simplemente no le diraacute que estaacute pensando en compra un nuevo ordenador soacutelo para jugar a los juegos Despueacutes de todo ya estaacute luchando para hacer que todos sus dispositivos electroacutenicos puedan adaptarse a su apartamento asiacute que evita la llamada incesante de reunirse con la iexclRAZA SUPERIOR DE

JUGADORES DE PC

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

cOmpilAr ANdrOid - 26

refrigerAciON eN OdrOid-xu4- 18

juegOs ANdrOid ulTimATe briefcAse - 19

juegOs liNux - 24

juegOs NvidiA viA sTreAmiNg - 22

geNTOO pArA OdrOid-c2 - 29

juegOs ANdrOid reAper - 28

cAAmArA ip - 12

AuTOmATizAciON iNdusTriAl - 20

sisTemA de AvisO mecANicO- 6

cONOcieNdO A uN OdrOidiAN - 32

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 2: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Queacute defendemosNos esmeramos en presentar una tecnologiacutea punta futura joven teacutecnica y para la sociedad de hoy

Nuestra filosofiacutea se basa en los desarrolladores Con-tinuamente nos esforzamos por mantener estrechas relaciones con eacutestos en todo el mundo

Por eso siempre podraacutes confiar en la calidad yexperiencia que representa la marca distintiva de nuestros productos

Simple moderno y uacutenicoDe modo que tienes a tu alcance lo mejorpara hacer todo lo que imagines

Realizamos envios de ODROID-C2and ODROID-XU4 a los paiacuteses de la UE Ven y visita nuestra tienda online

Direccioacuten Max-Pollin-Straszlige 1 85104 Pfoumlrring Alemania

Teleacutefono amp Faxtelf +49 (0) 8403 920-920email servicepollinde

Nuestros productos ODROID se pueden encon-trar en httpbitly1tXPXwe

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Aunque con los ODROIDs ya es posible jugar a miles de juegos incluyendo los que estaacuten disponibles en Play Store los juegos nativos del Linux que han sido exportados por desarrolla-

dores y juegos emulados usando RetroArch muchos de los juegos modernos todaviacutea no son capaces de funcionar de forma nativa

en la plataforma ARM Sin embargo NVIDIA ha lanzado un software que permite ejecutar juegos de uacuteltima ge-neracioacuten via streaming por red lo cual

permite que los ODROIDs puedan trabajar como estaciones de juegos remotas Esto

nos da la posibilidad de ejecutar un servidor de juego en casa y jugar a los mejores juegos en cual-

quier lugar de la casa sobre un gran monitorTambieacuten contamos con un par de proyectos de bricolaje este mes

incluyendo un proyecto de IoT de Miltiadis que levanta una bandera cuando llega un correo electroacutenico Adrian nos muestra coacutemo configurar una caacutemara IP Joel nos describe su configuracioacuten sobre automatizacioacuten industrial y Bo documenta su buacutesqueda sobre la mejor configuracioacuten de refrigeracioacuten para el ODROID-XU4 Si quieres tener un con-trol completo sobre su sistema operativo disponemos de instrucciones para compilar tanto Gentoo y Android Lollipop Tambieacuten contamos con el anaacutelisis de algunos de nuestros juegos favoritos de Android y Linux

Manuel Adamuz Editor EspantildeolTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Editor ArtiacutesticoSoy una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrategias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Gestiono muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maqu-etacioacuten DVD Tengo un ODROID-U3 que utilizo para ejecutar un servidor web sandbox Vivo en el aacuterea de la Bahiacutea de California y disfruta haciendo senderismo acampada y tocando muacutesica Visita mi web httpwww

nicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SenioriquestEs GameStream el Santo Grial al que Bruno siempre deseaba jugar con sus juegos favoritos de PC en el saloacuten de su

casa cuando su esposa se largaba a su laboratorio de disentildeo Tal vez Simplemente no le diraacute que estaacute pensando en compra un nuevo ordenador soacutelo para jugar a los juegos Despueacutes de todo ya estaacute luchando para hacer que todos sus dispositivos electroacutenicos puedan adaptarse a su apartamento asiacute que evita la llamada incesante de reunirse con la iexclRAZA SUPERIOR DE

JUGADORES DE PC

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

cOmpilAr ANdrOid - 26

refrigerAciON eN OdrOid-xu4- 18

juegOs ANdrOid ulTimATe briefcAse - 19

juegOs liNux - 24

juegOs NvidiA viA sTreAmiNg - 22

geNTOO pArA OdrOid-c2 - 29

juegOs ANdrOid reAper - 28

cAAmArA ip - 12

AuTOmATizAciON iNdusTriAl - 20

sisTemA de AvisO mecANicO- 6

cONOcieNdO A uN OdrOidiAN - 32

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 3: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

EDITORIAL

ODROID Magazine que se publica mensualmente en httpmagazineodroidcom es la fuente de todas las cosas ODROIDianas bull Hard Kernel Ltd bull 704 Anyang K-Center Gwanyang Dongan Anyang Gyeonggi South Korea 431-815 bull fabricantes de la familia ODROID de placas de desarrollo quad-core y la primera arquitectura ARM ldquobigLITTLErdquo del mundo basada en una uacutenica placa Para informacioacuten sobre coacutemo enviar articulos contacta con odroidmagazinegmailcom o visita httpbitly1ypImXsUacutenete a la comunidad ODROID con miembros en maacutes de 135 paiacuteses en httpforumodroidcom y explora las nuevas tecnologiacuteas que te ofrece Hardkernel en httpwwwhardkernelcom

Aunque con los ODROIDs ya es posible jugar a miles de juegos incluyendo los que estaacuten disponibles en Play Store los juegos nativos del Linux que han sido exportados por desarrolla-

dores y juegos emulados usando RetroArch muchos de los juegos modernos todaviacutea no son capaces de funcionar de forma nativa

en la plataforma ARM Sin embargo NVIDIA ha lanzado un software que permite ejecutar juegos de uacuteltima ge-neracioacuten via streaming por red lo cual

permite que los ODROIDs puedan trabajar como estaciones de juegos remotas Esto

nos da la posibilidad de ejecutar un servidor de juego en casa y jugar a los mejores juegos en cual-

quier lugar de la casa sobre un gran monitorTambieacuten contamos con un par de proyectos de bricolaje este mes

incluyendo un proyecto de IoT de Miltiadis que levanta una bandera cuando llega un correo electroacutenico Adrian nos muestra coacutemo configurar una caacutemara IP Joel nos describe su configuracioacuten sobre automatizacioacuten industrial y Bo documenta su buacutesqueda sobre la mejor configuracioacuten de refrigeracioacuten para el ODROID-XU4 Si quieres tener un con-trol completo sobre su sistema operativo disponemos de instrucciones para compilar tanto Gentoo y Android Lollipop Tambieacuten contamos con el anaacutelisis de algunos de nuestros juegos favoritos de Android y Linux

Manuel Adamuz Editor EspantildeolTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Editor ArtiacutesticoSoy una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrategias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Gestiono muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maqu-etacioacuten DVD Tengo un ODROID-U3 que utilizo para ejecutar un servidor web sandbox Vivo en el aacuterea de la Bahiacutea de California y disfruta haciendo senderismo acampada y tocando muacutesica Visita mi web httpwww

nicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SenioriquestEs GameStream el Santo Grial al que Bruno siempre deseaba jugar con sus juegos favoritos de PC en el saloacuten de su

casa cuando su esposa se largaba a su laboratorio de disentildeo Tal vez Simplemente no le diraacute que estaacute pensando en compra un nuevo ordenador soacutelo para jugar a los juegos Despueacutes de todo ya estaacute luchando para hacer que todos sus dispositivos electroacutenicos puedan adaptarse a su apartamento asiacute que evita la llamada incesante de reunirse con la iexclRAZA SUPERIOR DE

JUGADORES DE PC

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

cOmpilAr ANdrOid - 26

refrigerAciON eN OdrOid-xu4- 18

juegOs ANdrOid ulTimATe briefcAse - 19

juegOs liNux - 24

juegOs NvidiA viA sTreAmiNg - 22

geNTOO pArA OdrOid-c2 - 29

juegOs ANdrOid reAper - 28

cAAmArA ip - 12

AuTOmATizAciON iNdusTriAl - 20

sisTemA de AvisO mecANicO- 6

cONOcieNdO A uN OdrOidiAN - 32

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 4: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Manuel Adamuz Editor EspantildeolTengo 31 antildeos y vivo en Sevilla Espantildea aunque naciacute en Granada Estoy casado con una mujer maravillosa y tengo un hijo Hace unos antildeos trabajeacute como teacutecnico informaacutetico y programador pero mi trabajo actual estaacute relacionado con la gestioacuten de calidad y las tecnologiacuteas de la informacioacuten ISO 9001 ISO 27001 ISO 20000 Soy un apasionado de la informaacutetica especialmente de los microordenadores como el ODROID Raspberry Pi etc Me encanta experimentar

con estos equipos y traducir ODROID Magazine Mi esposa dice que estoy loco porque soacutelo pienso en ODROID Mi otra aficioacuten es la bicicleta de montantildea a veces participo en competiciones semiprofesionales

Andrew Ruggeri Editor AdjuntoSoy un ingeniero de sistemas Biomeacutedicos anclado en Nueva Inglaterra que actualmente trabaja en la industria aeroespacial Un microcontrolador 68HC11 de 8 bits y el coacutedigo ensamblador son todo lo que me interesa de los sistemas embebidos Hoy en diacutea la mayoriacutea de los proyectos en los que trabajo estaacuten en lenguajes C y C ++ o en len-guajes de alto nivel como C y Java Para muchos proyectos utilizo placas ODROID pero auacuten sigo intentando utili-zar los controladores de 8 bits cada vez que puedo (soy un fan de ATMEL) Aparte de la electroacutenica soy un amante de

la fotografiacutea analoacutegica y desarrollo la peliacutecula friki con la que disfruto intentando hablar en idiomas extranjeros

Venkat Bommakanti Editor AdjuntoSoy un apasionado de los ordenadores desde la bahiacutea de San Francisco en California Procuro incorporar muchos de mis intereses en proyectos con ordenadores de placa reducida tales como pequentildeos modificaciones de hardware carpinteriacutea reutilizacioacuten de materiales desarrollo de software y creacioacuten de grabaciones musicales de aficionados Me encanta aprender continuamente cosas nuevas y trato de compartir mi alegriacutea y entusiasmo con la comunidad

Josh Sherman Editor AdjuntoSoy de la zona de Nueva York y ofrezco mi tiempo como escritor y editor para ODROID Magazine Suelo experi-mentar con los ordenadores de todas las formas y tamantildeos haciendo trizas las tablets convirtiendo Raspberry Pi en PlayStations y experimentado con los ODROIDs y otros SoCs Me encanta trabajar con los elementos baacutesicos y asiacute poder aprender maacutes y disfrutar ensentildeando a otros escribiendo historias y guiacuteas sobre Linux ARM y otros proyectos experimentales divertidos

Nicole Scott Editor ArtiacutesticoSoy una experta en Produccioacuten Transmedia y Estrategia Digital especializa en la optimizacioacuten online y estrategias de marketing administracioacuten de medios sociales y produccioacuten multimedia impresa web viacutedeo y cine Gestiono muacuteltiples cuentas con agencias y productores de cine desde Analytics y Adwords a la edicioacuten de viacutedeo y maqu-etacioacuten DVD Tengo un ODROID-U3 que utilizo para ejecutar un servidor web sandbox Vivo en el aacuterea de la Bahiacutea de California y disfruta haciendo senderismo acampada y tocando muacutesica Visita mi web httpwww

nicolecscottcom

James LeFevour Editor ArtiacutesticoSoy un especialista en medios digitales que disfruta trabajando como freelance en marketing de redes sociales y admin-istracioacuten de sitios web Cuanto maacutes aprendo sobre las posibilidades de ODROID maacutes me ilusiona probar cosas nuevas con eacutel Me traslade a San Diego desde el Medio Oeste de los EEUU Continuo muy enamorado de muchos de los aspectos que la mayoriacutea de la gente de la Costa Oeste ya da por sentado Vivo con mi encantadora esposa y nuestro

adorable conejo mascota el cual mantiene mis libros y material informaacutetico en constante peligro

Bruno Doiche Editor Artiacutestico SenioriquestEs GameStream el Santo Grial al que Bruno siempre deseaba jugar con sus juegos favoritos de PC en el saloacuten de su

casa cuando su esposa se largaba a su laboratorio de disentildeo Tal vez Simplemente no le diraacute que estaacute pensando en compra un nuevo ordenador soacutelo para jugar a los juegos Despueacutes de todo ya estaacute luchando para hacer que todos sus dispositivos electroacutenicos puedan adaptarse a su apartamento asiacute que evita la llamada incesante de reunirse con la iexclRAZA SUPERIOR DE

JUGADORES DE PC

NUESTRO MARAVILLOSO PRESONAL ODROIDIAN

Rob Roy Editor JefeSoy un programador informaacutetico que vive y trabaja en San Francisco CA en el disentildeo y desarrollo de aplicaciones web para clients locales sobre mi cluster ODROID Mis principales lenguajes son jQuery angular JS y HTML5CSS3 Tambieacuten desarrollo SO precompilados Kernels personalizados y aplicaciones optimizadas para ODROID basadas en las versiones oficiales de Hardkernel por los cuales he ganado varios Premios Utilizo mi ODROIDs para diversos

fines como centro multimedia servidor web desarrollo de aplicaciones estacioacuten de trabajo y como plataforma de juegos Puedes echar un vistazo a mi coleccioacuten de 100 GB de software ODROID kernel precompilados e imaacutegenes en

httpbitly1fsaXQs

INDICE

cOmpilAr ANdrOid - 26

refrigerAciON eN OdrOid-xu4- 18

juegOs ANdrOid ulTimATe briefcAse - 19

juegOs liNux - 24

juegOs NvidiA viA sTreAmiNg - 22

geNTOO pArA OdrOid-c2 - 29

juegOs ANdrOid reAper - 28

cAAmArA ip - 12

AuTOmATizAciON iNdusTriAl - 20

sisTemA de AvisO mecANicO- 6

cONOcieNdO A uN OdrOidiAN - 32

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 5: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

INDICE

cOmpilAr ANdrOid - 26

refrigerAciON eN OdrOid-xu4- 18

juegOs ANdrOid ulTimATe briefcAse - 19

juegOs liNux - 24

juegOs NvidiA viA sTreAmiNg - 22

geNTOO pArA OdrOid-c2 - 29

juegOs ANdrOid reAper - 28

cAAmArA ip - 12

AuTOmATizAciON iNdusTriAl - 20

sisTemA de AvisO mecANicO- 6

cONOcieNdO A uN OdrOidiAN - 32

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 6: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AvISO MECAnICO PARA GMAILDISPOSITIvO IOT y APLICACIOn ODROID por miltiadis melissas

SISTEMA DE AVISO MECANICO

Continuando con mi uacuteltimo artiacuteculo de la edicioacuten de septiembre de ODROID Magazine titulado ldquoODROID-C2 como dispositivo IoT Comunicaacutendose con el mundo realrdquo he estado buscando una aplicacioacuten del Internet de las

cosas (IoT) que hiciera uso de un servomotor Este tutorial detalla mi proyecto servomotor un divertido proceso de construccioacuten de un dispositivo IoT que cons-tantemente chequea tu cuenta de Gmail para ver si han entrado nuevos mensajes

El dispositivo IoT utiliza un ODROID-C2 se conecta automaacuteticamente a tu cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada Si existen nuevos mensajes se enciende un LED y un sistema electroacutenico-mecaacutenico levanta una bandera en la que se puede leer ldquoYOUrsquoVE GOT MAILrdquo Cuando todos los nuevos mensajes hayan sido leiacutedos la bandera vuelve a su posicioacuten inicial y el LED se apaga Entra en mi canal de Youtube en httpbitly2bT9bMz para ver el dispositivo en funcionamiento

Requisitos del sistema

Necesitaraacutes un ODROID-C2 con la uacuteltima versioacuten 20 de Ubuntu de Hardkernel (httpbitly2cBibbk) y la versioacuten 2712 de Python instalada Los materiales adicionales incluyen

1 x c2 (Ordenador de placa reducida Arm quad core de 64 bits a 15ghz)1 x cuenta de gmail (que es gratuita)1 x placa de pruebas1 x led (diodo emitente de luz)1 x resistencia de 220 ohmios1 x servo motor (enlace)4 x pilas de 15 y por supuesto (6v)1 x conjunto de conectores

Conexiones de hardware

Por favor consulta el esquema de la Figura 3 y el excelente diagrama de distribucioacuten de pines de Hardkernel para el ODROID-C2 en httpbitly2aXAlmt El aacutenodo(+) del LED estaacute conectado al pin7 a traveacutes de una resis-tencia (220 Ω) mientras que su caacutetodo (-) se

bandera bajada - led apagado

bandera levantada ndash led encendido

ODROID MAGAZINE 6

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 7: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AVISO MECANICO

esquema del sistema de aviso gmail

conecta a la toma de tierra (pin9) Los dos pines se situacutean uno al lado del otro de acuerdo con la disposicioacuten de pines de Hardkernel

Ahora explicaremos coacutemo utilizar un servo motor para controlar la bandera El servo estaacute conectado a los pines 19 y 20 Por otro lado eacuteste necesita maacutes corri-ente de la que el ODROID-C2 puede suministrarle de modo que necesitaremos un juego de cuatro (4) pilas como fuente de alimentacioacuten adicional El servo tiene tres (3) cables amarillo rojo y marroacuten El amarillo lleva la sentildeal que es la modulacioacuten por ancho de pulsos (PWM) que se conecta al pin19 Por favor consulta de nuevo la documentacioacuten Hardkernel en httpbitly2ckfdKn para ver queacute pines pueden proporcionar ese tipo de pulsos Para la puesta a tierra (-) el servo estaacute conectado al pin20 usando el cable marroacuten Sin embargo es mejor utilizar una puesta a tierra comuacuten y dejarla desconectada ya que los pines son ac-tivos muy valiosos especialmente para los proyectos maacutes complejos Por uacuteltimo el cable rojo estaacute conectado a la bateriacutea externa en otras palabras a las cuatro pilas(+ Vcc) Por lo tanto rojo con rojo dejando el cable blanco de la bateriacutea para lo uacuteltimo para conectarlo a la puesta a tierra comuacuten con su negativo (-) El hardware del sistema de aviso mecaacutenico Gmail esta listo iexclVamos a darle vida con el script Python que escribiremos con esa in-tencioacuten

Software preliminarAntes de empezar a escribir el script Py-

thon analizaremos los sistemas operativos (SO) del ODROIDC2 Todos las placas fabricadas por Hardkernel pueden ejecutar Linux o Android y ODROID-C2 no es diferente Para el sistema de aviso mecaacutenico Gmail vamos a utilizar Linux como sistema operativo principal La razoacuten es que Linux es maacutes versaacutetil y robusto a la hora de tratar aplicaciones del Internet de las cosas (IoT) Puede grabar Linux Ubuntu 1604 Mate siguiendo la guiacutea de httpbitly1Vk9u4o

Por uacuteltimo instala la libreria WiringPi2 Esta libreriacutea controla los pines en ODROID-C2 Hardkernel proporciona una excelente guiacutea en su sitio para instalar esta libreriacutea en httpbitly2ba6h8o

Necesitaraacutes utilidades adicionales si recompilas manualmente los enlaces con swig-python WiringPi Se pueden instalar con el siguiente comando

$ sudo apt-get install python-dev python-setuptools

descargar y configura Wiringpi2 para python desde el repositorio$ git clone httpsgithubcomhardkernelWiringPi2-Pythongit

$ cd WiringPi2-Python

$ git submodule init

$ git submodule update

compila e instala la libreria$ sudo python setuppy install

ODROID MAGAZINE 7

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 8: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AVISO MECANICO

Descarga y ejecuta el coacutedigo fuente de ejemplo desde httpbitly2cKcwkd es opcional y estaacute pensado unicamente para hacer pruebas

$ wgeg httpdnodroidcomsource_peripheralsctinkeringkitexample-ledpy

$ sudo python example-ledpy

Tambieacuten puede usar un IDE Python llamado IDLE ejecutando el comando

$ sudo apt-get install idle

Software de aplicacioacutenEjecuta la utilidad IDLE y copia y pega las liacuteneas de coacutedigo que se indican a con-

tinuacioacuten Cuando hayas terminado de editar guarda el script Python con el nom-bre trace_messagespy en el directorio homeodroidDocumentsgmail_Python Si no tienes instalado IDLE puedes copiar y pegar el script en cualquier editor de tu sistema y guardarlo con el mismo nombre

Comentareacute cada liacutenea del coacutedigo para explicar lo que ocurre dentro de este scritp

pythonimport gmail wiringpi2 as wpi time import the modules

use ODROID-C2 pin numbers for LED and SERVOLED_PIN=7SERVO_PIN=12

wpiwiringPiSetup()

setup pin (LED) as an outputwpipinMode(LED_PIN1)

setup pin (SERVO) as an output toowpipinMode(SERVO_PIN1)

setup Pulse Width Modulation(PWM) for ServowpisoftPwmCreate(SERVO_PIN050)

setupg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)unread_messages = ginbox()mail(unread=True)total_messages = 0

for message in unread_messages total_messages += 1

if total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)

Este script ha sido modificado adaptado y actualizado para cubrir las necesidades de este proyecto usando httpbitly2cGSwBS como referencia La idea baacutesica sigue siendo la misma no obstante descompondremos el coacutedigo para ver lo que sucede

ltimport gmail wiringpi2 as wpi timegt import the modules

ODROID MAGAZINE 8

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 9: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AVISO MECANICO

mapa de pines gpiO del OdrOid-c2

En primer lugar importamos los moacutedulos Son tres (3) Gmail wiringpi y time Los moacutedulos en Python son pequentildeas piezas de coacutedigo escrito para una finalidad especiacutefica similares a las libreriacuteas en Arduino IDE ldquoWiringpi2rdquo es el moacutedulo que controla los pines en ODROID-C2 y es por eso que instalamos este moacutedulo an-teriormente ldquoTimerdquo es un moacutedulo integrado en Python (moacutedulo del sistema) que proporciona funciones de temporizacioacuten El moacutedulo ldquoGmailrdquo estaacute escrito por Char-lie Guo (httpbitly2bY7Vhh) y es muy importante para que nuestro proyecto funcione Para importarlo hay que instalarlo en primer lugar que no es nada difiacutecil Descarga la libreriacutea de Github (httpbitly2cC01Jb) en un directorio y extraer el contenido En el interior deberiacutea haber una carpeta llamada ldquoGmailrdquo Copia esta car-peta completa en el directorio homeodroidDocumentsgmail_python El moacutedulo es baacutesicamente un script que inicia sesioacuten en tu cuenta de Gmail con tus credencia-les y lee los mensajes entrantes

La siguiente liacutenea configura la conexioacuten para leer en el GPIO de WiringPi es la primera columna del mapa de pines GPIO de Hardkernel de la siguiente figura

ltwpiwiringPiSetup()gt

Estas dos liacuteneas de coacutedigo son muy simples definimos los pines que usaremos

ltLED_PIN=7gt

ltSERVO_PIN=12gt

Ten en cuenta que estamos haciendo referencia al pin19 que proporciona la modulacioacuten por ancho de pulsos para el servo seguacuten el pin12 Una vez maacutes esto viene dado por la disposicioacuten de los pines de Hardkernel el pin19 hace referencia al GPIO 12 de WiringPi seguacuten la tabla de Hardkernel (httpbitly2aXAlmt) El pin7 sigue siendo el pin7 en siacute mismo

ltwpipinMode(LED_PIN1)gt

Hemos configurado el pin7 para manejar el LED como salidaltwpipinMode(SERVO_PIN1)gt

Tambieacuten hacemos lo mismo con el servo declaraacutendolo como salidaltwpisoftPwmCreate(SERVO_PIN050)gt

Esta es una funcioacuten muy importante en el objeto wpi dentro del script que configura la modulacioacuten por ancho de pulsos para el servo Los argumentos son el SERVO_PIN (es decir pin12) el valor inicial (ldquo0rdquo) y el rango de modulacioacuten por ancho de pulsos (lsquo50rsquo) Para simplificar las cosas mantenemos el pulso alto de 5ms hechos de 50 pasos Por supuesto puedes experimentar con otros valores cuando esteacutes calibrando el servo El coacutedigo representa mis valores tras realizar algunas cali-braciones con el servo para alcanzar la posicioacuten correcta de la bandera

ODROID MAGAZINE 9

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 10: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AVISO MECANICO

ltg = gmaillogin(lsquoyouremailgmailcomrsquo lsquoyourpasswordrsquo)gt

Creamos el objeto ldquogrdquo y activamos al meacutetodo login basado en el moacutedulo de Gmail importado anteriormente Sustituye el correo electroacutenico y contrasentildea por tu cuenta de Gmail y contrasentildea reales dejando las comillas en su lugarltunread_messages = ginbox()mail(unread=True)gt

Recuperamos todos los mensajes no leiacutedos y los almacenamos bajo la variable ldquounread_ messagesrdquo Observa como ldquounread=Truerdquo se incluye como un paraacutemetro Puede cambiar esto para recuperar mensajes basaacutendote en diferentes paraacutemetros como el remitente o el asuntolttotal_messages = 0gt

ltfor message in unread_messages

total_messages += 1gt

Iteramos por los mensajes no leiacutedos e incrementamos la variable ldquo total_mes-sages ldquo en uno si es necesario

ltif total_messages gt 0 there are unread emails turn light on wpidigitalWrite(LED_PIN1) for i in range (15) wpisoftPwmWrite(SERVO_PINi) timesleep(02)else there are no unread emails turn light off wpidigitalWrite(LED_PIN0) for i in range (150-1) wpisoftPwmWrite(SERVO_PINi) timesleep(02)gt

Este es un condicional muy simple Si el nuacutemero de la variable ldquototal_ messag-esrdquo es mayor que cero entonces hacemos dos cosas En primer lugar encendemos el LED con la siguiente expresioacutenltwpidigitalWrite(LED_PIN1)gt

Y ahora iniciamos el servo que eleva la bandera cambiando el ciclo de trabajoltwpisoftPwmWrite(SERVO_PINi)gt

Por el contrario si no hay mensajes nuevos apagaremos el LED y bajaremos la bandera La bandera se coloca en posicioacuten horizontal cambiando el ciclo de trabajo del pulso ya que ahora contamos en sentido contrario a las ajugas del reloj dentro del mismo rango deduciendo -1 en cada ciclo Ten en cuenta el siguiente bucleltfor i in range 150-1)gt

Ejecutar el scriptAhora es el momento de ejecutar el script Abre un terminal (desde la interfaz

graacutefica de usuario ve a Applications-gt System Tools-gtMate Terminal) y escribe$ sudo python homeodroidDocuments

gmail_pythontrace_messagespy

A continuacioacuten observa lo que sucede Si entra cualquier mensaje la bandera deberaacute levantarse y el LED deberiacutea encenderse Si es asiacute iexclhemos tenido eacutexito y nuestro script funciona Si no es asiacute buscar posibles errores en tu coacutedigo Despueacutes

ODROID MAGAZINE 10

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 11: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

SISTEMA DE AVISO MECANICO

tenemos que dar un paso maacutes para hacer que se ejecute de forma automaacutetica a unos intervalos de tiempo determinados como por ejemplo cada 5 minutos Para esta tarea utilizaremos la utilidad cron iquestQueacute es cron Permite definir trabajos que son usados para programar tareas y scripts como definir etiquetas hacer copias de seguridad y activar alarmas Para obtener maacutes informacioacuten sobre cron por favor visita httpbitly2bTmNaN Para activar el cron hay que ejecutar el comando crontab que nos proporciona una lista de tareas programadas$ crontab -e ltEntergt

Probablemente estaraacute vaciacutea Elije cualquier editor de texto y antildeade la siguiente liacutenea de coacutedigo al final de la lista de tareas programadas5 sudo python homeodroidDocumentsgmail_python

trace_incomingspy

Los cinco ldquoasteriscosrdquo (ldquo rdquo) especifica la frecuencia con la que deseas que se ejecute la tarea El primera asterisco controla los minutos es por eso que pongo lsquo5rsquo ya que quiero que esta tarea programada se ejecute cada cinco minutos El segundo asterisco controla las horas el tercer especifica el diacutea del mes el cuarto indica el mes y el quinto representa el diacutea de la semana Esos cuatro se han dejado intencionalmente en blanco sin ninguacuten nuacutemero soacutelo con asteriscos Puedes experimentar con otras opcio-nes igualmente Al final de la tarea programada estaacute el comando en siacute que queremos que se ejecute de forma automaacutetica$ sudo python homeodroidDocumentsgmail_pythontrace_incomingspy

Este comando ejecuta nuestro script y apunta a la ruta en la que se encuentra que en este caso es homeodroidDocumentsgmail_python

Despueacutes guarda y cierre el editor Ahora espera y observa como la aplicacioacuten hace su trabajo Enviacutea alguacuten mensaje a tu cuenta de Gmail para comprobar si tienes alguno sin leer y ver como la bandera se levanta La bandera con ldquoYoursquove Got Mailrdquo deberiacutea elevarse al mismo tiempo que ves como se ilumina tu LED iexclFelicitaciones Tu sistema de aviso mecaacutenico para Gmail funciona

Notas finalesDebes tener en cuenta que cualquier coacutedigo Python en IDLE debe ser ejecutado

como usuario root de lo contrario no funcionaraacute Una forma muy simple de hacerlo consiste simplemente en crear un acceso directo de IDLE en el escritorio tras la ins-talacioacuten y luego editarlo con$ cd ~Desktop

$ sudo nano idledesktop

y luego cambia la liacutenea ldquo Exec=usrbinidle ldquo por ldquo Exec=usrbingksu ndashu root idle ldquo despueacutes guarda el archivo

Espero que hayas disfrutado de este proyecto tanto como lo hice yo El sistema de aviso mecaacutenico de Gmail es la segunda parte de una serie de tres proyectos que he escrito para ODROID Magazine Mi siguiente proyecto IoT utiliza un ODROID-C2 para observar y controlar la fermentacioacuten de botellas de vino en una bodega En particular la ODROID-C2 observa y controla la configuracioacuten del aire acondicionado midiendo la temperatura y la humedad del entorno de la fermentacioacuten Notificaraacute al usuario cualquier desviacioacuten de los valores aceptables a traveacutes de varios servomotores Cualquier anomaliacutea actualizaraacute la cuenta de Twitter del usuario dando la oportunidad de analizar el producto maacutes aun Como siempre digo ldquoiexclCon los ODROIDs todo es posiblerdquo

ODROID MAGAZINE 11

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 12: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

dentro de la caacutemara Este tutorial asume que dispones de una caacutemara compatible con MJPEG aunque seguro que te gustariacutea ver tambieacuten secuencias H264 en tu sistema

La utilidad v4l2-ctl te permite listar y cambiar algunos paraacutemetros de la caacutemara tales como el brillo el contraste o el gamma es uacutetil si no dispones de unas condiciones oacuteptimas de iluminacioacuten Puedes listar estos paraacutemetros con el comando

$ v4l2-ctl --list-ctrls

Si tu caacutemara no presenta un pseudo-file devvideo0 pero puedes tomar imaacutegenes con una API personalizada puedes uti-lizar v4l2loopback (httpbitly2cxa6rc) para enviar tus da-tos a un dispositivo virtual devvideoX de manera que puedas leerlos con herramientas comunes

Tomar imagenes fijasAhora que la caacutemara funciona lo primero es tomar imaacute-

genes con ella ya sea guardaacutendolas en el disco local o vieacuten-

En el uacuteltimo antildeo han aparecido artiacuteculos que detallan coacutemo configurar tu ODROID con una caacutemara web para realizar todo tipo de tareas interesantes desde la

deteccioacuten de incendios (httpbitly2cviz9K) a la realidad aumentada (httpbitly2cV74eA) incluso aplicaciones de seguridad para el hogar (httpbitly2dsqnen) En mi caso todo lo que queriacutea era una caacutemara web que funcionaba a traveacutes de Internet La tiacutepica caacutemara ip comercial te permite utilizar la caacutemara de forma remota en tiempo real con sonido a traveacutes del Protocolo de flujo en tiempo real (RTSP) Por lo general suele incorporar otras funciones como capturar imaacutegenes fijas hacer una panoraacutemica o inclinar la imagen Estas caacutemaras se suele utiliza a menudo para poner en marcha robustas aplicaciones de monitorizacioacuten del hogar como por ejemplo un DVR remoto para almacenar tus grabaciones o para facilitar el acceso remoto cuando se necesite Android tiene un montoacuten de aplicaciones que permiten gestionar todas estas cuestiones pero nosotros nos vamos a centrar en Linux ya que es posible que tambieacuten quieras utilizar tu ODROID para otras tareas basadas en Linux Al final de este artiacuteculo sabraacutes como tomar imaacutegenes desde tu caacutemara web a traveacutes de Internet ver secuencia de video en tiempo real con sonido y grabar el video

Configurar la caacutemaraLa mayoriacutea de las caacutemaras modernas son compatibles con

Linux gracias al driver geneacuterico ldquouvcrdquo El driver presenta varios dispositivos nuevos en tu maacutequina Linux cuando se conecta una caacutemara web Por ejemplo es posible que vea una inter-faz Video4Linux devvideo0 un nuevo dispositivo de entrada ALSA y tal vez un botoacuten que actuacutea como teclado HID Insta-lando el paquete v4l-utils podraacutes listar los modos compatibles con tu caacutemara Tienes un ejemplo del listado de la webcam 720p de hardkernel en httppastebincomL1VwZZFs

$ sudo apt-get install v4l-utils

$ v4l2-ctl --list-formats-ext

Si te fijas la mayoriacutea de las caacutemaras puede transmitir en YUV (modo no comprimido) con pocas imaacutegenes por segundo o en MJPEG (modo comprimido) Las caacutemaras de alta gama tam-bieacuten pueden capturar viacutedeo H264 que se codifica directamente

CAMARA IP ODROID

Hacer que una caacutemara ip funcione con tu OdrOid no tiene ciencia

COnvIERTE Tu ODROID En unA CAMARA IPpor Adrian popa

ODROID MAGAZINE 12

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 13: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

lsquooutput_httpso -p 8090 -w usrlocalsharemjpg-

streamerwww -c odroidodroidpassrsquo

Este comando es complejo de modo que vamos a explicar lo que hacen todos los paraacutemetros ldquo-irdquo especifica el plugin de entrada que es input_uvcso (grabar desde una caacutemara UVC) A continuacioacuten viene la resolucioacuten determinada por la caacutemara y ldquomrdquo especifica el tamantildeo miacutenimo de la entrada He configu-rado esto a 50 KB asiacute mjpg-streamer descartaraacute los fotogramas jpeg maacutes pequentildeos (los fotogramas de 720p tienen un tamantildeo de alrededor de 120kB) Esto es muy bueno porque a veces la caacutemara captura imaacutegenes incompletas que no son uacutetiles Sin embargo esto tiene el efecto secundario de no capturar nada en condiciones de poca luz ya que las imaacutegenes en su mayor parte son oscuras y la compresioacuten JPEG las reduce a menos de 50 KB Tendraacutes que ajustar este paraacutemetro de acuerdo con tu resolucioacuten de entrada

El paraacutemetro ldquo-nrdquo desactiva los controles dinaacutemicos en el driver UVC mientras que ldquofrdquo especifica la tasa de fotogramas de entrada ldquo-drdquo indica el dispositivo de viacutedeo (devvideo0 por defecto) Utilizamos el moacutedulo output_httpso en el puerto ldquo-prdquo 8090 y serviremos archivos HTTP desde el directorio apuntado por ldquowrdquo Se pueden antildeadir opcionalmente una con-trasentildea con el paraacutemetro ldquo-crdquo especificando la combinacioacuten nombre de usuario contrasentildea Tienes informacioacuten detallada en httpbitly2dbB97p y httpbitly2dbALWx

Una vez que se inicie con eacutexito mjpg_streamer como ser-vidor HTTP seraacutes capaz de acceder a eacutel con un navegador en httpltyourodroid- ipgt8090 Se te solicitaraacute la combinacioacuten nombre de usuariocontrasentildea y seraacutes dirigido a la paacutegina demo como se muestra la siguiente figura Puedes por supues-to crear tu propia paacutegina pero la paacutegina demo te proporciona toda la informacioacuten necesaria para acceder a la caacutemara

Puedes tomar una imagen fija desde tu ODROID con el siguiente comando

dolas de forma remota Aunque la tarea parece muy sencilla y hay varias herramientas que te pueden ayudar con ello es importante cuidar los detalles Herramientas como uvccapture o streamer pueden hacer el trabajo pero he descubierto que en la praacutectica ambas tienen algunos problemas

Al capturar una imagen se activa la caacutemara y neesita un tiempo hasta completar la captura a veces hasta 30 segundos

Las imaacutegenes desde estas herramientas generalmente son muy oscuras porque la caacutemara no ha tenido suficiente tiempo para estabilizar el nivel de iluminacioacuten Streamer puede com-pensar esto ldquograbandordquo durante un tiempo determinado por ejemplo 1 segundo antes de tomar la foto

A veces la caacutemara puede mostrar fotogramas incompletos por ejemplo que soacutelo se vea la parte superior

Ademaacutes si estaacutes utilizando la caacutemara para otra cosa como el streaming en directo o la deteccioacuten de movimiento las he-rramientas no pueden conectarse a devvideo0 para tomar imaacutegenes durante la grabacioacuten en estos casos se hace necesario el acceso muacuteltiple a la caacutemara

La herramienta perfecta tiene que tener acceso exclusivo al dispositivo de viacutedeo mientras que permite que otras herramien-tas puedan tomar imaacutegenes y viacutedeo al mismo tiempo Ademaacutes necesita mantener la caacutemara activa mientras se toman imaacutegenes para asiacute compensar el tema de la oscuridad Para miacute esta mila-grosa herramienta es mpjg-streamer (httpbitly2d2qSvQ) Para instalarla en usrlocal sigue estos pasos

$ git clone httpsgithubcom

jacksonliammjpg-streamergit

$ cd mjpg-streamer

mjpg-streamer-experimental

$ sudo apt-get install

cmake libjpeg62-dev

$ make

$ sudo make install

Lo mejor es probar mjpg-streamer antes de activarla en el inicio El programa cuenta con un nuacutemero configurable de entradas (caacutemaras) y varios ajustes de salida Puede funcionar como servidor HTTP salida para un archivo en el disco local salida como secuencia UDPRTSP En mis pruebas la funcioacuten RTSP no era estable y no funcionaba con cualquier cliente RTSP es posible que el protocolo RTSP no sea compatible con el streaming de datos MJPEG en una ejecucioacuten estaacutendar En este tutorial lo vamos a utilizarlo como servidor HTTP y uti-lizaremos otros procesos para leer desde mjpg-streamer

Para iniciar mjpg-streamer como servidor web con auten-tificacioacuten y leer desde la primera caacutemara ejecuta el comando

$ sudo usrlocalbinmjpg_streamer -i lsquoinput_uvc

so -r 1280x720 -m 50000 -n -f 25 -d devvideo0rsquo -o

CAMARA IP ODROID

interfaz web de mjpeg streamer con algunos muntildeecos moviendose

ODROID MAGAZINE 13

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 14: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Recibir viacutedeosMotion JPEG es compatible con todos los navegadores

aunque no soporta sonido y la compresioacuten es bastante deficien-te La tasa de bits de 25fps en una secuencia MJPEG a 720p ocupa unos13Mbps que puede ser alto para Internet Para conseguir videos con sonido vamos a necesitar multiplexar la secuencia MJPEG con una secuencia de sonido desde el mi-croacutefono de la caacutemara en un formato multimedia compatible

Como ya sabemos obtener la secuencia de viacutedeo vamos a centrarnos en el microacutefono Puedes listar los dispositivos actua-les soportados por ALSA con el comando ldquoarecord -Lrdquo Para la caacutemara web ODROID deberiacutea ver varias entradas relaciona-das con una caacutemara USB 20 con diversas posibilidades tal y como se muestra en la siguiente figura Necesitaremos el nom-bre para configurarla en ffmpeg maacutes adelante (en nuestro caso usaremos el uacuteltimo - plughwCARD=CameraDEV=0)

$ arecord -L

Antes de empezar a grabar tenemos que comprobar que el mi-croacutefono no estaacute en si-lencio y tiene un nivel aceptable de volutmen Me gusta mucho el mi-croacutefono de la webcam 720p de Hardkernel ya que estaacute adaptado para poder oiacuter susur-ros en una habitacioacuten con nintildeos gritando sin quedarse sordo en el proceso Para ajustar el volumen vamos a utilizar alsamixer En primer lugar presione F6 para seleccionar la tarjeta de sonido y utilizar F4 para ir a la pestantildea Capture Utiliza las teclas de flechas para ajustar el nivel de sonido (yo lo puse al maacuteximo)

$ sudo apt-get install curl

$ curl -s -f -m 5 httpodroidodroidpassodroid-

ip8090

action=snapshot gt tmpsnapshotjpeg

Puede usar esto junto con crond para capturar imaacutegenes en un intervalo de tiempo especiacutefico Tambieacuten puede utilizar la fecha de registro como nombre de archivo o utilizar una he-rramienta como montage para antildeadir el registro temporal como marca de agua en la parte superior de la imagen Aquiacute tienes un pequentildeo script que guarda fotografiacuteas en un directorio especiacutefico del disco local de tu ODROID y agrega la fecha y hora httpbitly2d2fstx Ademaacutes puede utilizar ffmpeg en un script como eacuteste para combinar todas estas imaacutegenes en un viacutedeo y asiacute facilitar su posterior visualizacioacuten httpbitly2cOzXqY

Para obtener una secuencia de viacutedeo MJPEG desde la caacutema-ra que baacutesicamente es una secuencia de imaacutegenes JPEG puedes ejecutar el siguiente comando

$ vlc httpodroidodroidpassodroid-ip8090

action=stream

Si todo va bien y estas recibiendo imagenes es el momento de antildeadir un script de inicio systemd para mjpeg_streamer Crea un archivo llamado etcsystemdsystemmjpg_streamerservice con los contenidos de httpbitly2dbCPxO Para ac-tivar el servicio escribe los siguientes comandos

$ sudo systemctl enable mjpg_streamerservice

$ sudo systemctl start mjpg_streamerservice

Para ver que el servicio se estaacute ejecutando consulta systemd

$ sudo systemctl status mjpeg_streamerservice

CAMARA IP ODROID

captura de ejemplo con la fecha de registro superpuesta

listado de dispositivos de audio

Alsamixer mostrando el nivel de sonido

ODROID MAGAZINE 14

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 15: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Ahora podemos crear nuestra consulta ffmpeg que grabaraacute una secuencia de viacutedeo MJPG Streamer antildeadiraacute audio desde ALSA y crearaacute un archivo en el disco con esta combinacioacuten

$ sudo apt-get install ffmpeg

$ ffmpeg -framerate 5 -f mjpeg -i lsquohttpodroidodro

idpass1270018090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1500k

-async 1 myvideomp4

El comando anterior especifica que la tasa de fotogramas de entrada debe ser 5 FPS y que la entrada es la secuencia mjpeg desde la direccioacuten anterior El paraacutemetro ldquofrdquo especifica que se debe usar ALSA para el audio desde el siguiente dispositivo en la lista El audio debe ser codificado con mp3lame y el viacutedeo con h264 usando preset ultrarraacutepido y una tasa de fotogramas de 5 FPS El ancho de banda de viacutedeo estaacute limitado a 1500 kbps sino ffmpeg no puede hacer la codificacioacuten en tiempo real La opcioacuten async intenta sincronizar viacutedeo y audio aunque a menudo se producen desviaciones Finalmente el uacuteltimo paraacutemetro es el nombre del archivo que queremos escribir

Con un ODROID-C2 puedes (casi) codificar via software hasta los 10 fps a 720p en tiempo real pero el audio es incom-presible lo mejor es mantener una baja tasa de fotogramas He compilado una versioacuten optimizada de ffmpeg para el C2 us-ando el argumentado ldquo-march=armv8-a+crypto+crc+fp+simd -mtune=cortex-a53rdquo pero no he notado ninguacuten cambio sig-nificativo en el rendimiento con esta versioacuten optimizada De-pendiendo de tus necesidades esto puede o no ser aceptable Si quieres una alta tasa de fotogramas necesitas reducir la resolu-cioacuten o cambiar a un XU4 el cual soporta la codificacioacuten por hardware Puede leer maacutes sobre esto en httpbitly2cxbMkK

Los mejores resultados los obtuve con mjpg_streamer con-figurado a 640x480 con ffmpeg a 10 fps y con un ancho de banda de 1 Mbps Curiosamente si bajamos esta configura-cioacuten el rendimiento es peor en torno a 6 FPS Si observas que el sonido se entrecorta significa que ffmpeg no puede mante-ner la tasa de fotogramas impuesta Por lo que he podido com-probar si intentas grabar a una tasa de fotogramas superior a la que ffmpeg puede soportar en tiempo real el sonido se entre-corta El rendimiento de la codificacioacuten depende de la carga del sistema de modo que a mayor carga menores FPS en tiempo real Para ver algunas foacutermulas que he probado y para ver coacutemo grabar soacutelo audio consulta httpbitly2cvjBlO

Ademaacutes volviacute a hacer las pruebas despueacutes de que Hardkernel realizara sus nuevos ajustes de overclock en bootini con el C2 ejecutaacutendolo a 175GHz y los 4 nuacutecleos Con esta configura-cioacuten no conseguiacute sonido estable a 720p con 8 FPS (en vez de 5) y 15 fps con una resolucioacuten de 640x480 que es muy buena

CAMPARA IP ODROID

No fui capaz de probar frecuencias maacutes altas y menos nuacutecleos debido a la excesiva inestabilidad pero espero que las cosas mejoren con el tiempo Ademaacutes si aumentas la frecuencia de la RAM a 1104 MHz es posible que ganes 1 a 2 FPS

Si deseas omitir mjpg_streamer por completo tambieacuten puedes leer directamente desde devvideo0

$ ffmpeg -r 5 -f v4l2 -video_size 640x480

-i devvideo0 -f alsa

-i plughwCARD=CameraDEV=0 -acodec

libmp3lame -cv libx264 -preset ultrafast

-r 5 -pix_fmt yuv420p -bv 1000k

-async 1 myvideomp4

De hecho el colaborador de los foros ODROID crash-override acaba de lanzar recientemente una libreriacutea y un pro-grama de prueba que te permite codificar H264 viacutea hardware en el C2 al maacuteximo de FPS pero necesitas acceso raw a tu caacute-mara de modo que mjpg_streamer debe estar desactivado Se estaacute trabajando para mejorar este meacutetodo asiacute que revisa su hilo de soporte para las actualizaciones en httpbitly2dcQDJn

Transmitir RTSP bajo demandaEl principal uso de una caacutemara IP es el de poder ver viacutedeo

cuando se solicite En el mejor de los casos deberiacutea ser visible por varios usuarios a la vez Para hacer esto utilizaremos ffser-ver para crear una secuencia RTSP que se ejecute a demanda

El Protocolo de flujo en tiempo real (RTSP) es un proto-colo similar al SIP que se encarga de la sentildealizacioacuten y el trans-porte de los medios entre cliente y servidor Normalmente la sentildealizacioacuten se realiza en el puerto TCP 554 y los flujos de datos a traveacutes del UDP con el cliente y el servidor negociando un puerto adecuado Sin embargo los firewall y NAT a veces interfieren en la negociacioacuten de modo que tambieacuten hay una forma de transportar los datos a traveacutes de TCP intercalado con control de traacutefico Este meacutetodo seraacute usado en nuestras pruebas

La aplicacioacuten ffserver proporciona una forma de servir las solicitudes del cliente RTSP basadas en sentildeales de video ffm-peg Es parte del paquete ffmpeg de modo que ya lo tienes instalado si has seguido el tutorial hasta este punto Para iniciar el servidor necesitaraacutes una configuracioacuten adecuada y un script de inicio systemd La configuracioacuten debe guardarse en etcff-serverconf y se puede conseguir desde httpbitly2cYWPcq

Si echas un vistazo a la configuracioacuten monta un sistema oyente en el puerto RTSP 554 define un canal llamado mjpg-streamerffm y lo vincula a un flujo de salida llamado liveh264sdp La aplicacioacuten ffserver permite configurar diferentes formatos de salida pero en este ejemplo experimentaremos con el flujo de entrada que seraacute el h264 de por siacute

Para arrancar ffserver en el inicio antildeade el siguiente servicio systemd al archivo etcsystemdsystemxserverservice

ODROID MAGAZINE 15

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 16: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

httpsgithubcommad-adyodroid-webcam-scripts

blobmasterffserverservice

Para activarlo y ver su estado

$ sudo systemctl enable ffserver

$ sudo systemctl start ffserver

$ sudo systemctl status ffserver

En este punto tienes un servidor RTSP escuchando las solicitudes aunque el video no se estaacute procesando Para ini-ciar una secuencia de viacutedeo necesitas ejecutar ffmpeg asiacute

$ usrbinffmpeg -loglevel 8

-r 5 -f mjpeg -i lsquohttpodroidodroidpass12700

18090action=streamrsquo

-f alsa -i plughwCARD=CameraDEV=0

-acodec libmp3lame -cv libx264

-preset ultrafast -r 5

-pix_fmt yuv420p -bv 1500k

-async 1 -x264-params keyint=30no-scenecut=1

-vf ldquodrawtext=fontfile=usrsharefontstruetype

dejavuDejaVuSans-Boldttf text=rsquoWebcam feed

localtimeF Trsquo fontcolor=white08 x=7

y=5rdquo

-override_ffserver httplocalhost8099mjpg-

streamerffm

Antes de que te asustes por la complejidad de este co-mando te dire que es similar a la que has visto antes sim-plemente le hemos antildeadimos un texto superpuesto en la esquina superior izquierda con la fecha y hora al igual que las caacutemaras IP ldquoprofesionalesrdquo La aplicacioacuten ffmpeg enviacutea la salida a ffserver especificando el nombre del canal

Ahora deberiacuteas ser capaz de conectarte con un visor RTSP y disfrutar de la sentildeal de video Si lo estaacutes probando desde tu teleacutefono inteligente Android puede intentarlo con RTSP Viewer disponible en httpbitly2cvl0J8

$ vlc rtspodroid-ip554liveh264sdp

Para hacer las cosas maacutes permanentes puedes agregar el archivo de servicio systemd ffmpeg ldquohttpsgithubcommad-adyodroid-webcam-scriptsblobmasterffmpegser-vicerdquo en etcsystemdsystemffmpegservice Para activarlo y ver su estado escribe los siguientes comandos

$ sudo systemctl enable ffmpeg

$ sudo systemctl start ffmpeg

$ sudo systemctl status ffmpeg

El XU4 con el kernel estaacutendar ya puede codificar viacutea hard-ware de modo que tus caacutemaras estariacutean conectadas a otros equipos como el C2 ejecutariacuteas ffserver en el XU4 y leeriacuteas la secuencia MJPEG desde el C2 traveacutes de la red (mejor por cable) asiacute obtendriacuteas audio mp3 desde un ffserver que se eje-cutariacutea en el C2 y transcodificariacuteas el viacutedeo en el XU4 antes de entregarlo al visor Cuando mi XU4 este operativo tengo pensado redireccionar la transcodificacioacuten a eacuteste y publicar los cambios en el hilo de soporte con el objetivo de mejorar el soporte para muacuteltiples caacutemarassecuencias

Mejorar el rendimiento idleEsta previsto que las secuencias de viacutedeo esteacuten funcionando

en todo momento lo que significa que ffmpeg debe transcodi-ficar incluso si no hay un visor conectado Esto puede estar

bien si se espera tener muchos visores conectados al mismo tiempo pero si tienes la intencioacuten de conectarte en contadas ocasiones (por ejemplo 5 minutosdiacutea) no vale la pena tener la transcodificacioacuten de secuencias de fondo cuando no se utiliza Seriacutea mejor si tuvieacuteramos un sistema que permitiera activar el inicio de la secuencia de viacutedeo cuando un visor se conectara y detener la secuencia cuando se desconectaran todos los visores Para este escenario escribiacute el script ffserver-trigger

El script se ejecuta en segundo plano y ejecuta continua-mente el comandos tail -f en varlogsyslog Recoge los men-sajes de ffserver como ldquoPLAY liveh264sdprdquo comprueba si la secuencia de video estaacute activa o la pone en marcha en caso contrario Tambieacuten buscaraacute mensajes de parada como ldquoRTP TCPrdquo y detiene la secuecia si fuera necesario Registra sus ac-ciones en syslog para mayor comodidad Ten en cuenta que este sistema de deteccioacuten estaacute hecho para un uacutenico flujo y sigue la nomenclatura utilizada en el artiacuteculo Puede que necesites modificarlo si quieres utilizarlo para otras configuraciones

Para instalar ffserver-trigger escribe los comandos

$ sudo apt-get install libfile-tail-perl

ODROID IP WEBCAM

Transmisicioacuten rTsp con sonido

ODROID MAGAZINE 16

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 17: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

$ sudo perl -MCPAN -e lsquoinstall LinuxProcNetTCPrsquo

$ sudo wget -O usrlocalbinffserver-triggerpl

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerpl

$ sudo chmod a+x usrlocalbinffserver-triggerpl

$ sudo wget -O etcsystemdsystemffserver-trigger

service

httpsrawgithubusercontentcommad-ady

ffserver-triggermasterffserver-triggerservice

$ sudo systemctl enable ffserver-trigger

$ sudo systemctl start ffserver-trigger

$ sudo systemctl status ffserver-trigger

Puesto que ahora estaacutes usando el ffserver-trigger deberiacuteas desactivar el servicio ffmpeg para que no se iniciaraacute automaacuteti-camente en el arranque En su lugar activa ffserver-trigger cuando sea necesario

$ sudo systemctl disable ffmpeg

La figura 6 muestra la dinaacutemica completa del trabajo

Si tambieacuten quieres grabar la secuencia en un archivo puede conectarte con un visor RTSP y volcarlo a un archivo sin la trans-codificacioacuten Esto supone una gran ventaja ya que lo puedes hacer incluso con otros clientes conectados sin interrumpir su experiencia

$ ffmpeg -i rtsp127001554liveh264sdp

-acodec copy -vcodec copy rtsp-recordingmp4

En cuanto a los retrasos en el tratamiento del viacutedeo mjpg_streamer tiene un retraso de alrededor de 1 segundo mientras que ffmpeg + ffserver antildeade entre 2 y 3 segundos adicionales A estas velocidades tu experiencia no seraacute en tiempo real y no es la adecuada para el control remoto de un robot pero si es lo suficientemente buena para la visualizacioacuten remota

Consejos solucionar problemas- pregunta soy incapaz de conseguir imaacutegenes desde mjpg_streamerffmpeg parece estar bloqueadorespuesta comprueba el valor del paraacutemetro -m y baacutejalo para adaptarlo a tus necesidades- pregunta iquestcoacutemo puedo solucionar la sincronizacioacuten del sonidorespuesta inteacutentalo con 640x48010 fps o reduce la tasa de fotogramas en ffmpegservice- pregunta iquestpor queacute al detener la secuncienca rTsp se paran todos los clientes conectadosrespuesta A veces ffserver se bloquea por una violacioacuten de acceso cuando un cliente se detiene se puede reinicia au-tomaacuteticamente por systemd pero desconectaraacute a todos los clientes-pregunta pulsando play con el primer cliente conectado no se inicia la secuencia rTsp cuando utilizo ffserver-trigger iquestpor queacuterespuesta es un problema conocido la secuencia rTsp tiene una pausa de unos 10 segundos antes de que ffserver empiece a enviar datos de vuelta al cliente presiona play de nuevo tras el tiempo de espera si un cliente se conecta cuando una secuencia estaacute activa este problema no ocurre el script de deteccioacuten tiene un periacuteodo de inactividad de 20 segundos en el que ignora las peticiones de parada tras el inicio de una secuencia para mitigar esta cuestioacuten -pregunta A veces se conecta a una secuencia que no fun-ciona y ffmpeg parece estar bloqueado iquestcoacutemo puedo solu-cionar estorespuesta la causa es mjpg_streamer A veces se queda atascado y necesita reiniciarse existen dos liacuteneas que puede descomentar en ffserver-triggerpl para reiniciarlo automaacuteti-camente cuando ffmpeg vuelva a arrancar para evitar esto- pregunta una caacutemara web comercial permite giro e in-clinacioacuten iquestcoacutemo lo puedo antildeadir a mi caacutemararespuesta puedes antildeadirlos con algunos motores y pines pWm o un Arduino (httpbitly2diWcKh)

Si tienes otros problemas o si encuentras una mejor forma de lograr esto no dudes en haceacutermelo saber en el hilo de so-porte de esta guiacutea en httpbitly2d2j6DH

CAMPARA IP ODROID

Nuestra liacutenea de trabajo de streaming

ODROID MAGAZINE 17

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 18: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

refrigeracioacuten Activa por defecto en el xu4velocidad de reloj efectiva bajo carga 132gHz

disipador pasivo Northbridge (blue zalman)velocidad de reloj efectiva bajo carga 135gHz

disipador activo Northbridge (gold) con un ventilador Noctua 5vcdc de 40mmvelocidad de reloj efectiva bajo carga 178gHz

disipador pasivo Northbridge (blue zalman) con un ventilador de 120 mm velocidad de reloj efectiva bajo carga 167gHz

carcasa de aluminio con refrigeracioacuten pasiva shapedmediavelocidad de reloj efectiva bajo carga 156gHz

He ejecutado varias pruebas de temperatura usando un XU4 con diferentes tipos de sistemas de refrigeracioacuten El objetivo era encontrar la forma maacutes eficaz de enfriar

el dispositivo mientras trabajase con una alta carga de trabajo En los siguientes graacuteficos la temperatura estaacute indicada en azul y la velocidad en naranja El dispositivo regula su velocidad en funcioacuten de la temperatura y la mejor situacioacuten se da cuando la temperatura permanece por debajo 95 grados centiacutegrados lo cual minimiza el estrangulamiento manteniendo una veloci-dad de reloj lo maacutes cercana posible a los 2 GHz Cada prueba fue ejecutada durante 5-6 minutos aproximadamente lo cual se indica en el eje X y la temperatura tiende a permanecer por debajo de 100 grados Celsius que se indica en el eje Y

PRuEbAS DE REfRIGERACIOn En Xu4DESCubRE LA MEjOR REfRIGERACIOnSEGun TuS nECESIDADESpor bo lechnowsky

REFRIGERACION ODROID-XU4

ODROID MAGAZINE 18

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 19: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 20gHzvelocidad de reloj efectiva bajo carga 20gHz

disipador activo Northbridge (gold) con compuesto teacutermico ycon un ventilador Noctua 5vcdc de 40mm 19gHzvelocidad de reloj efectiva bajo carga 19gHz

La mejor forma de enfriar el ODROID-XU4 es utilizar un compuesto teacutermico junto con un ventilador Noctua 5V DC de de 40mm y un disipador activo Northbridge que puede ser adquirido en httpbitly2cBeTGm Mantiene la temperatura por debajo de 93 grados Celsius y permite que el dispositivo funcione a 20 GHz sin estrangulamiento El meacutetodo de refri-geracioacuten pasiva maacutes efectivo fue la carcasa Shapedmedia dis-ponible de Ameridroid en httpbitly2d4YCMH que man-teniacutea al ODROID-XU4 en unos 95 grados centiacutegrados

REFRIGERACION ODROID-XU4 JUEGOS ANDROID

uLTIMATEbRIEfCASEESTAR LISTO PARA PELEAR En un juEGO fREnETICO DE SuPERvIvEnCIApor bruno doiche

Pues Bueno es el tiacutepico diacutea en el que estaacutes dando una vuelta con tu maletiacuten y por

un pequentildeo error te resbalas con una caacutescara de plaacutetano escapando de la primera de muchas muchas bom-bas que te estaacuten lanzando

iquestQue ha pasado iquestNo va a termi-nar nunca iquestHay alguna razoacuten para tanta violencia en contra de tu persona Esquivar las bombas conseguir poderes desbloquear objetos reclutar a otros personajes de grupos realmente entra-ntildeable y estar listo para un juego super entretenido iexclSi eres lo sufi-cientemente bueno es muy posible que descubras en esta historia mucho maacutes de lo que se aprecia a simple vistae

httpsplaygooglecomstoreappsdetailsid=com

nitromeultimatebriefcasew

iquestQuieacuten de nosotros nunca se ha tomado la molestia de sobrevivir a un bombardeo interminable

puedes utilizar los elementos para sobrevivir maacutes tiempo

disipador pasivo Northbridge (gold) con ventillador de 120mmvelocidad de reloj efectiva bajo carga 179gHz

ODROID MAGAZINE 19

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 20: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

ser lo suficientemente pequentildeo para ser instalado en un panel de control y ser lo suficientemente robusto como para sobrevivir a las condiciones industriales

Elegir en entorno de trabajo

NodeJS fue el primer entorno de tra-bajo que probamos Pareciacutea prometedor pero en el momento de la evaluacioacuten no era la plataforma maacutes estable o mejor soportada Su mayor problema era que conectaba a una base de datos utilizando un moacutedulo de base de datos experimen-tal Tras realizar varias pruebas con dife-rentes entornos nos conformamos con una simple solucioacuten en Python ya que contaacutebamos con personal experimenta-do en teacutecnicas avanzadas de Python y en su amplia gama de moacutedulos especiacuteficos

Seleccionar el hardware

Despueacutes de una breve experiencia usando ordenadores de placa reducida (SBC) de calidad industrial era obvio que no eran adecuados La mayoriacutea uti-lizan el desfasado Intel Atom en grandes recintos ruidosos Esto nos condujo al actual y competitivo mercado de los PCs del tamantildeo de una tarjeta de creacutedito Aquiacute tienes algunos que probamos

bull Raspberry Pi 2 Model Bbull Raspberry Pi 1 Model Bbull ODROID-U3bull ODROID-C1bull ODROID-XU4

El campo de la automatizacioacuten in-dustrial no es my conocido por adoptar tecnologiacuteas punteras a

corto o medio plazo Esto se debe en parte al gran monopolio de los tres ac-tores principales Siemens Allen Bradley y Wonderware Por diversas razones no suelen implantar innovaciones de forma agresiva como la creacioacuten de aplicacio-nes web industriales nativas En Bubble Automation nos dimos cuenta de esta deficiencia La mayoriacutea de los clientes que queriacutean monitorizar remotamente sus sitios estaban atrapados usando inefi-caces complementos exclusivos Algunos de estos complementos requeriacutean una licencia y un coste de mantenimiento muy altos o que las conexiones insegu-ras de TeamViewerVNC necesitasen herramientas de terceros para instalarse en los sistemas del cliente

Objetivos delproyecto

Queriacuteamos desarrollar una aplicacioacuten web segura nativa y moderna que no requiriera ninguacuten navegador o plugins para PC especiales Durante el trata-miento de los datos en tiempo real es necesario que la aplicacioacuten funcionase en cualquier dispositivo incluyendo teleacutefonos inteligentes tablet netbooks y ordenadores de sobremesa El disentildeo exigiacutea la no dependencia de aplicaciones especiacuteficas de plataformas innecesarias Para asegurar altos niveles de seguridad el hardware del servidor web teniacutea que ubicarse en las instalaciones del cliente

Cada placa fue ampliamente probada ejecutando nuestro entorno de trabajo Python con cargas poco realistas La placa que maacutes destacoacute fue la ODROID-XU4 que era claramente superior al res-to tal y como muestran los resultados en las figuras 1-4

Esta placa teniacutea mucho mejor ren-dimiento en CPU y en red pero lo maacutes importante presentaba velocidades ES

AuTOMATIzACIOn InDuSTRIALMOnITORIzA REMOTAMEnTE REGISTROS MODbuS uTILIzAnDO un ODROID-Xu4por joel duncan

AUTOMATIZACION INDUSTRIAL

figura 3 ndash los resultados Hdparm es-taacuten en megabytes por segundo

figura 2 ndash los resultados Whetstone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

figura 1 ndash los resultados dhrystone son un iacutendice relativo a una estacioacuten spArc 20-61 valorado en 100

ODROID MAGAZINE 20

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 21: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

tos de campo en alarmas movimiento en directo graacuteficas histoacutericas registros de eventos y emails de notificacioacuten

Proporcionar esta informacioacuten al cli-ente resulto ser una tarea compleja La visualizacioacuten de informacioacuten en tiempo real en una paacutegina web usando HTML5 puro y sin plugins siempre ha sido un reto El uso de teacutecnicas tales como long polling soacutelo tendriacutea como resultado que el navegador se colgara ya que simple-mente no hay demasiada informacioacuten para nutrir al navegador a una velocidad relativamente alta a intervalos de lectura de alrededor de 1 segundo

NodeJS era un buen candidato para las soluciones de datos en tiempo real debido a su eficiente integracioacuten con WebSockets que es una tecnologiacutea que proporciona comunicacioacuten bidireccional total traveacutes de una conexioacuten TCP Afor-tunadamente nos encontramos con una potente libreriacutea PHP que proporciona esta funcionalidad Por esta razoacuten pudi-mos desarrollar todos los componentes del servidor en PHP utilizando Twitter Bootstrap y asiacute proporcionar una in-terfaz sencilla con un disentildeo adaptable desde la base

Un sistema LEMP (Linux Nginx MySQL y PHP) fue el utilizado para

y ancho de banda mucho maacutes altos lo cual era esencial para nuestra base de da-tos en MySQL

Arquitectura y Disentildeo de Software

El punto de partida era crear un de-monio que podiacutea leer los registros Mod-bus a traveacutes de TCPIP desde el campo como muestra la Figura 5 Este crecioacute despueacutes a un sistema basado en eventos sensibles al contexto que traduciera even-

AUTOMATIZACION INDUSTRIAL

proporcionar una base soacutelida en teacutermi-nos de velocidad estabilidad y fiabilidad de nuestro front-end en Javascript PHP y HTML Las principales razones para usar Nginx sobre Apache fueron su me-jor uso de los procesadores multinuacutecleo asignando un trabajador por nuacutecleo y su mejor trayectoria en terminos de seguri-dad frente a la de Apache

SeguridadDebido a la naturaleza de nuestra

industria desarrollar nuestra aplicacioacuten para ser segura a conciencia era algo clave Se dedico mucho tiempo a la crea-cioacuten de una conexioacuten segura no vulne-rable a la inyeccioacuten SQL a la usurpacioacuten de la sesioacuten el cross-site scripting y los ataques de fuerza bruta Para ello hemos creado una imagen Linux miacutenima re-forzada para utilizar en nuestros servi-dores que se mantiene al diacutea con todos los parches de seguridad actuales Traba-jamos estrictamente sobre una base sin control lo que significa que en el im-probable caso de que nuestro software se vea comprometido no hay forma de que el intruso pueda dantildear el sitio Nuestro software soacutelo monitoriza el estado del sistema y no afecta el proceso de control

Para comentarios preguntas y suger-encias por favor visite el post original en httpbitly2cp6tzj

figura 4 - los resultados dd estaacuten en megabytes por segundo

figura 5 - diagrama de flujo de la aplicacioacuten

figura 6 ndash pantallazo del front-end

ODROID MAGAZINE 21

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 22: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

ventana de la aplicacioacuten y selecciona la categoriacutea ldquoSHIELDrdquo Aseguacuterate que la casilla ldquoAllow this PC to stream games to SHIELD devicesrdquo esta marcada

Si quieres antildeadir alguacuten juego especiacutefi-co que GeForce Experience no encuen-tra automaacuteticamente puedes antildeadirlo a la lista de juegos en Preferences -gt Shield De hecho se puede antildeadir cualquier pro-grama incluso programas de escritorio

Instalacioacuten de Moonlight

1 1 Instala la imagen Debian Jes-sie para ODROID-C2 desde httpbitly2cj6V6F y arrancalo

2 Actualiza la imagen con el siguien-te comando que posiblemnte te llevaraacute un tiempo

$ sudo apt-get update ampamp

apt-get-upgrade ampamp

apt-get dist-upgrade

La tecnologiacutea GameStream de NVIDIA te permite transmitir juegos desde un PC con Win-

dows impulsado con una GeForce a otro dispositivo Oficialmente soacutelo soporta los propios dispositivos SHIELD basa-dos en Android de Nvidia pero con un cliente GameStream de coacutedigo abierto de terceros llamado Moonlight puedes transmitir los juegos a tu ODROID

Instalacioacuten en un PCEn primer lugar tendraacutes que con-

figurar NVIDIA GameStream en tu PC Windows y necesitas utilizar una tarjeta de video NVIDIA para que esto fun-cione Si no tiene instalado el software GeForce Experience tendraacutes que des-cargarlo e instalarlo desde NVIDIA en httpbitly1kIWAdz Despues inicia la aplicacioacuten ldquoGeForce Experiencerdquo des-de el menuacute Inicio Haz clic en la pestantildea ldquoPreferencesrdquo en la parte superior de la

3 Instala Moonlight

$ sudo apt-get install moonlight-

embedded

4 Instala PulseAudio (la nueva ver-sioacuten de pulseaudio presenta un menor retardo en el audio)

$ apt-get install -t

jessie-backports pulseaudio

5 Reinicia el equipo en este punto Moonlight deberiacutea estar funcionando tanto en H264 y H265

6 Si ademaacutes quieres utilizar Kodi ejecuta el siguiente comando e instala tanto el escritorio Mate como Kodi

$ sudo setup-odroid

9 Si tambieacuten deseas iniciar automaacuteti-camente Kodi puedes ir a la seccioacuten de ldquoStartup Applicationsrdquo del Control Cen-ter y antildeadir Kodi

10 Para iniciar Moonlight directa-mente desde Kodi puede instalar Luna desde httpbitly2cWy3sD Si soacutelo utilizas Steam puedes automatizar al-gunas cosas por ti mismo Por ejemplo podriacuteas crear una unidad systemd para transmitir Steam creando un archivo en etcsystemdsystemsteamservice con el siguiente contenido

juEGOS nvIDIA En STREAMInG SObRE EL C2EjECuTA juEGOS MODERnOS En Tu ODROIDpor khaine

JUEGOS NVIDIA EN STREAMING

figura 1 ndash configuracioacuten de juegos NvidiA viacutea streaming en el pc

ODROID MAGAZINE 22

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 23: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Despueacutes antildeade un acceso directo al archivo Kodi SystemExec en homeodroidsteamsh que apunte al script steamshbinbash

sudo usrbinnohup binsystem-

ctl start steam amp

Ahora deberiacuteas tener tanto Kodi como Moonlight funcionando pudien-do alternar entre ellos con facilidad Para conectarte a tu PC la app Moonlight te daraacute un PIN Introduacutecelo en la ventana pop-up ldquoSHIELD is requesting to con-nectrdquo que aparece en tu PC y se empare-jaran tus dispositivos

Si no aparece el cuadro de diaacutelogo solicitando el PIN abre la aplicacioacuten NVIDIA Control Panel en el PC de Windows haz clic en el menuacute ldquoDesk-toprdquo y selecciona ldquoShow Notification Tray Iconrdquo La proacutexima vez que intentes vincular los dispositivos apareceraacute la ventana pop-up del PIN Por alguna razoacuten la ventana pop-up estaacute vinculada a este icono de la bandeja del sistema y no apareceraacute si no lo activas

Para comentarios preguntas o suger-encias por favor visita el post original en httpbitly2cYgG74 o echa un vistazo a la documentacioacuten oficial en httpbitly1skHFjN

[Unit]

Description = Steam Streaming

After = systemd-user-sessions

service networktarget sound

target

Conflicts = kodiservice

OnFailure=kodiservice

[Service]

User = odroid

Group = odroid

Type = simple

ExecStart = usrbinmoonlight

stream -app Steam -60fps -1080

STREAMING_MACHINE_IP

ExecStop = usrbinmoonlight

quit STREAMING_MACHINE_IP

ExecStopPost = usrbinsudo

binsystemctl start kodi

JUEGOS NVIDIA EN STREAMING

figuras 1 y 2 - conectando NvidiA game stream utilizando el piN generado

figura 3 ndash seleccionando show Notification Tray icon

ODROID Talk Subreddit

httpwwwredditcomrodroid

ODROID Magazine

estaacute en Reddit

ODROID MAGAZINE 23

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 24: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

lar la nueva versioacuten de UFO AI para ODROIDs El juego ofrece muy buenos graacuteficos en 3D en diferentes idiomas y resoluciones con muy buena muacutesica Es similar al juego original XCom pero con un estilo maacutes moderno

El ODROID-C2 es un gran dis-positivo para jugar y este mes me gustariacutea destacar algunos de los

juegos que son compatibles con el C2 Recientemente he actualizado varios con nuevos binarios y mejoras Recomiendo usar mi imagen Debian Jessie de 64 bits que ya tiene instalado mi repositorio Si estaacute utilizando una distribucioacuten de Ubuntu o Debian diferente escribe los siguientes comandos para acceder a mis paquetes de software

$ wget httpophmdrjrnetmev-

eric

sourceslistsmeveric-jessie-

mainlist

$ wget -O- httpophmdrjrnet

meveric

mevericasc | apt-key add -

$ apt-get update

Por desgracia estos podriacutean no fun-cionar con todas distribuciones ya que algunas dependencias todaviacutea no estaacuten disponibles en Ubuntu

UFO Alien InvasionUFO AI es una nueva versioacuten de

la serie original XCom con un aspecto maacutes moderno y con mejores graacuteficos Originalmente ptitSeb lo exporto a Pandora y yo lo he utilizado para llevarlo a ODROID pero por ahora muchos de sus cambios se integraron en el proyec-to principal y he sido capaz de compi-

Para descargar e instalar UFO Alien Invasion escribe el siguiente comando

$ sudo apt-get install ufoai-

odroid

SmokinGunsSmokinGuns es un juego de disparos

al estilo lejano oeste basado en el motor ioQuake (Quake 3) Es muy divertido en el modo multijugador y ofrece algunos modos de juego muy interesantes como defender un banco de los bandidos Se ejecuta sin problemas en el ODROID-C2 incluso con una alta configuracioacuten Puede ver un viacutedeo del juego en httpsyoutubeRGIYZf-BBfA

Para descargar e instalar SmokinGuns

juEGOSLInuX ALGunOS EXCELEnTESjuEGOS PARA EL C2por Tobias schaaf

JUEGOS LINUX

figuras 1 - 3 - ufO Alien invasion

ODROID MAGAZINE 24

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 25: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

cuenta la reputacioacuten de tu hospital (tras una fecha fijada en el archivo de nivel)

bull El humo de la maacutequina ahora es visible cuando estaacuten muy desgasta-das

bull Ahora es posible hacer clic derecho en el temporizador como en el juego original para mover a los pa-cientes afectados

bull Compatible con teclado numeacuterico

Ahora se puede utilizar el teclado numeacuterico para moverse por el mapa cuando el bloqueo numeacuterico estaacute desactivado o para escribir nuacutemeros cuando el bloqueo nu-meacuterico este activado sin efectos secundarios

bull La carpeta MP3 ahora se puede desactivar desde dentro del juego Anteriormente tras configurar una carpeta de mp3 soacutelo se podiacutea elim-inar editando el archivo de configu-racioacuten a mano

bull La interfaz ahora utiliza el cursor adecuado para cambiar el tamantildeo de las habitaciones

bull Los contenedores ahora se puede colocar en los pasillos

escribe el siguiente comando

$ sudo apt-get install

smokinguns-odroid

CorsixTHCorsixTH es una nueva versioacuten del

antiguo claacutesico Theme Hospital similar a OpenTTD Se trata de una reconstruc-cioacuten muy proacutexima a la versioacuten original con algunas mejoras como las diferentes resoluciones El juego todaviacutea estaacute en desarrollo pero estaacute lejos de ser simple-mente una versioacuten alfa Puedes jugar el juego original sin problemas y con todas sus novedades y mejoraraacute con el tiem-po cuando se liberen nuevas versiones Tienes disponible un viacutedeo del juego en httpsyoutuberSN1p247J74 Necesi-taraacutes los archivos originales para poder jugar al juego Recientemente ha sido lanzada la versioacuten 060 la cual antildeade las siguientes caracteriacutesticas

bull Campantildeas de usuario ahora es po-sible crear una serie de niveles para jugar a la vez del mismo modo que el juego original

bull Editor de mapas hay disponible un nuevo editor de mapas directa-mente desde el menuacute del juego

bull Impacto en el precio de los medi-camentos Ahora los pacientes rea-ccionaran con el precio que fijes a los tratamientos Si los tratamien-tos cuestan demasiado los pacien-tes optaraacuten por volver a casa y esto puede afectar a tu reputacioacuten

bull Tasa de produccioacuten variable la tasa de produccioacuten ahora tiene en

JUEGOS LINUX

figuras 9 - 10 - YQuake 2

Para descargar e instalar Corsix TH escribe el siguiente comando

$ apt-get install corsixth-odroid

YQuake 2Yquake 2 es un remake del Quake 2

de coacutedigo abierto que permite partidas multijugador El juego se ejecuta a maacutexi-ma velocidad a una resolucioacuten de 1080p y utiliza GLShim

Para descargar e instalar YQuake 2 escribe el siguiente comando

$ apt-get install yquake2-odroid

Tambieacuten hay disponible un paquete de alta resolucioacuten que se muestra en las capturas de pantalla iexclFeliz fragging

figuras 4 - 6 - smokinguns

figuras 7 - 8 - corsixTH

ODROID MAGAZINE 25

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 26: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

COMPILAR AnDROID LOLLIPOP PARA EL ODROID-C2uSAnDO LInuX MInT 18 O ubunTu 1604por joumlrg Wolff

COMPILING ANDROID

pilar Android la versioacuten de Java deben ser cambiada a OpenJDK7 Esto se pue-de hacer con estos comandos

$ sudo update-alternatives

--config java

$ sudo update-alternatives

--config javac

$ sudo update-alternatives

--config javadoc

El resultado en consola de los ante-riores comandos deberiacutea tener este as-pecto

Auswahl Pfad

Prioritaumlt Status

---------------------------------

---------------------------

0 usrlibjvm

java-8-oraclejrebinjava

1082 automatischer Modus

1 usrlibjvm

java-7-openjdk-amd64jrebinjava

1071 manueller Modus

2 usrlibjvm

java-8-openjdk-amd64jrebinjava

1081 manueller Modus

3 usrlibjvm

java-8-oraclejrebinjava

1082 manueller Modus

Para que la compilacioacuten de Android

Esta guiacutea detalla coacutemo compi-lar Android 511 Lollipop para ODROID-C2 en un equipo

que ejecuta Linux Mint 18 o Ubuntu 1604 La guiacutea aprovecha las instruccio-nes oficiales de Hardkernel para compi-lar Android Antes de empezar hay que configurar algunos paquetes de software y compilar dependencias Android Lol-lipop necesita el kit de desarrollo de Java (JDK) Open-JDK7 Puesto que Ubun-tu 1604 y Linux Mint 18 utiliza Open-JDK8 OpenJDK7 se debe instalar desde las fuentes de Archivos de Paquetes Per-sonales (PPA) Para instalar OpenJDK 7 introduce los siguientes comandos en una ventana de terminal

$ sudo add-apt-repository

ppaopenjdk-rppa ampamp sudo apt-

get update

$ sudo apt-get upgrade ampamp

sudo apt-get dist-upgrade

$ sudo apt-get install adb fast-

boot openjdk-7-jdk

No es necesario eliminar la versioacuten de OpenJDK 8 por defecto que viene preinstalada De hecho se recomienda dejarla instalada ya que puede ser nece-saria para otros programas como Eclipse o Android Studio Ambas versiones pue-den convivir juntas pero antes de com-

tenga eacutexito en necesario instalar varios paquetes en el ordenador host (el orde-nador que hace la compilacioacuten) Los pa-quetes se pueden instalar con el siguiente comando apt-get

$ sudo apt-get install adb fast-

boot git

ccache automake lzop bison

gperf

build-essential zip curl zlib1g-

dev

zlib1g-devi386 g++-multilib

python-networkx

libxml2-utils bzip2 libbz2-dev

libbz2-10

libghc-bzlib-dev squashfs-tools

pngcrush

schedtool dpkg-dev liblz4-tool

make

optipng maven python-mako py-

thon3-mako

python python3 syslinux-utils

Google-android-build-tools-in-

staller

Estos son los preparativos para el or-denador host En mi sistema sufriacute algu-nos errores de compilacioacuten Si ha inicia-do accidentalmente la compilacioacuten con una versioacuten incorrecta del JDK lo mejor es limpiar el repositorio git o volver a descargar la fuente y empezar de nuevo

COMPILANDO ANDROID

ODROID MAGAZINE 26

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 27: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

Ahora puedes seguir los pasos de compilacioacuten de la paacutegina wiki de Hard-kernel

$ export ARCH=arm64

$ export CROSS_COMPILE=aarch64-

none-elf-

$ export PATH=opttoolchains

gcc-linaro-aarch64-none-

elf-49-201409_linux

bin$PATH

$ export PATH=opttoolchains

gcc-linaro-arm-none-ea-

bi-48-201404_linux

bin$PATH

$ export JAVA_HOME=usrlibjvm

java-170-openjdk-amd64

$ export PATH=$JAVA_HOME

bin$PATH

$ source buildenvsetupsh

$ lunch odroidc2-eng-32

$ make -j4 selfinstall

Si has instalado las herramientas en otra carpeta como yo hago normal-mente necesitas proporcionar la ruta correcta a las herramientas Estos pasos deben proporcionarte una versioacuten de Android lista para ser instalada en un moacutedulo eMMC o tarjeta SD

COMPILANDO ANDROID

$ ln -sf usrbinldgold home

(your account name)

(build source repository)pre-

builtsgcclinux-x86host

(glibc version)x86_64-linuxbin

ld

Ten en cuenta que es necesario com-probar los mensajes de error con respec-to a la versioacuten utilizada x86_64-linux-glibc2 En mi sistema dio resultado el siguiente comando el cual crea un iden-tificador ID de enlace simboacutelico

$ ln -sf usrbinldgold

homejoergodroid_c2lollipop

prebuiltsgcclinux-x86host

x86_64-linux-glibc211-46

x86_64-linuxbinld

iexclHaz siempre una copia de seguridad primero Otro error que puede darse es el siguiente

public_apitxt20 error 5

outtargetcommonobjPACKAGING

public_apitxt20 error 5 Added

public field androidManifestper-

missionBACKUP

La solucioacuten pasa por escribir el siguiente comando

$ make update-api

$ make -j4 selfinstall

Puesto que la descarga puede tardar entre 1-2 diacuteas deberiacuteas probar primero la op-cioacuten de limpieza Para limpiar la fuente ejecuta el comando desde la carpeta su-perior del aacuterbol de fuentes Ademaacutes la carpeta ldquooutrdquo debe ser eliminada

$ repo forall -c

lsquogit reset --hard git clean

-fdxrsquo

$ rm -rf out

Los siguientes pasos estaacuten bien docu-mentados en la paacutegina wiki de Hardker-nel en httpbitly2chF4Tu Si sigues estos pasos no olvide instalar las siguien-tes herramientas a menos que quieras recibir errores de compilacioacuten

bull g c c - l i n a r o - a r m - n o n e - e a -bi-48-201404_linux

bull g c c - l i n a ro - a a r c h 6 4 - n o n e -elf-49-201409_linux

Fallo de sincronizacioacuten repo

Si estas gestionando fuentes antiguas puede fallar la sincronizacioacuten repo Si eso sucede es necesario forzar la sin-cronizacioacuten

$ repo sync --force-sync

Y despueacutes de la limpieza y la sincro-nizacioacuten no olvides cambiar a la rama maestra

$ repo start s905_511_master

--all

Tambieacuten puede encontrar este error recurrente

unsupported reloc 43

libnativehelperJniInvocation

cpp165 error unsupported reloc

43

Tras hacer muchas pruebas encontreacute una solucioacuten en los foros de xda-deve-lopers en httpbitly2cCtfrp

ODROID MAGAZINE 27

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 28: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

A medida que el espadachiacuten avanza en el juego ganaraacute maacutes oro y maacutes puntos de experiencia Utilizando el oro po-draacutes comprar nuevas armas armaduras y otros elementos que ayudaraacuten al jugador a aumentar sus estadiacutesticas Con la ex-periencia subiraacutes de nivel a lo largo del juego Cada vez que subas de nivel podraacutes elegir 3 habilidades Afortunadamente este juego no sigue la mentalidad ldquofreemiumrdquo de muchos otros juegos que poco a poco te obligan a pagar por actualizaciones para superar el juego En cambio la versioacuten libre de Reaper estaacute configurada como una demo en la que es gratis jugar hasta que tu personaje alcance el nivel 10 El juego completo des-bloqueado se puede comprar dentro del propio juego despueacutes de lo cual no es necesario comprar nada maacutes dentro del juego

El combate constituye la mayor parte del juego pasaraacutes

Si estaacutes buscando un divertido juego de accioacuten de muy buen ver para Android iexclReaper lo es Reaper Tale of a Pale Swordsman es un videojuego de accioacuten y rol dis-

ponible de forma gratuita en Google Play httpbitly1sIRjYd

El juego tiene lugar en un territorio conocido como ldquowil-derness ldquo donde tu personaje un espadachiacuten paliducho acaba de despertar ldquoWildernessrdquo es una tierra maacutegica llena tribus salvajes y guardias imperiales con varios grupos en medio El espadachiacuten paliducho viene a ser un tipo de mercenario que va a las misiones y aventuras de los diferentes grupos del wilder-ness y su amigo que se llama Old Grey Beard Maacutes adelante en el juego surge un nuevo enemigo que amenaza no soacutelo el espadachiacuten paliducho sino a toda la poblacioacuten de wilderness

El jugador controla el espadachiacuten y puede elegir el camino que tome eacuteste El menuacute del juego es un gran mapa con varios puntos de intereacutes por los que el jugador puede mover el espa-dachiacuten Una vez en un punto el jugador puede interactuar con diversas tribus y guardianes seleccionando las opciones de diaacutelogo Las opciones del diaacutelogo ayudan a que el juego no sea tan riacutegido ya que el jugador pueda elegir aceptar o rechazar una misioacuten exigir maacutes dinero atacar o defender a un grupo y muchas otras opciones

juEGOSAnDROID REAPER TALE Of A PALE SwORDSMAn por synportack24

REAPER

ODROID MAGAZINE 28

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 29: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

modules y firmware en lib de Gentoo por si acaso

$ cp -afv libmodules optgen-

toolib64

$ cp -afv libfirmware optgen-

toolib64

$ cp -afv libmodules optgen-

toolib

$ cp -afv libfirmware optgen-

toolib

Despueacutes aseguacuterate de que optgen-tooetcportagemakeconf estaacute configu-rado correctamente de acuerdo con el manual de Gentoo disponible en httpbitly1swpkQq Para el ODROID-C2 he dejado el CFLAG intacto por ahora (CFLAGS=rdquo-O2 -piperdquo) porque antildea-dir -march y -mtune parece dar lugar a errores de compilacioacuten en algunos pa-quetes Intenteacute ajustar MAKEOPTS=rdquo- J5rdquo pero me encontreacute con poca memoria y el proceso se detuvo Sin embargo usar en su lugar ldquo-j3rdquo resolvioacute esta cuestioacuten Simplemente tienes que utilizar la con-figuracioacuten conservative en makeconf por ahora ya que siempre podraacutes afinar-la maacutes tarde Los siguientes comandos cambiaraacuten root (chroot) en Gentoo

$ cp -L etcresolvconf opt

gentooetc

$ mount -t proc proc optgentoo

mucho tiempo luchando contra una gran variedad de personajes en diferen-tes lugares El juego proporciona una gran variedad de oponentes uacutenicos a los que te enfrentaraacutes Sin embargo la mejor forma de atacarles casi siempre es la misma saltar en cualquier lugar con tropas y atacar luego alejarte Con esto en mente hay muchas otras cosas que te atacaraacuten igualmente como los obstaacutecu-

los de nivel y los proyectiles enemigos que tendraacutes que evitar

En general Reaper es muy simple para precisamente detenerte y jugar un par de minutos o sentarse un rato y dis-frutar Todo el juego estaacute muy pulido las ilustraciones y los graacuteficos son espectacu-lares Todos los niveles y mapas son muy atractivos e interesantes Todo funciona perfectamente en mi ODROID-XU4 auacuten cuando lo tengo en underclocked con refrigeracioacuten pasiva Ademaacutes se pue-de jugar al juego por completo usando un mando Xbox 360 o un teclado y un ratoacuten Descubriacute que con el mando es mucho maacutes faacutecil jugar permite mostrar todos los cuadros de diaacutelogo de inicio con los botones adecuados del mando Xbox Recomiendo a cualquier jugador que esteacute buscando un juego de accioacuten divertido que eche un vistazo a Reaper que seguro disfrutaraacute de eacutel

REAPER

GEnTOO PARA EL ODROID-C2CREA Tu PROPIA InSTALACIOn A MEDIDApor rev0lt

GENTOO

Gentoo Linux es un sistema op-erativo gratuito basado en Free-BSD que puede ser optimizado

y personalizado automaacuteticamente para casi cualquier aplicacioacuten o necesidad He logrado arrancar y ejecutar en el ODROID-C2 la fase 3 experimental de Gentoo para ARM64

Para empezar arranca el C2 con cual-quier distribucioacuten de Linux aseguacuterate de hacer backup de los archivos impor-tantes por si algo sale mal Yo use Ubun-tu puesto que tiene soporte oficial por parte de Hardkernel

PreparacioacutenPrepara el sistema de ficheros root de

Gentoo y descarga la fase 3 experimental de Gentoo para ARM64 desde gentooorg a un directorio local en Ubuntu En este ejemplo usamos optgentoo como directorio local en Ubuntu y la uacuteltima fase 3 con fecha 24032016 que puedes cambiarla si lo deseas

$ mkdir optgentoo ampamp cd opt

gentoo

$ wget httpdistfilesgentoo

orgexperimental

arm64stage3-arm64-20160324tar

bz2

$ bzip2 -d stage3

$ tar xvf stage3

A continuacioacuten copia libmodules y libfirmware desde Ubuntu a Gentoo La fase 3 de Gentoo tiene lib y lib64 Tambieacuten copiaremos los directorios

ODROID MAGAZINE 29

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 30: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

$ ln -s netlo netwlan0

$ rc-update add netwlan0 default

$ rc-update add sshd default

$ emerge net-miscdhcpcd sys-ker-

nellinux-firmware ntp wpa_suppli-

cant ntp is needed as C2 has no

persistent clock or else Gentoo

would boot to 1970

$ rc-update add ntpd default

$ wpa_passphrase MYSSID myssid-

passphrase gt

etcwpa_supplicantwpa_sup-

plicantconf insert your MYSSID

and myssidpassphrase accordingly

Ten en cuenta que para desenmas-carar algunos paquetes es posible que quieras utilizar el comando ldquoemerge --autounmask-writerdquo y luego ejecutar ldquodispatch-confrdquo para facilitar su uso Despueacutes salte de chroot y desmonta los seudo sistemas de archivos de chroot

$ exit

$ umount -l optgentoodev

shmpts

$ umount optgentoobootsys

proc

Crear el sistema de archivos

A continuacioacuten tenemos que crear el sistema de archivos en la particioacuten de Gentoo y luego copiar los archivos de Gentoo preparados en los anteriores pasos a este sistema de ficheros En este ejemplo Yo usareacute la particioacuten 3 de mi tarjeta eMMC para Gentoo

$ mkfsext4 devmmcblk0p3

$ mkdir mntgentoo

$ mount devmmcblk0p3 mntgen-

too

Despueacutes copia los archivos de optgentoo a mntgentoo

$ cp -afv optgentoo mntgen-

too

En este ejemplo puesto que bootini

$ nano etcfstab

ltfsgt ltmountpointgt

lttypegt ltoptsgt

ltdumppassgt

devmmcblk0p3

ext4 errors=remount-

ronoatimenodiratime 0 1

tmpfs

tmp tmpfs

nodevnosuidmode=1777

0 0

devmmcblk0p1 boot

vfat defaultsrwownerfl

ushumask=000 0 0

Si vas a utilizar una tarjeta microSD el dispositivo ademaacutes seraacute identificado como mmcblk0 tras el arranque asiacute que el anterior comando deberiacutea funcionar pero hay que cambiar el nuacutemero de par-ticioacuten en consecuencia Por ejemplo si va a iniciar Gentoo desde una tarjeta microSD con Gentoo en la particioacuten 2 deberiacuteas especificar devmmcblk0p2 como punto de montaje en tu fstab (es decir seguir utilizando mmcblk0 pero cambiando p3 por p2)

Configurar la red Para configurar los drivers de red es-

cribe el siguiente comando

$ emerge --noreplace net-misc

netifrc

Para usar DHCP en las interfaces de red eth0 y wlan0 (si tienes un dispositivo USB wifi por ejemplo) edita etcconfdnet de la siguiente forma y guardarlo

config_eth0=rdquodhcprdquo

config_wlan0=rdquodhcprdquo

Luego escribe los comandos

$ cd etcinitd

$ ln -s netlo neteth0

$ rc-update add neteth0 default

proc

$ mount --rbind sys optgentoo

sys

$ mount --make-rslave optgen-

toosys

$ mount --rbind dev optgentoo

dev

$ mount --make-rslave optgen-

toodev

$ chroot optgentoo binbash

$ source etcprofile

$ export PS1=rdquo(chroot) $PS1rdquo

Configurar Gentoo

$ passwd set root password

$ useradd -m -G wheel -s bin

bash yourname add user youname

$ passwd yourname set user your-

namersquos password

$ emerge --webrsync

$ emerge --sync

$ echo ldquoUTCrdquo gt etctimezone

$ emerge --config sys-libstime-

zone-data

$ nano etclocalegen remove

the relevant comment from the file

$ locale-gen

$ eselect locale list

$ eselect locale set X

where X is the desired locale

$ env-update ampamp source etcpro-

file ampamp

export PS1=rdquo(chroot) $PS1rdquo

Descarga el script c2_initsh de httpbitly2cWAjQP y colocarlo como c2_initstart en el directorio etclocal

$ chmod +x etclocaldc2_init

start

$ rc-update add local default

Necesitamos especificar el dispositivo del sistema de archivos de Gentoo en etcfstab En este ejemplo que utilizo la particioacuten 3 de mi eMMC como siste-ma de ficheros root de Gentoo usare el siguiente comando para actualizar el ar-chivo para que coincida con lo siguiente

GENTOO

ODROID MAGAZINE 30

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 31: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

mmcblk0p2 como tu en el sistema de archivos de Gentoo en etcfstab antes de reiniciar con Gentoo

Para preparar la microSD (devsda1 por ejemplo) deberiacuteas usar sd_fusingsh devsda asegurarte de que los ar-chivos de arranque (bootini Imagen meson64_odroidc2dtb uInitrd) de mediaboot en Ubuntu son copiados a devsda1 antes de reiniciar Es po-sible que quieras mantener tu particioacuten de Ubuntu para que pueda arrancar de nuevo en ella y actualizar el kernel y libmodules libfirmware maacutes adelante Para ello basta con editar bootini en boot de Gentoo y cambiar la variable root= de nuevo a devmmcblk0p2 (en mi ejemplo) y reiniciar el sistema Una vez que el kernel y lib sean actualizados en Ubuntu puedes copiarlos a la par-ticioacuten de Gentoo y reiniciar de nuevo en Gentoo editando mediabootbootini como he descrito anteriormente Seriacutea buena idea hacer un script para esto tanto en Gentoo como en Ubuntu y asiacute reiniciar perioacutedicamente para ac-tualizar Ubuntu y copiar el directorio libfirmware y libmodules en Gentoo de modo que todo se hiciera automaacuteti-camente en segundo plano por la noche mientras duermes por ejemplo

En Gentoo debido a que empezamos con la fase 3 una vez que hayas adaptado tus variables makeconf puedes escribir el siguiente comando para volver a com-pilarlo todo

$ emerge -e world

Ten en cuenta que algunos paquetes pueden requerir fuentes kernel en usr

src de modo que descargarlas o git clone la rama necesaria de httpbitly2cISS9s en un directorio dentro de usrsrc lla-mado por ejemplo linux-c2-314 y a continuacioacuten crea un enlace simboacutelico (o eselect) al directorio usrsrclinux ya que emerge lo espera alliacute por defecto

X Window se compila y funciona muy bien sobre C2 en Gentoo Si quieres instalarlo puede utilizar el comando

$ USE=rdquo-llvmrdquo emerge x11-base

xorg-server

$ emerge openbox xterm or

choose your favorite

$ nano etcX11xinitxinitrc

remove the reference to twm and

replace it with exec openbox or

your favorite

$ startx

Tambieacuten es posible que esteacutes pensan-do en soluciones de refrigeracioacuten activa para el C2 si compilas software a menu-do Analizando mis archivos log con el disipador de calor de la CPU y sin re-frigeracioacuten activa el C2 llega a calentarse un poco para mi gusto cuando ejecuto pesados trabajos con emerge llegando a los 70 grados centiacutegrados Puedes hacer un seguimiento de la temperatura du-rante los trabajos de compilacioacuten bus-cando la temperatura en sys y analizan-do el archivo correspondiente Puede ser una buena idea conectar un ventilador cuando compiles o al menos mantenerlo a una distancia segura del televisor Para preguntas comentarios y sugerencias visita el post original del foro en httpbitly2ctWugX o la paacutegina principal de Gentoo en httpwwwgentooorg

de la particioacuten de arranque de Ubuntu estaacute apuntando a la particioacuten de Ubuntu en devmmcblk0p2 (montada como mediaboot en Ubuntu) hay que edi-tarlo para que apunte a la particioacuten root de Gentoo

$ nano mediabootbootini

Cambia la variable root= por root=devmmcblk0p3 en esta liacutenea

setenv bootargs ldquoroot=dev

mmcblk0p3 rootwait ro $condev

no_console_suspend hdmimode=$m

m_bpp=$m_bpp vout=$vout

fsckrepair=yes netifnames=0

elevator=noop

disablehpd=$hpdrdquo

Por favor aseguacuterate de que la liacutenea anterior (es decir la que comienza con las palabras setenv bootargs seguidas de las variables encerradas por comillas) se encuentra en una uacutenica liacutenea

Cuando se edita en nano El formato de la paacutegina web probablemente puede hacer que la liacutenea se muestre en varias liacuteneas acccidentalmente

Por uacuteltimo reinicia el dispositivo y el C2 deberiacutea arrancar con Gentoo con la red eth0 y wlan0 funcionando El meacuteto-do anterior tambieacuten deberiacutea funcionar si instalas Gentoo y lo arrancas desde una tarjeta microSD en lugar del eMMC siempre que hagas las modificaciones oportunas Por ejemplo si estaacutes insta-lando Gentoo en una tarjeta microSD con la particioacuten 1 como particioacuten de ar-ranque y la 2 como sistema de ficheros root de Gentoo tienes que especificar

GENTOO

ODROID MAGAZINE 31

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 32: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

iquestQueacute te atrajo de la plataforma ODROIDMi primer contacto con dispositivos ODROID fue

hace un par de antildeos Despueacutes de exportar FreeSpace y FreeSpace 2 a OpenPandora meveric se puso en con-tacto conmigo para que le ayudara a exportarlo a la plata-forma ODROID Estaba contento de que mi versioacuten pu-diera ser utilizada en otro dispositivo para el que no estaba pensado inicialmente Maacutes tarde mi colaboracioacuten con meveric se intensificoacute y empeceacute a antildeadir maacutes y maacutes coacutedigo ODROID a mis versiones

iquestCoacutemo utilizas tus ODROIDsMi ODROID estaacute conectado a mi televisor princi-

pal Lo utilizo para navegar por internet jugar a algunos juegos probar nuevas versiones de software y como repro-ductor multimedia

Su continuo trabajo sobre el paquete GLShim es muy cono-cido especialmente entre los aficionados a los juegos iquestQueacute te motivoacute a trabajar en el proyecto

Cuando empeceacute a exportar juegos llegue a exportar a mano OpenGL a GLES Desarrolle algunos juegos y ac-tualice algunos motores especiacuteficos como FreeSpace Jedi Knights II y III Despueacutes continuacutee el proyecto GLShim creado por lunixbochs (httpbitly2d4PHek) Al prin-cipio no estaba muy convencido ya que mis versiones exportadas eran buenas a veces incluso mejores que un simple GLShim exportado Sin embargo algunos juegos eran muy complicados de exportar como Armagetron Ad-

Por favor Haacuteblanos un poco sobre tiMi nombre es Sebastien Chevalier Tengo 43 antildeos soy

franceacutes estoy casado y tengo dos hijos

iquestCoacutemo fueron tus inicios con los ordenadoresCuando teniacutea de 10 antildeos mi padre llego a casa con

un ordenador Era un equipo franceacutes poco conocido de-nominado Hector que se conecta a la TV y veniacutea con 3 cassettes Puesto que era de la deacutecada de los 80 no teniacutea discos y ejecutaba Space Invaders un software de preacutesta-mos hipotecarios inuacutetil y BASIC Tras pasar muchas horas jugando a Space Invaders empeceacute a mirar el compilador de BASIC Tambieacuten traiacutea dos manuales impresos sobre Basic asiacute que aprendiacute el lenguaje para crear maacutes juegos

COnOCIEnDO un ODROIDIAnSEbASTIEn CHEvALIER (PTITSEb) DESARROLLADOR DE GLSHIMeditado por rob roy

CONOCIENDO UN ODROIDIAN

Nuestro desarrollador sebastien en su oficina

el primer ordenador de sebastien el Hector

ODROID MAGAZINE 32

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33

Page 33: Juegos Linux/Android • Gentoo para ODROID-C2 • Compilar ... · cuenta de Gmail y comprueba si hay nuevos mensajes en la bandeja de entrada. Si existen nuevos mensajes, se enciende

dores Me gusta viajar especialmente en vacaciones con mi familia (ver la imagen del hermoso Como Lake en Italia donde he estado este verano) Paso la mayor parte de mi tiempo libre por las noches y los fines de semana con el or-denador Tambieacuten trabajo de programador en mi trabajo asiacute que supongo que suelo pasar faacutecilmente 12 horas al diacutea delante de una pantalla de ordenador

iquestQueacute consejo le dariacutea a alguien que desee aprender maacutes sobre programacioacuten

Aprender a programar lleva tiempo Mi mejor con-sejo es que te enfrentes a proyectos reales pero no exce-sivamente ambiciosos Para aprender puede empezar con juegos simples Por ejemplo si nunca has programado an-tes coge un juego como ldquoFind a numberrdquo en el que el ordenador escoge un nuacutemero entre 1 y 999 que tienes que adivinar y el ordenador te va diciendo si estaacute por encima o por debajo Luego inteacutentalo con un simple juego Tres en Raya basado en texto despueacutes con un juego baacutesico Break Out que deberiacutea ser tu primer paso a nivel graacutefico El len-guaje que utilices no es lo maacutes importante de modo que puedes intentarlo con BASIC Pascal C C ++ Python o Lua Lo importante es alcanzar el objetivo asiacute que disfruta aprendiendo haciendo cosas y no te desanimes Date tiem-po para convertirte en un buen programador y no debriacuteas compararte al principio con otras personas

vanced y Scorched Earth 3D de modo que intente el meacute-todo GLShim Fue cuando entonces me separeacute del proyec-to GitHub de linuxboch con el fin de tener mis propias fuentes y trabajar con un enfoque ldquopuerto a puertordquo co-giendo un juego o una pieza de software e intentar hacer que funcionara Algunos juegos y aplicaciones utilizan funciones que son difiacuteciles de implementar fallan o no se convierten correctamente asiacute que analizaba lo que ocurriacutea y luego antildeadiacutea una funcioacuten para solucionarlo Otras veces me daba por vencido pasaba a otro software y volviacutea maacutes tarde despueacutes de que GLShim evolucionara

Actualmente GLShim estaacute funcionando bastante bien sobre todo con todas las funciones implementadas de OpenGL 15 y tambien muchas funciones GLX Ahora puedo ejecutar juegos como Minecraft idTec 1 2 oacute 3 juegos de Serious Engine y software como Blender

iquestCuaacutel es tu ODROID favorito y por queacute

Actualmente soacutelo poseo un ODROID-XU4 que es una buena maacutequina Es muy potente tanto por su CPU como por su GPU pero la refrigeracioacuten activa hace que no sea idoacuteneo para usarlo como un HTPC Posiblemente probareacute el C2 con refrigeracioacuten pasiva que parece ser tambieacuten bas-tante potente sobre todo ahora que el driver 3D estaacute dis-ponible

iquestQueacute innovaciones le gustariacutea ver en futuros productos de Hardkernel

Me gustariacutea ver algunos kits ba-sados en los disentildeos de bricolaje que han ido apareciendo en nuacutemeros an-teriores de ODROID Magazine

iquestQueacute aficiones e intereses tienes aparte de los ordenadores

No tengo muchas aficiones Sue-lo jugar a los juegos pero esto sigue estando relacionado con los ordena-

MEET AN ODROIDIAN

sebastien visitoacute el verano pasado como lake en italia

sebastien disfrutando de una comida

CONOCIENDO UN ODROIDIAN

ODROID MAGAZINE 33