Linux Leapfrog Explorer - Inicio de Emulador. inittab? rcS?

ih8myself

Ya pero pa qué po.
Se incorporó
18 Mayo 2007
Mensajes
146
Aleguenle cabros. Ayudenme a terminar un proyecto que tengo en stand by hace rato.

Resulta que hace unos meses atrás compré un Leapfrog Leapster Explorer...en $luca :zippy :

410czC7JkLL._SX300_.jpg


Aquí algunas especificaciones y otras hierbas de esta consolita...

http://elinux.org/Leapster_Explorer

La cosa es que finalmente decidí dejarla con un emulador de GameBoy/Color pa los niños. El proyecto lo tengo en un 90%. Pude acceder via serial a la consola, cargarle un firmware que me encontré antes de que lo sacaran (ya que estaba jugando con el buildroot del mismo y...un cacho si no hay una buena guia para no cagarla...y la verdad, no hay una buena guia), y hacer funcionar el emulador.

...Cual es el problema...

Resulta que al intentar hacer algo similar al personaje de este video...(ojo, que el que subiò el video tenia una carpeta online con el buildroot, la imagen del firmware y los emuladores compilados. Esta carpeta la descargué entera y a los 3 dias la dió de baja)


Él logra hacer partir el emulador sin comandos ni nada. Lo que es yo, bueh, no. El emulador corre bien al llamarlo desde ssh en un computador X, al ejecutarlo el emulador corre inmediatamente en la pantalla (o terminal) de la consola, tty0. Al tratar de llamar el emulador desde inittab o con un script rcS, da error de segmentación.

Lo que se me ocurre es lo siguiente:

Esta cosa corre busybox. Lo que deberia hacer es forzar la aplicación desde el terminal de la consola...pero no se como hacerlo.

Si necesitan mas detalles, en este link está todo lo que avancé hasta quedar estancado en esto. Es lo unico que me falta para terminar, y la gente de la comunidad no me ha respondido :(

Código:
https://plus.google.com/104226099106621590324/posts/REp7SyKLHVV
(Pd: Al insertar la url desde google+, la detecta como media...por esto está en codigo. Me voy a servicio al cliente)

Veamos si puedo rematar esta cosa y jugar GameBoy con retroiluminación :p
Gracias!
 
Última modificación:

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.278
tienes la ruta de busybox ?
sabes si esa rom/sistema/firmware trae algun archivo donde puedas meter scripts para que se carguen al final del arranque? algo como /etc/rc.local por ejemplo
si el archivo se ejecuta como bash o sh, o recibe la linea y la ejecuta como tal, prueba poniendo algo como:
/path/busybox /path/ruta/ejecutable/emulador

saludos
 
Upvote 0

ih8myself

Ya pero pa qué po.
Se incorporó
18 Mayo 2007
Mensajes
146
tienes la ruta de busybox ?
sabes si esa rom/sistema/firmware trae algun archivo donde puedas meter scripts para que se carguen al final del arranque? algo como /etc/rc.local por ejemplo
si el archivo se ejecuta como bash o sh, o recibe la linea y la ejecuta como tal, prueba poniendo algo como:
/path/busybox /path/ruta/ejecutable/emulador

saludos
Tiene para ejecutar scripts en /etc/init.d un archivo que se llama rcS. Junto a este hay varios scripts con numeración adelante...

Código:
# cd etc/
# cd init.d/
# ls
S01logging       S30dbus          S50avahi-daemon  rcS
S10mdev          S35usbether      S50sshd          saves
S20lfd           S40networking    S60ohboy
S20urandom       S45mount_data    rcK

Y en los cuales se llaman los ejecutables. El numero indica el orden en el cual se deben ejecutar...

Pero, antes de este rcS...está inittab...

Código:
# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <[email protected]>
#
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id        == tty to run on, or empty for /dev/console
# runlevels == ignored
# action    == one of sysinit, respawn, askfirst, wait, and once
# process   == program to run

# Startup the system
null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -o remount,rw / # REMOUNT_ROOTFS_RW
null::sysinit:/bin/mkdir -p /dev/pts
null::sysinit:/bin/mkdir -p /dev/shm
null::sysinit:/bin/mount -a
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS

# Put a getty on the serial port
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL

# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot

# Stuff to do before rebooting
null::shutdown:/etc/init.d/rcK
null::shutdown:/bin/umount -a -r
null::shutdown:/sbin/swapoff -a


# console on screen
tty0::respawn:-/bin/sh

Hice lo que me sugeriste y obtengo un "applet not found". La ruta de busybox es /bin/busybox y su link simbolico es /bin/sh y ash también llama una terminal. La linea que pongo en inittab y que hace que aparezca el mensaje...

Código:
tty0::once:-/bin/busybox /home/default/ohboy

Siendo ohboy el ejecutable con todos los permisos.

Ahora probé colocando..

Código:
tty0::once:-/bin/sh /home/default/ohboy

aparece..

Código:
/home/default/ohboy: line 1: syntax error: unexpected word (expecting ")")

Y ya no entiendo niuna weá :(
 
Última modificación:
Upvote 0

Kitsune

Fanático
Se incorporó
5 Mayo 2006
Mensajes
1.029
Hola,
lindo proyecto!
Esos errores de que no encuentra las imagenes en /etc los da siempre ?
no puedes ver el log que te da al iniciar bien desde consola el ohboy para comparar?

Podrias poner al final del archivo el llamado a los rcS que entiendo ahi ejecuta el ohboy (que mas ejecuta rcS??)
::sysinit:/etc/init.d/rcS

o darle un runlevel mas alto (prueba altiro de 3 a 5?)
o inclusive dejar el id a tty0 ?

# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console
# runlevels == ignored
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.278
codigo para arrancar lo que tenga /etc/rc.local

Código:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
        if [ -x /etc/rc.local ]; then
                [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
                /etc/rc.local
                ES=$?
                [ "$VERBOSE" != no ] && log_end_msg $ES
                return $ES
        fi
}

case "$1" in
    start)
        do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

no se si te funcione bien asi como esta, pero podrias ver si puedes adaptarlo para que de esa forma al arrancar este carge lo que tenga el archivo script que necesites

saludos
 
Upvote 0

ih8myself

Ya pero pa qué po.
Se incorporó
18 Mayo 2007
Mensajes
146
Hola,
lindo proyecto!
Esos errores de que no encuentra las imagenes en /etc los da siempre ?
no puedes ver el log que te da al iniciar bien desde consola el ohboy para comparar?

Podrias poner al final del archivo el llamado a los rcS que entiendo ahi ejecuta el ohboy (que mas ejecuta rcS??)
::sysinit:/etc/init.d/rcS

o darle un runlevel mas alto (prueba altiro de 3 a 5?)
o inclusive dejar el id a tty0 ?

# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console
# runlevels == ignored
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run

Hola! Si, cuando vi la consola y caché el potencial que tenia, no la dudé. Tengo tambien un emulador de NES, pero corre muy lento aunque le haga un OC a 480 Mhz al proce (originalmente corre a 392 Mhz).

Con respecto a las consultas...

Si revisas los 2 strace que le hice al ejecutable (uno desde la consola ssh via comando el cual hace correr el emulador y el otro generado desde inittab y enviado a tty0 el cual da seg. fault u otros errores) , verás que en ambos casos llama a la imagen en /etc. Esto es porque el emulador soporta imagenes de fondo, y strace muestra un error...

Código:
ENOENT (No such file or directory)

...el cual en ningun caso afecta la funcionalidad de este.

Con respecto a rcS, este es llamado desde inittab.

Código:
# now run any rc scripts
::sysinit:/etc/init.d/rcS

rcS ejecuta el servicio de logging, dbus, los drivers de red y usb, la red en si (networking y avahi), mount y el servidor ssh. El ultimo script (S60ohboy) lo creé yo.

Código:
exec setsid ohboy
exec </dev/tty0 >/dev/tty0 2>&1

Igual obtuve un seg. fault.

Propones que ejecute rcS en tty0? Lo podria intentar. El problema radica en que si no parte rcS tendre que entrar nuevamente via serial y modificarlo por esta via...lo cual no quiero porque es un queso. El puerto UART se accede por el puerto del cartridge...no es un puerto fisico con pines y la forma en la cual me conecté es muy insegura.

Con respecto a los runlevels...

Código:
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.

sysvinit no es una opción ya que este buildroot está basado en busybox y no contempla varios comandos por defecto de Linux/UNIX. El id que me da problemas especificamente es tty0. Intento llamar al emulador desde ese id. y pasa el error de seg. fault. Lo que intenté hacer tambien es en el id. no poner nada. Esto significa ejecutar desde /dev/console, la consola interna del kernel.

Si miran bien el video de youtube en el 0:11 sale esto...

Código:
starting pid 579, tty '/dev/tty0' | '-/bi
n/sh
-/bin/sh: can't access tty, job control
turned off

El 'job control turned off' inidica que posiblemente está corriendo desde /dev/console (o algo similar). La pelea que existe en los foros desde tiempos inmemoriables es que /dev/control es lo mismo que /dev/ttyXXX, y que el primero es heredado de UNIX cuando se enviaba informes de kernel a impresoras...pero puede ejecutar comandos, solo que no tiene acceso a perifericos.

La cosa es que intenté esto tambien y tampoco sucede nada. Desconozco tambien que sucede en /dev/console. Estaba viendo como hacer para que se muestre el output de /dev/console en tty0.


codigo para arrancar lo que tenga /etc/rc.local

Código:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
        if [ -x /etc/rc.local ]; then
                [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
                /etc/rc.local
                ES=$?
                [ "$VERBOSE" != no ] && log_end_msg $ES
                return $ES
        fi
}

case "$1" in
    start)
        do_start
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

no se si te funcione bien asi como esta, pero podrias ver si puedes adaptarlo para que de esa forma al arrancar este carge lo que tenga el archivo script que necesites

saludos

Este lo llamo desde inittab o rcS? rc.local no existe en este buildroot. Solo inittab y rcS. Recuerda que es un custom build y carece de varias cosas que una distro linux normal.
 
Última modificación:
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.278
Este lo llamo desde inittab o rcS? rc.local no existe en este buildroot. Solo inittab y rcS. Recuerda que es un custom build y carece de varias cosas que una distro linux normal.

bueno, el rc.local es llamado desde el script /etc/init.d/rc.local :xd
por lo que tambien sirve desde link simbolicos desde rcS, por lo que ahi se le puede dar el orden y definir que script se debe arrancar
 
Upvote 0

ih8myself

Ya pero pa qué po.
Se incorporó
18 Mayo 2007
Mensajes
146
bueno, el rc.local es llamado desde el script /etc/init.d/rc.local :xd
por lo que tambien sirve desde link simbolicos desde rcS, por lo que ahi se le puede dar el orden y definir que script se debe arrancar

Al final probé con rc.local solito y rc.local desde el script. Nada :(

Solo me queda inittab, rcS, y posiblemente cron con

Código:
@reboot comando

Pero me gustaría mas desde inittab ya que se puede hacer respawn. Eso significaria que al salir del emulador, se volveria a ejecutar y volver a la pantalla de inicio del mismo (El emulador tiene el boton "L" para salir).
 
Upvote 0

ih8myself

Ya pero pa qué po.
Se incorporó
18 Mayo 2007
Mensajes
146
Ya. Pa rematar este cuento, hace un año le hice un symlink al emulador y lo hago correr como comando. Los botones de la consolita tienen asignaciones de teclado, asi que renombré el symlink "ab" y se acabó. (Tenia un video, pero lo perdí)

Gracias totales.
 
Upvote 0
Subir