GNU/Linux y Nintendo DS

NDS

¿Qué? ¿Cómo? ¿Que tienes una Nintendo DS por casa? ¡¡Estás de suerte!!. Con unos minutos, la lectura de esta recetilla, un espíritu jóven y la ayuda del Software Libre tienes en tus manos un maquinón al que le podrás sacar todo el jugo. Veamos cómo....

Introducción
Pues lo dicho. La Nintendo DS (NDS a partir de ahora), es un "cacharrito" que tiene dentro un ARM7 y un ARM9 trabajando en paralelo. También dispone de WIFI, pantalla táctil y un buen audio (entre otras muchas cosas, aún no he podido profundizar mucho en la arquitectura hardware de la máquina).

Si queremos introducirnos en el mundo del homebrew para ésta consola (o scene, con lo que encontrareis mas cosas googleando -thanks int0-) , gracias al Software Libre lo tenemos francamente fácil, ya que tenemos en nuestras manos herramientas tales como emuladores, librerías cruzadas, etc..... es decir, una toolchain completa.

Aquí iré explicando paso a paso cómo la he instalado en mi máquina, ya que todo ésto ha sido la "recopilación" de varias búsquedas por la red y de varias consultas en algún que otro foro (gracias chicos, por la paciencia con los novatos Eye-wink)

Primeros pasos: Descargando fuentes
Todos los fuentes de las librerías que necesitamos se encuentran en sourceforge. Aquí se pueden encontrar tanto las librerías ya compiladas como los fuentes. Yo en mi caso he preferido bajarme los fuentes y compilarmelos (como está mandao Cool). Ésto es todo lo que hace falta para poder empezar a trabajar:

  • build scripts
  • libfat
  • dswifi
  • y por supuesto nds-examples

Nos bajaremos las útlimas versiones de dichos paquetes para evitar problemas de compatibilidades. En arco he dejado los paquetes que he utilizado yo. En el momento en el que escribo este documento (marzo de 2007), la versión de build scripts es la 20060724. Ésta descarga unos paquetes un poco "anticuados", así que he modificado uno de los scripts que hay dentro del paquete y lo he dejado fuera. Éste script debereis descargarlo para poder compilar la toolchain correctamente.

Instalación
Bueno, pues suponiendo que tenemos el directorio nds que hay en ARCo dentro de nuestra máquina, procederemos a compilar la toolchain.

Entramos en el directorio scripts y descomprimimos el paquete que contiene los scritps de instalación. Una vez que hayamos hecho eso, sobreescribimos el script build-devkit.sh con el script del mismo nombre que hay en el raiz. Es decir:
javieralso@Gezel:~/nds/scripts$ bunzip2 -c buildscripts-20060724.tar.bz2 | tar xf -
javieralso@Gezel:~/nds/scripts$ cp -f ../build-devkit.sh ./

A continuación ejecutamos el script. Cuando hagamos ésto, nos preguntará para qué arquitectura queremos el kit. En nuestro caso la queremos para arm (ds, gp2 y gba), así que pulsamos la opción 1. Después le decimos que queremos que descargue los paquetes y finalmente dónde queremos que nos compile la toolchain:
javieralso@Gezel:~/nds/scripts$ ./build-devkit.sh
This script will build and install your devkit. Please select the one you require
1: build devkitARM (gba gp32 ds)
2: build devkitPPC (gamecube)
3: build devkitPSP (PSP)
1
The installation requires binutils-2.17, gcc4.1.1 and newlib-1.14.0. Please select an option:
1: I have already downloaded the source packages
2: Download the packages for me (requires wget)
2
Please enter the directory where you would like 'devkitARM' to be installed:
for mingw/msys you must use <drive>:/<install path> or you will have include path problems
this is the top level directory for devkitpro, i.e. e:/devkitPro
/usr/local/stow/dkp

Yo en mi caso le he dicho que quiero que me instale la toolchain en el directorio /usr/local/stow/dkp, aunque ésto no es nada crítico.
En éste momento, comenzará la descarga, descompresión, compilación e instalación de los paquetes. Deberemos ser pacientes, ya que puede tardar su tiempo. Cuando termina de descargar los paquetes nos pide confirmación para comenzar la instalación. Confirmamos y ya ta Laughing out loud

Después de finalizar ésta parte, deberemos exportar los PATH's para que cuando compilemos los makefiles sepan cuales son las rutas. Para ello editamos nuestro archivo ~/.bashrc y añadimos lo siguiente:

export DEVKITPRO=/usr/local/stow/dkp
export DEVKITARM=/usr/local/stow/dkp/devkitARM
export LIBNDS=/usr/local/stow/dkp/libnds
export LIBNDS_INCLUDE=/usr/local/stow/dkp/libnds/include
export LIBNDS_LIB=/usr/local/stow/dkp/libnds/lib

Vosotros debereís introducir vuestras rutas. Cuando hayais hecho ésto tendreis lo básico funcionando y ya podreís hacer programas bastante interesantes...

Librerías extra

Dentro del subdirectorio libs tenemos los fuentes de las librerías para la wifi (dswifi) y los fuentes para las librerías de sistema de archivos FAT (libfat). Éstas librerías no se instalan de forma automática, pero es muy fácil hacerlo manualmente.

Instalación de dswifi

descomprimimos el archivo con las fuentes (en una shell nueva, para que los PATHs se hayan cargado) y ejecutamos make y después make install:
javieralso@Gezel:~/nds/libs$ bunzip2 -c dswifi-src-0.3a.tar.bz2 | tar xf -
javieralso@Gezel:~/nds/libs$ make
javieralso@Gezel:~/nds/libs$ make install

Con ésto, la librería habrá quedado instalada en nuestro sistema Laughing out loud

Instalación de libfat

PENDIENTE

A probarlo todo Sticking out tongue

Bueno, pues ahora ya estamos listos para compilar algunos ejemplos y probarlos en nuestra NDS. Dentro del directorio ejemplos tenemos un paquetito con montones de ejemplos de manejo de la wifi, la pantalla táctil, gráficos en 2D y 3D y un largo etcétera. Para probarlos es tan fácil como descomprimir el paquete y ejecutar make desde el raiz. Si todo funciona bien (que debería ser así) se generará un directorio bin en el que estarán todos los archivos *.nds listos para ser cargados en nuestra NDS

Y para la próxima....

Bueno, pues por mucha consola que tengamos, no está de mas tener un emulador para hacer pruebas rápidas sin tener que cargarlas en la máquina (que puede ser un poco engorroso). Próximamente explicaré como instalar dsmume, un emulador bastante majo que corre también en GNU/Linux y que aunque tiene algunas limitaciones, nos permitirá, por ejemplo, probar varios de los ejemplos que hemos compilado anteriormente.

Referencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Un poquito más facil

Bueno ahora la verdad es que es más sencillito…

  • Añadir en /etc/apt/sources.list mi repo
deb http://arco.inf-cr.uclm.es/~francisco.moya/debian ./
  • Instalar todo

$ aptitude install devkit-arm libnds-arm libfat-nds-arm dswifi-arm libmikmod-arm liblobby-arm desmume

  • Al usarlo tener en cuenta que se deben definir estas variables (yo lo pongo en mi .bashrc)
export DEVKITPRO=/usr/lib/devkitPro
export DEVKITARM=${DEVKITPRO}/devkitARM

Será más bien...

# aptitude install devkit-arm-toolchain libnds-arm libfat-nds-arm dswifi-arm libmikmod-arm liblobby-arm desmume
¿no?

Muchas gracias Paco Laughing out loud

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --

Bueno, ahora sería más

Bueno, ahora sería más bien:

# aptitude install devkitpro-arm-eabi

Ahora mis paquetes son un wrapper de los buildscripts, con lo que incluyen dswifi, mikmod, libfat, libnds, etc.

Imagen de brue

por cierto...

$ bunzip2 -c buildscripts-20060724.tar.bz2 | tar xf –

se puede hacer sin tuberías con …

$> tar xvjf- buildscripts-20060724.tar.bz2

al igual que para tgz …

$> tar xzvf- arvhivo.tar.gz


·brue

brue

Imagen de david.villa

unp

Todo se puede descomprimir con:

unp ...

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de brue

sí...

siempre que lo tengas instalado y el tar y el bunzip2 y el gzip y el unrar y el ...

--
·brue

brue

Imagen de david.villa

Hombre

Si no tienes instalado el tar, tampoco puedes usar el tar... Es lo que tienen las cosas, para usarlas hay que instalarlas y tal

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de brue

Qué interesante...

Unas preguntillas Javi...

Verás, estoy empezando con un programa que transforma videos en cola usando ffmpeg para la PSP, ya que con el firm de DarkAlex se pueden usar videos de 480x272 y rate de flujo ilimitado. Creo que puede estar bien porque va a tranformar los videos y corregir el "aspect ratio" de forma automática para tener calidad muy cercana a un UMD movie (o igual).

La verdad es que extender el uso para NDS sería fácil, pero no tengo ni idea de si se pueden ver videos o demás. ¿Sabes algo?

Pienso hacer extensible el programa y que sea una especie de 3GP Converter pero para GNU/Linux. Si alguien se anima, es un proyecto sencillo, pues con un parser de archivos de texto con un formato determinado estaría casi todo, lo único que habría que hacer es la comunicación entre transcoder/mencoder y ffmpeg. Lo bueno es que podría tener una pequeña lista de dispositivos móviles y así crear el video correcto para, por ejemplo, un móvil nokia, una psp o una ds...

La información que se necesita de cada dispositivo es:

- Resolución óptima (X*Y)
- Aspect Ratio (esto es X/Y)
- Codec de video y audio.
- Contenedor del stream.
- Máximo bitrate que soporta.

¿A alguien le interesa el proyecto? ¿Tenemos algún empaquetador de debian oficial cerca? Sería un proyectillo interesante para añadirlo a debian y tener a la scene contenta. Otra cosa, qué licencia tiene ffmpeg?????? Quizá no la mejor... sugerencias para redimensionar y convertir? Venga, animaros que es muy sencillito.

--
·brue

brue

Imagen de int-0

Vídeo en la NDS...

Bien... tiene un reproductor la mar de majo... el problema es que es para Simply DS... es una aplicación aparte que se puede incluír en la microSD junto con la shell y demás. Los vídeos tienen que ser transcodificados (uy que palabreja) al formato DPG, existe un programa en python que automatiza el proceso y permite pasar avi's incluso con subtítulos. Emplea mpg_stat y mencoder por debajo y después realiza unas modificaciones en las cabeceras de los chunks. Lo puedes encontrar en: DPG Converter for linux.
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Echadle un vistacillo a tuna

Tuna es un player de avi (mp4) bastante decente (y GPL) para la DS. La transcodificación no es estrictamente necesaria pero evidentemente si quieres que vaya a una velocidad decente hay que escalar a 256×192 y poner sonido en mono y a bajo bitrate. Yo he visto Elephant’s Dream entera en la DS y se ve/oye de lujo.

mmmmmmm

Pues la verdad es que tiene buena pinta, pero me pillas en bragas. Me estoy metiendo en ésto de NDS y la verdad es que aún no tengo mucha idea de como va el tema. Además, estoy bastante escaso de tiempo, así que no puedo dedicarme de lleno (y además, estoy con 20 proyectillos mas Laughing out loud)

Bueno, un saludo desde la mancha.

The cause of the problem is:
The vendor put the bug there.
-- Meta amigo informático --