Punto de Acceso WiFi ODROID: Compartir Archivos a través de Samba

Wi-Fi Access point featured image

Este artículo te mostrará cómo configurar un ODROID como Punto de Acceso WiFi para poder acceder y modificar el disco duro del ODROID desde otro ordenador. Su principal finalidad es la de permitir el acceso a imágenes, videos y archivos log almacenado en el ODROID. El procedimiento hace uso de hostapd, Samba y DHCP.

Para lograrlo, necesitarás:

Todas las indicaciones que aparecen a continuación pueden llevarse a cabo conectando un teclado, un ratón y una pantalla al ODROID o utilizando ssh (a través de PuTTY).

Software

Convertirse en super usuario:

$ sudo -s
Instalar hostapd, samba y el resto de paquetes necesarios:
$ apt-get install hostapd samba samba-common python-glade2 system-config-samba isc-dhcp-server
Tras asegurarte primero de que el dongle WiFi esté conectado al ODROID, busca el nombre del dispositivo escribiendo "ifconfig". Normalmente éste será "wlan0" o "wlan2".

Punto de Acceso Wifi - Figura 1 - Ejecutando el comando ifconfig

Comprueba que el dongle WiFi soporte el modo "AP":

$ iw list
Aparecerá en pantalla una extensa lista de información. Debes buscar una sección llamada “Supported interface modes” seguida de “* AP”. Si no logras encontrarla, esta guía no te valdrá para nada y deberás intentarlo con otro dongle.
Supported interface modes:
* IBSS
* Managed
* AP
Usa tu editor favorito, como nano o vi, para editar el archivo /etc/network/interfaces y añade una entrada para tu dongle WiFi. Ten en cuenta que debes camabiar "wlan2" si tu dongle tiene un nombre diferente:
$ auto wlan2
$ iface wlan2 inet static
$ address 192.168.100.1
$ netmask 255.255.255.0
Edita el archivo /etc/hostapd/hostapd.conf y asegúrate de que tenga un aspecto similar al que se muestra a continuación:
$ vi /etc/hostapd/hostapd.conf

interface=wlan2 <-- change "wlan2" to name of WiFi dongle found above
driver=nl80211
ssid=MyDrone
hw_mode=g
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MyDrone12 <-- password for clients to access the WiFi access point
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Intenta iniciar la aplicación hostapd:
$ hostapd /etc/hostapd/hostapd.conf
Si falla, intenta reemplazar los archivos /usr/sbin/hostapd y hostapd_cli por la versión que se encuentra en el área de descargas.

También necesitarás instalar el paquete libnl-dev:

$ apt-get install libnl-dev
Para ejecutar el servicio hostapd cada vez que se inicie ODROID, edita el archivo /etc/init.d/hostapd y asegúrate de que incluya la siguiente línea:
$ DAEMON_CONF=/etc/hostapd/hostapd.conf

Configurar Samba

Crea los directorios que deseas compartir:

$ mkdir -p /mydrone
$ mkdir -p /mydrone/images
Edita el archivo de configuración de samba. Si no existe, crea uno nuevo:
$ vi /etc/samba/smb.conf

[global]
workgroup = MyDroneGroup
server string = Drone Server
netbios name = mydrone
security = user
map to guest = bad user
dns proxy = no
#===== Share Definitions =====
[images]
path = /mydrone/images
browsable = yes
writable = yes
guest ok = yes
read only = no
Esta configuración creará el recurso compartido "images" sin restricciones en los clientes que podrán añadir o eliminan archivos.

Configurar DHCP

Edita el archivo /etc/dhcp/dhcpd.conf y asegúrate de que tenga todas las líneas que aparecen a continuación:

$ vi /etc/dhcp/dhcpd.conf

# option definitions common to all supported networks...
option domain-name "mydrone.local";
option domain-name-servers dns.mydrone.local
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.100 192.168.100.200;  <-- clients will get IP addresses in this range
}
Añade todas las direcciones IP de posibles clientes al archivo /etc/hosts:
$ vi /etc/hosts

127.0.0.1 localhost
192.168.100.1 odroid-pc odroid
192.168.100.100 client100
192.168.100.101 client101
192.168.100.102 client102
....
192.168.100.200 client200
Puedes añadir más rápido todas las direcciones IP de los clientes con el siguiente comando:
$ (for i in $(seq 100 200); do echo 192.168.100.$i client$i; done) >> /etc/hosts
Reinicia ODROID y con un poco de suerte, se creará un Punto de Acceso al que podrás conectarte, tal y como se muestra en el siguiente apartado.

Establecer conexión desde un PC con Windows

Para conectarte desde una máquina con Windows 8.1, haz clic en el ícono de red que está junto al reloj y luego haz clic en "MyDrone" y "Conectar". Transcurridos unos 30 segundos, debería aparecer un mensaje que diga "La conexión es limitada" porque es posible que el ODROID no tenga acceso a Internet. Esto es normal.

Figura 2 - Conectando a la red MyDrone

Abre un Explorador de archivos y escribe \mydrone en la barra de direcciones, debería aparecer el contenido del directorio “images” del ODROID.

Figura 3: Explorando el contenido del directorio “images” del ODROID

Para comentarios, preguntas y sugerencias, visita el artículo original en http://ardupilot.org/dev/docs/odroid-wifi-access-point-for-sharing-files-via-samba.html.

ODROID-HC2: Potente Almacenamiento de 3.5"

El ODROID-HC2, disponible para su compra en el Sitio Web de Hardkernel, es un mini PC muy económico y la solución perfecta para montar un servidor de almacenamiento en red (NAS). Este servidor en la nube centraliza los datos y permite a los usuarios compartir y transmitir archivos multimedia a teléfonos, tablets y otros dispositivos a través de una red. Es ideal para multitud de situaciones tales como: usuarios con muchos dispositivos, recursos compartidos entre miembros de una familia, desarrolladores o un grupo de trabajo. El ODROID-HC2 es capaz de adaptarse a tus necesidades específicas. Hay un montón de software disponible, fácil de usar y con una configuración muy simple. El primer paso es determinar la capacidad de almacenamiento de tu servidor. Además, dependiendo de tus necesidades, la estructura está hecha para ser apilable, de modo que puede colocar más HC2 uno encima de otro para expandir el sistema.

Figura 1 - ODROID-HC2 es el “Cloud Server” de nueva generación de Hardkernel

El HC2 está basado en la potente plataforma ODROID-XU4 y puede ejecutar Samba, FTP, NFS, SSH, NGINX, Apache, SQL, Docker, WordPress y muchos otros programas de servidor sin dificultad, además de distribuciones completas de Linux como Ubuntu, Debian, Arch y OMV. Las distribuciones de sistemas operativos disponibles y listas para ser usadas se pueden descargar desde nuestra WiKi. Cualquier sistema operativo que soporte el XU4 es totalmente compatible con el HC2.  https://wiki.odroid.com/odroid-xu4/os_images/os_images.

El puerto Ethernet Gigabit y el puesto SATA de alto rendimiento nos permite disponer de un dispositivo de almacenamiento en red muy rápido. El cuerpo de estructura metálica está diseñado para almacenar un HDD/SSD de 2,5 pulgadas o un HDD de 3.5 pulgadas con una increíble disipación de calor.

Figura 2: Típica configuración de un ODROID-HC2 con una tarjeta microSD de 8GB, disco duro de 3.5 pulgadas, fuente de alimentación de 12V/2A, cable Ethernet y carcasa ODROID-HC2

Características principales

  • CPUs Samsung Exynos 5422 Cortex-A15 2Ghz y Cortex-A7 Octa core
  • 2Gbyte de RAM LPDDR3 PoP apilada
  • Puerto SATA-3 para el sistema de almacenamiento HDD/SSD de 3.5 o 2.5 pulgadas, hasta una altura de 27mm
  • Puerto Gigabit Ethernet
  • Puerto USB 2.0 Host
  • Ranura para tarjeta micro-SD UHS-1 para el soporte de arranque
  • Aproximadamente 197mm x 115mm x 42mm (estructura de refrigeración de aluminio)
  • Imágenes de sistema operativo de servidor Linux basadas en el moderno Kernel 4.14 LTS

Garantizaremos la producción del ODROID-HC2 hasta mediados de 2020, pero esperamos continuar con su fabricación mucho después.

Rendimiento de la CPU y la RAM

Ejecutamos varias pruebas de rendimiento para medir la potencia de cálculo del HC2/XU4. Las pruebas también se realizaron en la Raspberry Pi 3 Modelo B, en el ODROID-C1+ y en el ODROID-C2. Los valores de los resultados de las pruebas fueron ajustados uniformemente para facilitar la comparación. La potencia de cálculo del HC2/XU4 se cuantificó en aproximadamente 7 veces más rápida que la Raspberry Pi 3 más reciente gracias a los núcleos Cortex-A15 de 2Ghz y a un mayor ancho de banda de memoria de 64 bits. Usar el HC2/XU4 como un ordenador proporciona una experiencia prácticamente de "servidor profesional", a diferencia del bajo rendimiento de la mayoría de los ordenadores de placa reducida. Especialmente para los desarrolladores, compilar código con el HC2/XU4 es súper rápido. La memoria RAM DDR3 de 2 GB de alto rendimiento es una ventaja añadida que permite que la mayoría de los programas puedan ser compilador directamente en el HC2/XU4.

Figura 3 - Rendimiento de CPU/RAM del ODROID-XU4 frente al ODROID-C1 +, ODROID-C2 y Raspberry Pi 3 utilizando Unixbench: Dhrystone-2, Unixbench: Double-Precision Whetstone (x3), Nbench 2.2.3: Integer (x40), Nbench 2.2.3: Floating-Point (x100), y mbw 100: Memory Bandwidth (MiB/s) benchmarks

Prueba de Rendimiento (Puntuaciones) Raspberry Pi 3 ODROID-C1+ ODROID-C2 ODROID-XU4/HC1/HC2
Unixbench: Dhrystone-2 865.4 1571.6 2768.2 5941.4
Unixbench: Double-Precision Whetstone (x3) 1113 1887.3 3076.8 6186.3
Nbench 2.2.3: Integer (x40) 619.92 1173.6 1808.92 2430.52
Nbench 2.2.3: Floating-Point (x100) 781.8 1245.3 2300.3 3787.3
mbw100: Memory Bandwidth (MiB/s) 542.912 616.339 1472.856 2591.461

Rendimiento de Ethernet

El HC2/HC1/XU4 tiene un controlador Ethernet Gigabit integrado. La velocidad de transmisión bidireccional se cuantificó en alrededor de unos 910 Mbps. Gracias a la tecnología avanzada del controlador RTL8153, el controlador Ethernet del HC2 supera con notable facilidad las soluciones de conectividad de anteriores generaciones. Las pruebas que se muestran en la Figura 4 se realizaron con los siguientes comandos: commands:

Modo Servidor

$ iperf -s
Modo Cliente
$ iperf -c [ip address] -P 10 -W 32k
Figura 4 - Resultados de las pruebas de rendimiento del Ethernet para ODROID-XU3 y ODROID-XU4

Rendimiento Ethernet XU3 On-board 100Mbps XU3 External 1Gbps HC2/XU4 On-board 1Gbps
iperf Server on SBC (Mbit/sec) 114.0 419 915.0
iperf Client on SBC (Mbit/sec) 114.0 625 911.0

Rendimiento del almacenamiento en red

Hoy día los sistemas de almacenamiento en red como NAS y servicios en la nube son muy populares. Ejecutamos el famoso Open Media Vault o OMV, SO sobre el HC2 para medir el rendimiento de almacenamiento en red. Se conectó una unidad de disco duro NAS Western Digital 3.5” de 8TB al HC2 a través del puerto SATA. El puerto Gigabit Ethernet se conectó a un ordenador portátil con Windows 10 usando un simple Hub.

Copiamos un gran archivo de 8GB desde el HC2 al PC a través de una conexión Samba. Esto dio como resultado una velocidad de descarga de alrededor de unos 110MB/seg. La velocidad de subida rondó los 95MB/seg. La velocidad de transferencia es muy similar a la que presenta los actuales productos NAS comerciales de gama alta. El ODROID-HC2 es una estupenda solución para montar un servidor personal de almacenamiento en red.

Figura 5 - Resultados de las pruebas de copiado de datos hacia y desde el ODROID-HC2 usando Samba a través del puerto Ethernet Gigabit

Especificaciones

CPU Samsung Exynos5422 ARM® Cortex™-A15 Quad 2.0GHz/Cortex™-A7 Quad 1.4GHz
Memoria DRAM 2Gbyte LPDDR3 RAM PoP (750Mhz, ancho de banda de memoria 12GB/s, bus 2x32bit)
GPU Mali ™ -T628 MP6 OpenGL ES 3.1/3.0/2.0/1.1 y OpenCL 1.2 Perfil completo
Interfaz SATA HDD/SSD Bridge JMicron JMS578 USB 3.0 a SATA con capacidad UAS para garbar a una velocidad de transferencia de más de 300MB/seg Se puede instalar HDD/SSD de 3.5 o 2.5 pulgadas. Algunos agujeros del HDD HGST/WD no son compatibles con el HC2
Ranura micro-SD Ranura micro-SD compatible con UHS-1 hasta 128 GB/SDXC
USB2.0 Host 1 puerto USB conector tipo A HighSpeed estándar
LEDs De encendido, de estado del sistema y de estado del SATA
LAN Ethernet Gbit Ethernet 10/100/1000Mbps con conector RJ-45 (con soporte Auto-MDIX)
Entrada de alimentación Clavija DC en forma de cilindro de 5.5/21.mm para la entrada de 11~13 voltios (se recomienda una fuente de alimentación de 12V/2A)
Software de sistema Ubuntu 16.04 + OpenCL sobre el Kernel Linux 4.14 LTS Debian, DietPi, OMV u otras distribuciones de Linux también disponibles. Se puede acceder al código fuente completo a través de nuestro Github.
Tamaño 197x115x42mm (peso: 361 gramos)

Figura 6 - El ODROID-HC2 es apilable

Figura 7 - El ODROID-HC2 ha sido probado con diversas unidades de 3,5 pulgadas, así como con varios sistemas de almacenamiento de 2,5 pulgadas

Para obtener más información y detalles técnicos sobre el ODROID-HC2, visita la página del producto en http://www.hardkernel.com/main/products/prdt_info.php?g_code=G151505170472.

Usando SquashFS como Sistema de Archivos Root de Sólo Lectura

Esta guía describe cómo utilizar SquashFS. SquashFS (http://goo.gl/WT6Lxf) es un sistema de archivos comprimido de sólo lectura para Linux sobre plataformas basadas en el ODROID-XU4 como son HC1, HC2, MC1 y XU3. La tasa de corrupción de RootFS (http://goo.gl/LMVjzS) tras producirse fallos de energía queda reducida muy significativamente porque SquashFS es un sistema de archivos muy robusto. Ten en cuenta que un sistema SquashFS integrado sólo funcionará correctamente si la versión del Kernel es la 4.14.5-92 o superior.

Preparación

Necesitas preparar una tarjeta microSD o un módulo eMMC de arranque con una imagen mínima de Ubuntu. Para obtener instrucciones sobre cómo escribir imágenes en una tarjeta, consulta la Wiki en http://goo.gl/FNRzAk. Esta guía da por hecho que vas a usar una tarjeta microSD.

Instalación

Puedes instalar squashfs-tools en tu sistema ODROID-XU4. Es la herramienta para crear sistemas de archivos Squash.

$ sudo apt install squashfs-tools

Creación de la imagen del sistema de archivo root squash

Para crear la imagen del sistema de archivos root Squash son necesarios los siguientes pasos:

  • Eliminar el script que cambia de tamaño de forma automática
  • Editar /etc/rc.local y eliminar la función del cambio automático de tamaño
  • Editar /etc/fstab y eliminar la opción de montaje root
  • Utilizar mksquashfs para crear sistemas de archivos root de solo lectura

$ sudo rm /media/ck/rootfs/aafirstboot
 $ sudo cat /media/ck/rootfs/etc/rc.local
 #!/bin/sh -e
 #
 # rc.local
 #
 # This script is executed at the end of each multiuser runlevel.
 # Make sure that the script will "" on success or any other
 # value on error.
 #
 # In order to enable or disable this script just change the execution
 # bits.
 #
 # By default this script does nothing.

if [ -f /aafirstboot ]; then /aafirstboot start ; fi

exit 0

$ sudo nano /media/ck/rootfs/etc/rc.local
 $ sudo cat /media/ck/rootfs/etc/rc.local
 #!/bin/sh -e
 #
 # rc.local
 #
 # This script is executed at the end of each multiuser runlevel.
 # Make sure that the script will "" on success or any other
 # value on error.
 #
 # In order to enable or disable this script just change the execution
 # bits.
 #
 # By default this script does nothing.

exit 0
 $ sudo cat /media/ck/rootfs/etc/fstab
 UUID=e139ce78-9841-40fe-8823-96a304a09859 / ext4 errors=remount-ro,noatime 0 1
 LABEL=boot /media/boot vfat defaults 0 1

$ sudo nano /media/ck/rootfs/etc/fstab
 $ sudo cat /media/ck/rootfs/etc/fstab
 LABEL=boot /media/boot vfat defaults 0 1

$ sudo mksquashfs /media/ck/rootfs/ squash.rootfs
 Parallel mksquashfs: Using 8 processors
 Creating 4.0 filesystem on squash.rootfs, block size 131072.
 [================================================-] 36821/36821 100%
 Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
 compressed data, compressed metadata, compressed fragments, compressed xattrs
 duplicates are removed
 Filesystem size 423720.81 Kbytes (413.79 Mbytes)
 42.27% of uncompressed filesystem size (1002435.26 Kbytes)
 Inode table size 464688 bytes (453.80 Kbytes)
 28.95% of uncompressed inode table size (1604883 bytes)
 Directory table size 433806 bytes (423.64 Kbytes)
 39.67% of uncompressed directory table size (1093654 bytes)
 Xattr table size 48 bytes (0.05 Kbytes)
 40.00% of uncompressed xattr table size (120 bytes)
 Number of duplicate files found 2340
 Number of inodes 45340
 Number of files 31162
 Number of fragments 1912
 Number of symbolic links 10373
 Number of device nodes 79
 Number of fifo nodes 0
 Number of socket nodes 0
 Number of directories 3726
 Number of ids (unique uids + gids) 22
 Number of uids 6
 root (0)
 man (6)
 dnsmasq (104)
 rtkit (107)
 libuuid (100)
 avahi-autoipd (105)
 Number of gids 18
 root (0)
 video (44)
 audio (29)
 tty (5)
 kmem (15)
 disk (6)
 dip (30)
 shadow (42)
 utmp (43)
 messagebus (106)
 ssh (111)
 mlocate (110)
 staff (50)
 avahi-autoipd (113)
 netdev (102)
 adm (4)
 scanner (109)
 mail (8)

Sistemas de archivos Squash en una tarjeta microSD

Si todo ha ido bien, desmonta /dev/sdc2 (si fuera necesario) y usa dd para copiar squash.rootfs en /dev/sdc2:

  • Desmontar todas las particiones de la microSD
  • Usar dd para copiar el archivo squash.rootfs a la partición #2 de la microSD
  • Volver a conectar la tarjeta microSD y verificar el montaje

$ mount
 /dev/sdc2 on /media/ck/rootfs type ext4 (rw,nosuid,nodev,uhelper=udisks2)
 /dev/sdc1 on /media/ck/boot type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)
 $ sudo umount /dev/sdc?
 $ sudo dd if=./squash.rootfs of=/dev/sdc2
 $ sync
 $ mount

/dev/sdc2 on /media/ck/disk type squashfs (ro,nosuid,nodev,uhelper=udisks2)
 /dev/sdc1 on /media/ck/boot type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks2)

Modificación de las opciones de montaje rootfs en el archivo boot.ini

Puedes encontrar el UUID de la partición ext4 en la opción "root=" dentro del archivo boot.ini:

/media/ck/boot/boot.ini

 #------------------------------------------------------------------------------------------------------
 # Basic Ubuntu Setup. Don't touch unless you know what you are doing.
 # --------------------------------
 setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro fsck.repair=yes net.ifnames=0"
 Find the bootrootfs environment and change the rootfs options as follows:
 This HOWTO using a microSD card. If you are using an eMMC module, you can use root=mmcblk0p2
 #------------------------------------------------------------------------------------------------------
 # Basic Ubuntu Setup. Don't touch unless you know what you are doing.
 # --------------------------------
 setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=/dev/mmcblk1p2 rootfstype=squashfs rootwait ro net.ifnames=0"
 $ nano /media/ck/boot/boot.ini
 $ cat /media/ckkim/boot/boot.ini | grep bootrootfs
 setenv bootrootfs "console=tty1 console=ttySAC2,115200n8 root=/dev/mmcblk1p2 rootfstype=squashfs rootwait ro net.ifnames=0"
 setenv bootargs "${bootrootfs} ${videoconfig} ${hdmi_phy_control} ${hid_quirks} smsc95xx.macaddr=${macaddr} ${external_watchdog} governor=${governor}"
Ahora simplemente asegúrate de que todo funciona correctamente. No te olvides de fijar el interruptor del modo de arranque en la tarjeta microSD. El login de odroid es "root" y la contraseña "odroid".
# mount
 sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
 proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
 udev on /dev type devtmpfs (rw,nosuid,relatime,size=952168k,nr_inodes=186804,mode=755)
 devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
 tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204240k,mode=755)
 /dev/mmcblk1p2 on / type squashfs (ro,relatime)
 securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
 tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
 tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
 tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
 cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
 cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
 cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
 cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
 cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
 cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
 cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
 cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
 cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
 cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
 systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
 mqueue on /dev/mqueue type mqueue (rw,relatime)
 debugfs on /sys/kernel/debug type debugfs (rw,relatime)
 configfs on /sys/kernel/config type configfs (rw,relatime)
 /dev/mmcblk1p1 on /media/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
 tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=204240k,mode=700)
Ejemplo: hacer que /home sea editable.

  • Crear una nueva partición ext4 en la tarjeta microSD
  • Desempaquetar squashfs-root
  • Crear nuevo directorio /media/data
  • Editar /etc/fstab para montar la partición de datos ext4 rw
  • Añadir/modificar con forme a tus preferencias y luego volver a crear squash.rootfs
  • Copiar el squash.rootfs recién creado sobre el existente en la tarjeta microSD
  • Arrancar usando la tarjeta microSD con la nueva imagen

$ sudo umount /dev/sdc?
$ sudo fdisk /dev/sdc
$ sudo mkfs.ext4 /dev/sdc3 -L data
$ sudo unsquashfs squash.rootfs
$ sudo mkdir -p squashfs-root/media/data
$ sudo nano squashfs-root/etc/fstab
$ cat squashfs-root/etc/fstab
 LABEL=boot /media/boot vfat defaults 0 1
 LABEL=data /media/data ext4 defaults 0 1
$ sudo mksquashfs squashfs-root/ squash.rootfs.1
$ sudo dd if=./squash.rootfs.1 of=/dev/sdc2
Reinicia y usa la tarjeta microSD que contiene la nueva imagen.
# mount | grep mmc
 /dev/mmcblk1p2 on / type squashfs (ro,relatime)
 /dev/mmcblk1p1 on /media/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)
 /dev/mmcblk1p3 on /media/data type ext4 (rw,relatime,data=ordered)
Por ejemplo, se puede usar overlayfs (http://goo.gl/1UGThG) activado como módulo en el Kernel 4.14.y. Usa overlayfs para hacer /home editable.
# modprobe overlay
 # lsmod
 Module Size Used by
 overlay 65536 0
 joydev 20480 0
 spidev 20480 0
 spi_s3c64xx 20480 0
 exynos_gpiomem 16384 0
 ipv6 380928 28
 # mkdir -p /media/data/home
 # mkdir -p /media/data/home/upper
 # mkdir -p /media/data/home/work
 # mount -t overlay -o lowerdir=/home,upperdir=/media/data/home/upper,workdir=/media/data/home/work overlay /home
 # mount
 ...
 overlay on /home type overlay (rw,relatime,lowerdir=/home,upperdir=/media/data/home/upper,workdir=/media/data/home/work)
 # cd /home
 # touch file1
 # ls
 file1
Para comentarios, preguntas y sugerencias, visita el artículo de la wiki sobre SquashFS en http://goo.gl/Xw2epe.

PiFace: Control and Display 2

Para aquellos que posean la PiFace Control and Display 2 (https://goo.gl/VeBNJw), y quieran hacerla compatible con el ODROID-C2, tienen que hacer algunas modificaciones a nivel de hardware. Las modificaciones ayudarán para que funcione con el driver bitbang, ya que Pifacecad2 necesita cambiar los pines CE0 y CE1.

En primer lugar, retira la soldadura de los pines número 24 y 26 del ODROID. A continuación, suelda los cables de los pines 24 y 26 del ODROID sobre el Pifacecad y cúbrelos, tal y como se muestra en la Figura 1.

Figure 1 - Connecting the pins using two wires
Figura 1 - Conectando los pines usando los dos cables

Figure 2 - Another view of the assembled PiFace and ODROID-C2
Figura 2 - Otra perspectiva del ODROID-C2 y PiFace montados

Figure 3 - The PiFace mounted on top of the ODROID-C2
Figura 3 - El PiFace montado en la parte superior del ODROID-C2

Figure 4 - A custom 3D-printed case for the PiFace
Figura 4: una carcasa personalizada impresa en 3D para la PiFace

He diseñado una carcasa para impresoras 3D, la cual está disponible en: https://www.thingiverse.com/thing:2750165.

Software

Usando el sistema operativo Debian Odroid-Jessie64, instala la librería Pifacecad con los siguientes comandos:

$ sudo apt install python3-pifacecad git
$ git clone https://github.com/piface/pifacecommon.git
$ cd pifacecommon/
$ sudo python3 setup.py install
$ git clone https://github.com/piface/pifacecad.git
$ cd pifacad
$ sudo python3 setup.py install
Es necesario modificar la librería para que funcione con ODROID-C2:
$ nano /usr/local/lib/python3.4/dist-packages/pifacecad/__init__.py
Como yo no necesitaba funciones de infrarrojos, decidí comentar las siguientes líneas:
#from .ir import (
 #IREventListener,
#)

$ nano /usr/local/lib/python3.4/dist-packages/pifacecad/core.py
Modifica la línea para seleccionar el dispositivo spi correcto: /dev/spidev0.0 (en lugar de 0.1 por defecto):
DEFAULT_SPI_CHIP_SELECT = 0

$ nano /usr/local/lib/python3.4/dist-packages/pifacecommon/interrupts.py
Modifica estas líneas para reemplazar la GPIO 25 de Raspberry Pi por la GPIO 231 del ODROID:
GPIO_INTERRUPT_PIN = 231
gpio231 = open(GPIO_INTERRUPT_DEVICE_VALUE, 'r')
epoll.register(gpio231, select.EPOLLIN | select.EPOLLET)
Además, comprueba si el bitbang está funcionando en el ODROID-C2:
$ lsmod | grep spi
Este comando devolverá los drivers SPI cargados por defecto con Debian:
spidev
spi_gpio
spi_bitbang
Para comentarios, preguntas y sugerencias, visita el post original del foro en https://forum.odroid.com/viewtopic.php?f=139&t=29496.

Juegos Android: Data Wing, Space Frontier, and Retro Shooting - Pixel Space Shooter

¿A qué hemos estado jugando últimamente en nuestro tiempo libre? ¡A una temática muy variada! Carreras, explosiones en el espacio y cosas que estallan en mil pedazos y que nos persiguen.

Data Wing

Con asombrosas imágenes que recuerdan a los clásicos juegos árcade de antaño al estilo Tron, explotarás a lo largo de un sofisticado paisaje de neón en una extraordinaria aventura de carreras guiada por una gran historia. Si piensas que se trata de un simple juego absurdo, te sorprenderá y te encantará su historia tan bien elaborada. DATA WING envía datos críticos a través del sistema informático, siguiendo las órdenes de Madre sin cuestionar nada. Pero cuando el sistema es atacado y Madre se vuelve irracional, ¡hay que hacer algo! Mejora tus habilidades en este juego, el cual requiere que domines el arte de presionar controles con dos contactos proporcionándote la sensación árcade de una carrera con mucho estilo, centrándote en empujar los muros a lo largo de una historia de 2 horas que abarca más de cuarenta niveles.

Jugar a este juego me hace sentir mucha nostalgia por la película original de Tron.

DATAWING en Google Play Store

Space Frontier

Despega hacia la estratosfera con Space Frontier, el adictivo juego de cohetes de física al que tus amigos querrán jugar, pero no podrán (pídeles que se compren sus propios ODROIDs). Este es el perfecto juego para cuando quieres jugar, pero estás demasiado cansado para presionar más de un botón a la vez. Tu misión es lanzar tu cohete y ponerlo en órbita lo más alto posible. Un simple control táctil con el que superas cada nivel con tu cohete. Fácil de jugar, pero difícil de dominar, su jugabilidad implica que volverás una y otra vez a realizar un impulso mayor, ¡hasta que te des cuenta de que acabas de pasar 5 horas seguidas tratando de enviar ese condenado cohete un poco más lejos!

Este fue el juego que me llevé a la cama tres veces, mi ODROID en el Atrix y jugué hasta que me quedé dormido.

Space Frontier en Google Play Store

Retro Shooting - Pixel Space Shooter

Oh sí, este mes terminamos con un cariñoso juego que es como ese amigo troll que no duda en castigarte simplemente por las risas. Por supuesto, estamos hablando del clásico juego shoot-em-up, o como lo llamamos cariñosamente, infierno. En este caso, ¡es el infierno más pixelado que podríamos encontrar! Se trata de una espectacular guerra espacial en la que luchas contra un increíble aluvión de ataques de poderosos jefes en cientos de fases. Haz tu elección entre docenas de aviones de combate y drones únicos, y lucha contra los invasores de la galaxia.

Un aspecto negativo de contar con dispositivos tan livianos es que puedes destruir un montón de recursos si eres el típico desertor que tiende a lanzarlo todo cuando mueres, ¡Mantente alejado de los shooters de ODROID!

Retro Shooting - Pixel Space Shooter en Google Play Store

Juegos Linux: Juegos de Saturn - Parte 1

Hace algún tiempo, hablé de la Sega Saturn y de cómo puedes jugar a sus juegos si tienes un ODROID-XU3/XU4. Actualmente, no hay muchas placas con las que puedas jugar a Saturn. De hecho, el ODROID-XU3/XU4 podría ser la única placa ARM del mercado que tiene un emulador Sega Saturn funcional que no requiere ver una presentación de diapositivas. Por ello, creo que es hora de que analicemos con más detalles el sistema Sega Saturn para ODROID-XU3/XU4.

He decidido crear una lista de juegos de Sega Saturn a los que me gusta jugar en el ODROID. Para esta primera entrega, he seleccionado algunos con los que especialmente disfruto jugando en el ODROID, voy a entrar un poco más en detalle en cada uno de ellos. Sólo he elegido juegos con los que personalmente disfruto jugando. Esto no quiere decir que otros no funcionen. Simplemente significa que no son de mi tipo, o que los disfruto más en otras consolas o sistemas. Este artículo tiene muchos shoot'em ups, así que ten paciencia ya que Saturn también contaba con bastantes títulos arcade.

Amok

En Amok, manejas un supuesto "Slambird", un vehículo tipo mecha que puede ir por tierra y sumergirse bajo el agua. Está equipado con varias armas y simplemente disparas a todo lo que te encuentras a tu paso.

Figure 1 - Amok Start screen for the Sega Saturn
Figura 1 - Pantalla de inicio de Amok para Sega Saturn

Puede que no sea extremadamente espectacular, pero me gusta prácticamente todo sobre este juego. Tiene una gran historia y los informes de la misión son bastante buenos para ser un juego de este tipo. Llendo al grano, básicamente se trata de un shooter al estilo perseguir y destruir. Sigues a determinados objetivos de la misión, tiene algunas armas para elegir, y luchas a lo largo de ocho o nueve niveles, cada uno con varias fases. Puede que el sistema de juego no esté del todo desarrollado, ¡pero el juego en sí está genial!

El juego es muy divertido y de hecho se ejecuta bastante rápido y con fluidez en el ODROID. Sin embargo, hace uso del denominado frame skipping para mejorar su velocidad, pero prácticamente no llega a precibirse durante la ejecución del juego. Hay otros juegos que utiliza esta técnica en los cuales es mucho más perceptible.

Amok tiene dos modos de dificultad: el difícil y el fácil, sin ningún modo intermedio. En el modo difícil, el número de enemigos es aproximadamente tres veces mayor que el modo fácil, de modo que te sugiero que empieces el juego en el modo fácil si juegas por primera vez.

Figure 2 - Short mission briefing for the first “Pre-Level”
Figura 2 – Breve informe de la misión para el primer "Pre-Nivel"

Figure 3 - Your first enemies are sharks and exploding fishes
Figura 3 - Tus primeros enemigos son tiburones y peces que explosionan

Tienes cuatro armas a tu disposición: una pistola con munición ilimitada, misiles, misiles pesados y bombas. La mayoría de las veces, vas a querer bombardear a tus enemigos con toneladas de balas en lugar de malgastar tus misiles.

Figure 4 - After you finish all your objectives, head for the exit.
Figura 4 - Después de terminar con todos tus objetivos, dirígete a la salida.

Figure 5 - You will likely encounter stationary defence towers in the game
Figura 5 - Es probable que te encuentres con torres de defensa fijas en el juego

En cada misión, encontrarás elementos que puedes trasladar al siguiente nivel o aumentan tu salud en su conjunto. Si deambulas o te desvías de los objetivos generales de tu misión, puedes encontrar también rutas y objetos ocultos. En el menú de opciones, puedes introducir una contraseña para continuar desde un determinado nivel, o códigos de trucos que te aran invencible o te proporcionaran fuego rápido ilimitado.

Personalmente me gusta bastante el juego, ya que es bastante fácil de jugar y se ejecuta muy bien sobre el ODROID. Si tienes poco de tiempo y simplemente quieres bombardear a algunos enemigos, este es un buen juego. Aun así, te pondrá a prueba y te mantendrá ocupado durante un buen rato si quieres llegar hasta el final.

El único problema que tuve con el juego fue que la música no se escuchaba. Aunque la banda sonora está disponible en el CD, el juego no era capaz de reproducirla, lo cual era una lástima, ya que la música es muy buena. Quizás en una versión diferente del juego, la música funcione, pero en la mía no se escuchaba nada, a no ser que la música se reprodujese a través de un reproductor externo.

Albert Odyssey–Legend of Eldean

Ni siquiera puedo empezar a describir este juego. En mi opinión, probablemente sea uno de los mejores juegos para Sega Saturn.

Figure 6 - Albert Odyssey start screen
Figura 6 - Pantalla de inicio de Albert Odyssey

A menudo se decía que la Sega Saturn era inferior a la PlayStation 1 debido a la ausencia de transparencias. Eso no es del todo cierto. La arquitectura de la Saturn era muy complicada y las transparencias no siempre eran posibles. En algunas ocasiones, se utilizaba una especie de malla para simular las transparencias. Esto se debía a una limitación del hardware, principalmente en juegos 3D, o porque les facilitaba el trabajo a los desarrolladores que no les importaba hacer un esfuerzo adicional para ello. Esto dio pie al rumor de que la Sega Saturn no era compatible con las transparencias. Albert Odyssey es la prueba de que esto no era cierto.

Figure 7 - Game intro shows transparent flames over the gameplay
Figura 7: La intro del juego muestra llamas transparentes sobre el juego

Figure 8 - You can see the tree’s shadows move as you walk
Figura 8 - Puedes ver cómo se mueven las sombras del árbol mientras caminas

Albert Odyssey usa las transparencias con bastante frecuencia. Los cuadros de diálogo transparentes que muestran el fondo y las sombras de diferentes objetos como árboles, nubes, etc., se mueven dependiendo de tu dirección, o simplemente flotan sobre la pantalla. Las imágenes de muchos de los efectos especiales y las habilidades mágicas también hacían uso de la transparencia. Este juego está magníficamente trazado y se ve muy nítido. Es una verdadera obra maestra de la Sega Saturn, definitivamente es tan bueno como cualquier otro juego de PlayStation.

Figure 9 - More use of transparency as part of a spell cast early in the game
Figura 9 - Más uso de las transparencias que forman parte de un hechizo al principio del juego

Figure 10 - Standard fight formation
Figura 10 – Típica formación de combate

El resto del juego es lo que esperarías de un juego de rol: un sistema de combate por turnos con ataques, habilidades, objetos y la posibilidad de defenderte o huir de las batallas.

He oído que cuando el juego se exportó a Estados Unidos, se redujo la cantidad de enemigos que te ibas encontrándote, pero incluso así continuaba siendo muy alta. A veces apenas eras capaz de dar unos cuantos pasos antes de que fueras arrastrado al siguiente combate.

Por lo que he visto hasta ahora, Albert Odyssey tiene una historia muy interesante, y los gráficos son realmente increíbles. El juego presenta colores muy cálidos y brillantes, pero también fríos y oscuros para determinadas escenas, como son las mazmorras. El juego tiene muchos detalles, como son los numerosos elementos diminutos dentro de las casas y los poblados, aportando una rica experiencia de juego.

La música del juego se reproduce en su totalidad desde las pistas de sonido del CD y suena estupendamente. Incluso he tenido la tentación de escucharla sin jugar realmente al juego. Este juego pone de manifiesto realmente de lo que era capaz Saturn. Me hubiera encantado tener más juegos como este para Saturn. Con más juegos de esta calidad, la Sega Saturn podría haber llegado a ser un verdadero competidor de la PlayStation 1 en el área de los juegos de rol y 2D.

Entonces, ¿esto significa que Albert Odyssey es una maravilla sobre el ODROID? En su mayor parte, sí, aunque presenta algunos problemas de poca importancia. Por ejemplo, el juego no se ejecuta a máxima velocidad, lo que significa que debes usar el frame skipping para adecuar la velocidad, lo cual provoca saltos visibles al desplazarte. No son de lo peor, pero se aprecian. Si desactivas el frame skipping con F4, el desplazamiento se vuelve suave como la mantequilla, pero te desplazarás a la mitad de velocidad de cuando lo haces normalmente.

Desactivar el frame skipping también afecta a la música y al sonido, lo caul hace que también se reproduzcan a la mitad de velocidad. Si no te molesta, desactiva mejor el frame skipping y lograrás una experiencia más fluida. En algunos casos, también observé algunos efectos que destelleaban en esceso, posiblemente derivados de las transparencias. La sombra del dragón en la Figura 9 destellaba un poco, y más adelante un foco también relampagueaba. Aparte de esto, no he visto más problemas visuales.

Incluso con el frame skipping activado, la velocidad no es del todo del 100%, pero por lo general no te darás cuenta de ello. Sin embargo, lo notará en la introducción. La introducción está dividida en un tramo visual que está renderizado por el propia Saturn, y una parte de audio que se reproduce desde el CD. Lamentablemente, no están sincronizados y como resultado, la introducción se reproduce algo más lenta que la pista de audio, especialmente sin frame skipping. Después de la introducción, el problema de sincronización ya no se apreciable.

Si eres un fanático de los juegos de rol, Albert Odyssey es un título imprescindible que deber tener en tu colección de Sega Saturn.

Cotton 2: Magical Night Dreams

Cotton 2 es un gracioso juego tipo "cute em up", lo cual significa que se trata de un shooter con adorables elementos al estilo anime, es por ello que la serie Cotton es muy conocida. Es un título de un perfecto arcade para la Sega Saturn.

Figure 11 - Cotton 2 for the Sega Saturn
Figura 11 - Cotton 2 para Sega Saturn

Una mejora importante con respecto a Cotton 1 es que tienes la posibilidad de jugar con dos jugadores (y dos brujas) al mismo tiempo, formando así un equipo con el que luchas a lo largo de cada nivel. Como suele pasar con la serie Cotton, los gráficos están muy bien trazados y la música encaja bastante bien con la configuración.

Esta versión no tiene ni escenas de video ni banda sonora de audio, aun así, la música es muy pegadiza y hay algunas animaciones que te ayudan con la historia. Como es un título exclusivo japonés, no entenderás nada, pero se le ve muy amigable.

Figure 12 - Fly on your broom and kill the oncoming monsters
Figura 12 - Vuela con tu escoba y mata a los monstruos que se acercan

Cuando eliminas a los monstruos, éstos lanzan cristales a los que puedes disparar, que luego cambian de color: naranja para fuego, azul para hielo y verde para viento son tus principales poderes mágicos. Hay un cuarto color, amarillo, que aumenta la potencia general de tus ataques sin darte ningún poder mágico. Puede acumular hasta tres poderes mágicos, diferentes o iguales, para lanzar un ataque especial que causa mucho daño. Tu estilo de ataque también cambia de acuerdo con tu poder mágico actual.

No hay mucho más que decir sobre este juego aparte de que se trata de un divertido juego de disparos de desplazamiento lateral, y que puedes jugar con un amigo en tu ODROID usando un segundo mando. Las opciones del menú te permiten ajustar tu dificultad y tus vidas, dándote la posibilidad de adaptar el juego a tu nivel de experiencia.

Figure 13 - Cotton Boomerang ported to the Sega Saturn from the arcade version
Figura 13 - Cotton Boomerang exportado a la Sega Saturn desde la versión arcade

Cotton Boomerang es más de lo mismo, con algunos pequeños cambios. Por ejemplo, hay más personajes jugables, y si uno de tus personajes muere, cambias a otro personaje. También es un juego muy divertido.

Darius Gaiden

Darius Gaiden es otro shoot'em up de desplazamiento lateral, aunque no tan gracioso. Es un tipo de shooter bastante interesante, pero nada fácil. Una cosa que no me gusta de este juego es que cuando mueres pierdes todos tus poderes, dejándote casi completamente indefenso en la batalla. Esto resulta bastante molesto, he oído hablar a mucha gente que han jugado al juego hasta que mueren y luego lo abandonan, lo cual es comprensible. A veces puedes llegar muy lejos, y empezar de nuevo desde cero puede ser bastante frustrante.

Aun así, es un juego divertido con buenos gráficos. También requiere frame skipping para jugar con fluidez, aunque algunas escenas se ejecutan bastante bien incluso sin tener activado el frame skipping. Desactivar el frame skipping es una buena forma de ralentizar el juego y hacerlo un poco más fácil, ya que te da más tiempo para reaccionar a los ataques enemigos.

Figure 14 - Darius Gaiden for Sega Saturn running on the ODROID
Figura 14 - Darius Gaiden para Sega Saturn ejecutándose en el ODROID

Figure 15 - Fighting a boss in Darius Gaiden can be pretty hard
Figura 15 - Luchar contra un jefe en Darius Gaiden puede ser bastante difícil

Una vez que finalices una batalla contra un jefe, aparece una selección de nivel similar a Outrun y otros juegos de carreras, que te permite decidir qué camino seguir: hacia arriba o hacia abajo. Esto da una cierta sensación de repetición si realmente logras terminar el juego o simplemente tienes que empezar de nuevo.

Figure 16 - Losing all your weapons in a boss fight is very frustrating
Figura 16 - Perder todas tus armas en un combate contra un jefe es muy frustrante

Figure 17 - Level select after defeating a boss
Figura 17 – Seleccionando el nivel después de derrotar a un jefe

Este juego es bastante divertido, aunque morir es un verdadero fastidio.

Figure 18 - There are quite a few settings to fight in and enemies to encounter
Figura 18 - Hay bastantes escenarios para luchar en los que te encuentras multitud de enemigos

Figure 19 - Fighting the stage B boss with newly upgraded weapons
Figura 19: Luchando contra el jefe del nivel B con armas recientemente mejoradas

Detana Twinbee Yahoo! - Deluxe Pack

Sí, he incluido otro shooter en esta lista, que es otro amigable 'em up'. De hecho, este es desmesuradamente adorable. También te desplazas de arriba a abajo, pero no lateralmente.

Como ya hemos hablado de un par de shooters, intentaré no alargarme demasiado, tanto como que el juego es bastante corto. Puedes terminar una ronda en aproximadamente 30 minutos o menos, pero es muy divertido, y si fijas el nivel de dificultad en fácil es bastante sencillo de superar, lo cual hace que sea muy amigable para que jueguen los niños.

Figure 20 - Detana Twinbee Yahho! Deluxe Pack
Figura 20 – Paquete de lujo Detana Twinbee, Yahho!

Figure 21 - Cute anime style with nice, bright colors
Figura 21 – Un estilo anime muy amigable con colores agradables y brillantes

Cuentas con dos aviones de ataque diferentes. Tus disparos normales van directamente hacia adelante y matan a los enemigos que aparecen frente a ti, mientras que el segundo ataque lanza bombas para destruir objetos o enemigos que están sobre el terreno. En realidad, puedes utilizar los dos botones a la vez para matar a tantos enemigos como puedas.

También hay un ataque de carga que consiste en un puño gigante que lanzas por delante de ti, el cual hace bastante daño. Es bastante bueno para matar jefes u otros grandes enemigos. Si disparas a las nubes. Dejarán caer campanas que puedes recoger, o si les disparas, rebotan y cambian de color. Las campanas de diferentes colores te dan diferentes tipos de poderes, como un escudo o más munición.

Detana Twinbee viene con algunas escenas de anime muy buenas, que no entiendo en absoluto, aunque son divertidas de todos modos. Recomiendo sumamente este juego.

Elevator Action Returns

Mencioné brevemente este juego en septiembre de 2016 cuando hablé por primera vez de la Sega Saturn en ODROID. Aún me sigue gustando bastante este juego.

Figure 22 - After a nice intro you_re presented with a rather bland start screen
Figura 22 - Después de una buena introducción, aparece una pantalla de inicio bastante sosa

Este juego te permite jugar con hasta dos jugadores. El objetivo es luchar dentro de un edificio subiendo y bajando por diferentes ascensores (de ahí es de donde viene el nombre) y abriendo diferentes puertas. Las puertas azules te proporcionan elementos como bombas adicionales, puntos y salud, y las puertas rojas son objetivos de misión. El objetivo final es abrir todas las puertas rojas y luego dirigirte a la salida.

Figure 23 - I just found some extra weapons
Figura 23 - Acabo de encontrar algunas armas extra

Figure 24 - Beautifully drawn graphics with lots of tiny details
Figura 24: Gráficos perfectamente trazados con muchos detalles minúsculos

Realmente disfruto luchando a lo largo de los diferentes niveles. Si te gusta los shooter de acción y quieres destrozar a varios enemigos solo o con un amigo, este juego es una forma increíblemente divertida de hacerlo. Se ejecuta muy bien en el ODROID-XU3/XU4. También es un juego muy recomendable.

La siguiente lista contiene juegos que merecen menciones honoríficas:

Brain Dead 13

Brain Dead 13 es un juego de video de movimiento completo (FMV) QuickTime, similar a Dragon's Lair o Space Ace. Sin embargo, me gusta bastante más, ya que te permite elegir tu propio camino y es más benevolente, con vidas/continúes ilimitados y la capacidad de guardar tus progresos. Tiene algunos fallos gráficos menores, especialmente en el menú, pero el juego en sí funciona perfectamente.

Command and Conquer

La estrategia en tiempo real (RTS), el clásico Command and Conquer de Westwood, también fue portada de Saturn. Funciona sorprendentemente bien considerando que se trata de un juego de estrategia en tiempo real, y al que juegas con un mando en lugar de un ratón. La versión de Saturn incluye el juego completo, incluidos todos los videos y la música de las versiones de DOS para PC. Utiliza códigos de nivel para guardar la partida y hay algunos problemas con los videos, los cuales aparecen un poco entrecortados, pero aparte de eso, la experiencia de juego es muy agradable. A excepción de los mandos, es muy similar a la versión DOS para PC.

Cyberia

Cyberia es una mezcla entre un juego de aventura en el que se resuelven rompecabezas y un juego de acción arcade. Utiliza videos 3D renderizados previamente para contar la historia, que están un poco anticuados según los estándares actuales. Presenta algunos elementos de acción como minas o aviones que se acercan disparando. El juego esta completamente interpretado por voz, lo cual es muy bueno. Además, guarda la partida automáticamente en la memoria del sistema o en la tarjeta de memoria después de cada paso importante y si mueres, puedes repetir la misma etapa una y otra vez.

DoDonPachi

DoDonPachi es otro shooter arcade exportado a Saturn. Basicamente es un festejo de balas, y a veces son bastante difíciles de esquibar. Por esa razón, disfruto más jugando sin frame skipping. El juego sigue siendo rápido, de modo que no sientes que estás haciendo trampas. Ofrece el modo Arcade y Saturn, donde este último se puede configurar para ser un poco más fácil que el modo Arcade, con más vidas, continues y bombas a tu disposición. Me gusta mucho este juego. Es divertido si solo quieres disparar a algo.

Dragon Force

Había escuchado muchos elogios de este juego, y quería probarlo por mi mismo. Los gráficos son muy buenos con videos de anime, escenas y personajes muy bien trazados, e incluso el juego en sí mismo es muy divertido con una extensa historia para leer y muchas cosas que hacer.

Sin embargo, para ser honesto, encontré a Dragon Force bastante difícil de entender. Hay muchas opciones, pero sin leer primero el manual, no tiene ni idea de qué hacer. Perdí la mayoría de mis batallas al principio hasta que descubrí cómo funcionaba los combates. Incluso entonces, era bastante fácil perder si tomaba decisiones equivocadas. Me enfrenté a 30 arqueros con 10 Samurai y yo como poderoso mago, y aun así me derrotaron. Probablemente necesite dedicarle mucho más tiempo a este juego, ya que parece interesante, las pocas horas que pase jugando terminé perdiendo.

Consola de Juegos: Ejecuta tus Juegos Favoritos en un ODROID-C2 Usando Android

He desarrollado una consola de juegos usando un ODROID-C2 con Android 6. La uso para jugar con amigos allí donde esté. Puedes ver un video de la consola en acción en https://www.youtube.com/watch?v=wfTRXIWRP8g.

Figure 1 - Gaming console using an ODROID-C2 and Android 6
Figura 1 - Consola de juego usando un ODROID-C2 y Android 6

Materiales

  • ODROID-C2
  • Dongle Bluetooth
  • 3 mandos Bluetooth PS3
  • 1 mando Xbox360 conectado por cable
  • Teclado inalámbrico
  • HHD de 2.5" con adaptador USB
  • Cargador usb 5v2a
  • Cable HDMI

Lo guardé todo en un bonito maletín para portátiles. Podemos decir que "prácticamente es bricolaje", ya que Android no es Retropie. Tienes que configurarlo todo tú mismo si vas a usarlo para juegos. Me llevo algo de tiempo elegir las aplicaciones adecuadas que iba a utilizar, pero ahora todo funciona de la forma que quería.

Software

  • Emuladores: EPSXE opengl, Mupen64fz, Retroarch y Reicast
  • Controlador Sixaxis para poder configurar los mandos de PS3
  • Sambadroid para compartir la tarjeta SD a través de la LAN
  • Mixplorer como administrador de archivos
  • HAL launcher
  • Teamviewer host
  • Droidmote Server para usar un smartphone como control remoto/mando

La figura 2 muestra la carcasa de Lego que monté con algunas piezas tiradas por ahí. Me encanta, incluso si hubiera tenido que cortar algunas piezas. La mantengo en vertical porque aparentemente nunca se calienta

Figure 2 - Lego case
Figura 2 – Carcasa Lego

Tal y como se observa en la Figura 3, todas las piezas están pegadas, excepto la parte superior.

Figure 3 - Glued parts of case
Figura 3 – Piezas de la carcasa encoladas

La Figura 4 muestra la conexión y el uso de un disco duro estándar (HDD). Ten en cuenta que la unidad de disco duro coincide con el tamaño de la carcasa de Lego casi a la perfección dándole una apariencia muy cuidada. Normalmente lo utilizo cuando quiero ver una película.

Figure 4 - HDD attached
Figura 4 - Unidad de disco duro conectada

La carcasa de lego tiene el resultado esperado, tal y como se puede ver en la Figura 5.

Figure 5 - Lego pieces working well as parts of a case
Figura 5 – Las Piezas de Lego encajan muy bien como partes de la carcasa

La Figura 6 muestra la pantalla de inicio del HAL Launcher con ajustes personalizados para dar forma a un estilo inspirado en Nvidia.

Figure 6 - Home screen
Figura 6 - Pantalla de inicio

Tras agregar manualmente los enlaces de los juegos a la pantalla de inicio, deberían verse como muestra la Figura 7. Cada juego tiene su propio mosaico personalizado, que hice con Photoshop. Me supuso mucho trabajo, aunque no podría estar más contento, ya que el resultado final es sorprendente. Lo prefiero sobre otras interfaces de juegos puesto que no dispongo de demasiados juegos.

Figure 7 - Gaming links on Home Screen
Figura 7 - Enlaces de los juegos en la pantalla de inicio

La Figura 8 muestra el Crash Team Racing ejecutándose sobre ePSXe con el plugin OpenGL con gráficos mejorados y multi-threading. Los rótulos de ven algo oscuros, pero esta es la mejor configuración que logré obtener para el pequeño ODROID-C2.

Figure 8 - Crash Team Racing
Figura 8 - Crash Team Racing

La Figura 9 muestra el Quake II ejecutándose sobre ePSXe, jugando con los modernos controles personalizados fps

Figure 9 - Quake II
Figura 9 - Quake II

La Figura 10 muestra Super Smash Bros en Mupen64fz con un paquete de texturas de alta resolución y un hack de pantalla panorámica. Es el mismo para otros juegos de n64.

Figure 10 - Super Smash Bros
Figura 10 - Super Smash Bros

La Figura 11 muestra un juego ejecutándose a 60 fps, tiene un aspecto magnifico.

Figure 11 - 60 fps option
Figura 11 - opción de 60 fps

La Figura 12 muestra uno de los pocos juegos en Android que admite 4 jugadores en una pantalla así como 4 gamepads.

Figure 12 - Multi-player game
Figura 12 - Juego multijugador

La Figura 3 muestra una captura de pantalla de Firestrikers para SNES.

Figure 13 - Firestrikers
Figura 13 - Firestrikers

Por último, la Figura 14 muestra el juego Crash Bash.

Figure 14 - Crash Bash
Figura 14 - Crash Bash

Para ver el artículo original, visita https://imgur.com/gallery/cr74L.

Bus Controller Area Network (CAN): Implementación para ODROID-C1+ y ODROID-XU4

Esta página explica cómo habilitar el bus CAN en ODROID-C1/C1+/C0 a través de la interfaz HW SPI. También se incluyen instrucciones detalladas de cómo intercambiar información con una placa MCP2515 Bus Monitor.

Conexión H/W

Los siguientes productos son necesarios para configurar el hardware:

  • ODROID-C1+
  • Kit Tinkering C
  • Módulo MCP2515_CAN

Figura 1 - Bus CAN

Figura 2 - Kit Kinkering ODROID

Figura 3 - Circuito de referencia

Figura 4 - Diagrama de la placa de pruebas

Figura 5 - Ilustración de la placa de pruebas

Figura 6 - Conectados el módulo CAN y ODROID-C1 usando el kit tinkering

Before installing the software, you must modify the mcp2515 driver to set the amlogic GPIO IRQ. Apply este parche a tu kernel. Descomprime el archivo zip y escribe "git apply odroid-c1-mcp251x.patch". A continuación, edita arch/arm/boot/dts/meson8b_odroidc.dts y elimina el signo de línea comentada de la sección can0.

Habilitar el driver del kernel controlador de CAN

La configuración para la plataforma ODROID-C1 con un chip MCP2515 es: Linux Kernel Configuration > Networking support > CAN bus subsystem support > CAN device drivers > Platform CAN drivers with Netlink support > CAN bit-timing calculation > Microchip MCP251x SPI CAN controller

Luego, actualiza el kernel y el sistema de archivos root. Recurre a estas instrucciones para compilar e instalar el kernel.

Verificar la configuración de soporte CAN

Carga todos los drivers necesarios, usando la contraseña de sudo "odroid":

$ sudo su
# modprobe can_raw
# modprobe spicc
# modprobe mcp251x mcp251x_enable_dma=1
Luego, verifica el driver CAN host:
# ls /sys/class/net/
can0  eth0  ip6tnl0  lo  sit0
# ifconfig can0
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Encender el hardware CAN

Ajusta la tasa de bits antes de realizar cualquier operación, similar al siguiente ejemplo donde la tasa de bits de la interfaz can0 está configurada en 125 kbps:

# ip link set can0 type can bitrate 125000 triple-sampling on
# ifconfig can0 up
# ifconfig
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          UP RUNNING NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
eth0      Link encap:Ethernet  HWaddr 00:1e:06:10:18:1c  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:40 
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1360 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1360 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:108256 (108.2 KB)  TX bytes:108256 (108.2 KB)

Instalar las utilidades SocketCAN

El paquete "can-utils" es un conjunto de drivers CAN y herramientas de red para Linux. Permite interactuar con dispositivos bus CAN de forma similar a otros dispositivos de red.

$ sudo apt install can-utils
Escribe los siguientes comandos para realizar una prueba de circuito cerrado en un único puerto CAN:
# ifconfig can0 down
# ip link set can0 type can bitrate 125000 loopback on
# ifconfig can0 up
# ip -details link show can0
5: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can <LOOPBACK,TRIPLE-SAMPLING> state ERROR-ACTIVE restart-ms 0 
          bitrate 125000 sample-point 0.875 
          tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
          mcp251x: tseg1 3..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
          clock 10000000
El siguiente comando muestra el mensaje recibido desde el bus CAN:
$ candump can0
En un segundo terminal, el siguiente comando envía 3 bytes sobre el bus (0x11, 0x22, 0x33) con el identificador 500:
$ cansend can0 500#11.22.33
Para probar la conexión CAN-bus entre 2 placas ODROID-C1, primero conecta los pines CANL y CANH de dos placas ODROID-C1.

Figura 7 - Conectando los pines CANL y CANH de dos placas ODROID-C1

Enciende ambas placas, luego escribe lo siguiente en el intérprete de comandos de ambas placas para configurar el dispositivo bus CAN:

$ modprobe can_raw
$ modprobe spicc
$ modprobe mcp251x mcp251x_enable_dma=1
$ ip link set can0 type can bitrate 125000 triple-sampling on
$ ifconfig can0 up
Escribe lo siguiente en el intérprete de comandos de la placa 1 (utilizada para probar la recepción de dispositivos can0):
$ candump can0
Escribe lo siguiente en el intérprete de comandos de la placa 2 (utilizado para probar el envío de paquetes de datos a través del dispositivo can0):
$ cansend can0 500#11.22.33
Llegados a este punto, la placa 1 recibirá el paquete de información enviado desde la placa 2:
# candump can0
  can0  500   [3]  11 22 33
  can0  500   [3]  11 22 33
Para comentarios, preguntas y sugerencias, visita la página de la Wiki en https://wiki.odroid.com/odroid-c1/application_note/gpio/can-bus.

Conociendo un ODROIDian: Cristian Sandu (crazyquark)

Por favor, háblanos un poco sobre ti. Soy un desarrollador de software de 34 años de Bucarest, Rumania. Me gradué en la Universidad Politécnica de Bucarest con un título en informática. Mi puesto de trabajo es "desarrollador blockchain", lo cual significa que en su mayor parte desarrollo software en Java, Javascript y Go. Mi equipo está centrado en el mercado empresarial para aplicaciones blockchain. Mi principal lenguaje de programación solía ser C++ pero los tiempos están cambiando. Mi esposa trabaja para una gran empresa de telecomunicaciones como analista de negocios, de modo que somos una familia que pasa mucho tiempo con pantallas.

Los intereses del hámster de Cristian normalmente se reducen a masticar cosas.

¿Cómo empezaste con los ordenadores? Conseguí mi primer ordenador por Navidad en algún momento a principios de los 90, se trataba de un ordenador rumano HC90, es decir, un clon de Sinclair ZX Spectrum (CPU Z80). Muchas personas de mi edad empezaron a programar con BASIC. Principalmente ejecuté juegos sobre él, y llegué a desarrollar alguna programación infantil usando el intérprete BASIC que tenía incluido.

¿Qué te atrajo a la plataforma ODROID? Me gusta la potencia de cálculo en bruto. Ya estaba familiarizado con los ordenadores de placa reducida (SBC), ya que he jugueteado bastantes con ellos, pero cuando empiezas a ejecutar más y más servicios, éstos muestran sus limitaciones. Hasta donde puedo decir, el ODROID-XU4 sigue siendo el SBC ARM más potente para cuestiones a nivel de servidor.

¿Cómo usas tus ODROID? Mi ODROID-XU4 es mi Almacenamiento conectado en red (NAS) de uso general, que utiliza una carcasa Cloudshell2 y la magia del Logical Volume Manager (LVM) para que el almacenamiento sea fácilmente ampliable. Ejecuto bastantes servicios a nivel multimedia como Emby, Sonarr y Radarr. También tengo mi blog de WordPress en el XU4 (https://www.cristiansandu.ro/). También tiene un servicio homebridge para conectar algunas luces Philips Hue, así como un servicio personalizado que desarrolle y que usa el receptor IR para ejecutar algunos comandos cuando presiono un botón del mando a distancia de mi TV con el fin de atenuar y apagar las luces. Probablemente olvide algo, pero el ODROID-XU4 sigue dándolo todo. También solía experimentar con contenedores Docker, pero creo que necesito más memoria RAM.

Mi ODROID-C2 tiene la aburrida labor de ser un centro multimedia que ejecuta LibreELEC, y está conectado al televisor para satisfacer todas nuestras necesidades multimedia. Solía tener también una configuración tipo Ambilight usando un Arduino que controlaba la banda de LEDs, pero no llego a ser muy popular en nuestra sala de estar. Tengo pensado volver a montar la configuración con algunos LED SMD.

Mi viejo ODROID-C1 + fue reutilizado como dispositivo PiHole para filtrar anuncios publicitarios y otras cosas maléficas en mi red doméstica. También lo uso para experimentar con sensores de hardware, como un sistema para controlar mi AC que monté el pasado verano. Se puede decir que es una especie de dispositivo de puesta en escena para nuevos servicios, ejecuta DietPi para que sea lo más eficiente posible.

Mi ODROID-C1 aún más antiguo tiene la labor de ser una consola de TV Lakka, pero últimamente no recibe mucha atención, así que probablemente lo modifique para que haga otra tarea. Utilicé un ODROID-HC1 como NAS de backup secundario y un servidor de WordPress. Desafortunadamente, debido a un poco de agua (¡no preguntes!), dejo de funcionar.

¿Cuál es tu ODROID favorito y por qué? Mi ODROID-C2 es la interfaz para mis sistemas multimedia, así que me gusta bastante, pero el ODROID-XU4 es claramente el centro neurálgico de mi configuración, de modo que el ODROID-XU4 es hasta ahora el mejor ODROID para mí, especialmente con refrigeración pasiva ya que no me gustan los ventilados.

Cristian imprimió en 3D una tapa personalizada para su ODROID-XU4 que presenta un hueco para el disipador de calor

¿Qué innovaciones te gustaría ver en futuros productos Hardkernel? Hardkernel ya está haciendo un gran trabajo, puedo ver claramente la aplicación práctica de NAS/centros multimedia de sus productos, pero también creo que hay espacio para más cosas relacionadas con los juegos, específicamente los juegos portátiles. Me ha gustado mucho el proyecto de la comunidad sobre una consola portátil desarrollada a partir de un ODROID-C0. En este momento, también estoy buscando soluciones portátiles para poder transmitir juegos desde el PC de mi casa usando Moonlight. No estoy seguro de si se trata de una innovación, pero me gustaría tener un elegante puerto de cámara serie en ODROID para poder conectar placas de cámara compactas para robots y otros fines.

¿Qué hobbies e intereses tienes aparte de los ordenadores? ¿Qué, hay mundo fuera de los ordenadores? También estoy muy interesado en la impresión 3D. Cuento con una Prusa i3 MK2 original, que utilizo para crear carcasas para mis ODROID y ocasionalmente para crear escultura de Baby Groot y algo más. También la utilizo para crear piezas para mi robot móvil personalizado. El robot se puede controlar a través de una interfaz web, así como con un mando de PS3.

Cristian creó un robot móvil personalizado, el cual se puede controlar con un mando de PS3 o una interfaz web

Mi interés en la impresión 3D probablemente proceda de mi interés por experimentar con la electrónica, que empezó con Arduino y cosas similares a los microcontroladores junto con SBC, pero ahora estoy intentando en aprender más sobre los distintos componentes y circuitos integrados (ICs) y cómo funciona todo.

Como la mayoría de las personas, me gusta viajar y creo que me muevo bastante. Algún día espero visitar Japón porque me fascina su cultura y sus videojuegos. No leo tanto como quisiera, aunque si es algo que me interesa bastante. Intento leer ficción y no solo material técnico y de no ficción.

También soy adicto a los programas de TV, específicamente a los programas de ciencia ficción/fantasía. ¿Es eso un hobby? También disfruto viendo películas, he visto cientos de ellas y hay muchas más que quiero ver.

¿Qué consejo le darías a alguien que quiere aprender más sobre programación? Desarrollo la mayoría de mis proyectos personales en Python, creo que es un muy buen lenguaje de programación para empezar. Hay un montón de sitios que te pueden enseñar a programar hoy día, aunque pienso que deberías introducirte en el mundo de la programación con algo que realmente te apasione, como por ejemplo diseñar tu propia lavadora inteligente. Actualmente, puedes ejecutar MicroPython, que es una variante de Python para los microcontroladores ESP8266/ESP32 y que combina la facilidad de uso de Python con la diversión de los proyectos de electrónica. Si esto es algo por lo que sientes curiosidad, empieza por aquí. A mí siempre me motiva el hecho de poder llegar a ver el objetivo final de mi aprendizaje, como descubrir que puedo montar un robot con Python.