Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
$ 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
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
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
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
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
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
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
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
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
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
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
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
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
$ 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
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
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
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