Hay varios entornos para poder hacer compilación cruzada desde un pc a binarios para el linux de las gp32/gp2x/wiz.
El primero es crearte el entorno devkitpro para compilación cruzada ARM.
http://www.devkitpro.org/setup.shtml
El segundo es usar el "toolchain" llamado open2x
http://wiki.open2x.org/open2x/wiki/index.php?title=Toolchain.
A mi punto de vista, por ahora, creo que el mejor es el open2x ya que actualmente sigue teniendo mantenimiento y puedes estar a la última.
En el post anterior vienen los pasos para linux y windows, a continuación resumo los de windows.
Para poder usarlo en windows hay que hacer lo siguiente:
1.- Instalarte cygwin (para simular a linux), como mínimo se necesitan los siguientes componentes instalados.
Archive -> tar 1.15.1-2+
Devel -> bison
Devel -> flex 2.5.4a-3+
Devel -> gcc-core 3.4.4-1+
Devel -> binutils 20050610-1+
Devel -> libiconv 1.9.2-1+
Devel -> libncurses 5.4.2+
Devel -> make 3.80-1+
Devel -> patchutils 0.2.30-1+
Interpret -> perl 5.8.7-4+
Lib -> libbz2_1 1.0.3-1+
Lib -> libcharset 1.9.2-1+
Lib -> libiconv 1.9.2-1+
Lib -> libiconv2 1.9.2-1+
Lib -> zlib 1.2.3-1+
Shell -> ash 20040127-3+
Shell -> bash 3.0-11+
Utils -> bzip2 1.0.3-1+
Utils -> cygutils 1.2.9-1+
Utils -> patch 2.5.8-8+
Web -> wget 1.9.1-2+
2.- bajarte y descomprimir
http://www.open2x.org/open2x/toolchains/arm-open2x-linux-kernel-gcc-3.4.4-glibc-2.3.6_i686_cygwin.tar.bz2.zip (esto es el nucleo)
http://www.open2x.org/open2x/toolchains/arm-open2x-linux-apps-gcc-4.1.1-glibc-2.3.6_i686_cygwin.tar.bz2.zip (esto son aplicaciones necesarias)
http://www.open2x.org/open2x/toolchains/open2x-libpack-20071903-gcc-4.1.1-glibc-2.3.6.tar.bz2.zip
(esto son librerias necesarias, entre ellas SDL y libz)
La ruta a descomprimir debe ser c:/cygwin/
3.- Editar el archivo c:/cygwin/etc/profile e insertar al final una línea:
export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin:$PATH
4.- Ya debería de estar listo. Para probarlo se puede hacer lo siguiente.
Crear un archivo "main.c" en c:/cygwin/src/prueba
que ponga lo que quieras, por ejemplo
int main(){
printf ("hola mundo");
return 0;
}
Abres la línea de comandos cygwin, se verá una ventana tipo terminal de linux.
Desde ahí escribir
cd /src/prueba
arm-open2x-linux-gcc main.c
Se generará un archivo con el nombre "a.out" que será nuestro ejecutable.
Probar en la consola.
Desde mi punto de vista open2x ofrece la ventaja de estar bajo cygwin pudiendo así usar las autotools que usa bennugd para la compilación.
En devkitpro también se podría hacer pero hay que buscarse por otro lado el programa pkg-config ya que no viene en msys (que es el simulador de linux para esta otra toolchain).
para wiz es openwiz, los binarios son arm-openwiz-linux-...
y ¿que diferencias habrá?
Lo digo porque con saber los parámetros que difieren en la compilación. Se podría obtener un entorno de desarrollo para las dos usando devkitarm.
Juer, muchas gracias, DCelso, me hacía falta un tutorial así como agua de mayo, sobre todo porque prefiero compilar desde windows antes que en Linux, no por nada, sino porque tengo que programar para el OMAP y el entorno es para Linux, y bastante lio tengo ya como para acordarme de cambiar las variables internas de Linux para indicarle al GCC para qué plataforma compilar.
Dos preguntas:
-¿Es obligatorio usar la ruta c:/cygwin? No soy amigo de usar los directorios raiz de las particiones con un SO instalado (pero bueno, esto es como el mal de altura, uno termina acostumbrándose).
-¿cygwin debe instalarse? tampoco soy muy amigo de los instaladores (pero lo mismo de antes)
De todas formas, muchísimas gracias de nuevo, trataré de intentar esto, si no, tambien me han dicho (por fin) cómo instalar el de Linux en el otro foro.
(En ocasiones veo hilos repretiiiiidooooooos... en distintos foros).
Nada es obligatorio en esta vida :D.
En cuanto a la ruta cygwin, puede ser cualquiera, es acosejable una corta porque luego irá en el path, y es mas cómodo de trabajar con esta. En este caso no repercute mucho porque la ruta de tu cygwin será en la consola de cygwin la ruta root "/".
A ver, Cygwin no se instala, el setup.exe es una aplicacioncilla que sirve para ayudarte a descargar paquetes y a descomprimirlos en una ruta, puedes hacerlo tú mismo a mano, bajarte de la página de sourceforge de cygwin los paquetes y descomprimirlos tu mismo, es más lento pero se puede hacer :D.No se yo soy partidario de usar el setup.exe, si lo han hecho para facilitarme la vida, porqué complicármela ;D.
En cuanto al entorno linux, yo le encuentro ventajas, podrías tener un usuario con las variable spara compilar para gp2x y otro para compilar OMAP. o incluso con el mismo usuario en el script de inicio del "profile" poner un case y preguntar por un 1 o un 2 y dependiendo de éste iniciar unas variables o las otras. asi siempre que te logués en la máquina podrás seleccionar.
Entonces ¿cygwin es como el último SDK oficial que lanzaron? una serie de carpetas con librerías, ejecutables y demás (lo siento, no encuentro el enlace). Tengo el viejo con carpetas como ARM-linux, bin, demo, etc, include, info... pero viene con algo llamado msys o minsys... Vamos, que ninguna ayuda para novatos.
De todas formas, prefiero el open2x, es más compatible y, segun me comentó animanegra, más efectivo y sencillo de usar.
Y respecto a Linux, si, claro, todo eso es muy bonito, pero para el que sabe :D Yo llevo con Linux un año, de forma esporádica, y sólo he salido del modo gráfico para manejar la configuración de la red WIFI y usar el SAMBA para la negrita :D
Ya fue en la facultad y lo único que hacíamos era compilar con gcc para la placa "colibrí" (si, creo que era el colibrí) y siempre se nos olvidaba indicar para qué compilabamos (menos mal que uno lo apunta todo, y lo sigue paso a paso, porque de explicarnos qué hace cada cosa...).
Pos nada, instalado cygwin (he tardado pero está hecho), pero no he encontrado esto:
Archive -> tar 1.15.1-2+
Lo he buscado pero nada. Y del resto, la cosa ha evolucionado, hay versiones nuevas. Pero bueno, mañana le meto las librerías de open2x y probamos a compilar.
Y si la cosa va bien, intentaré recompilar la DLL base que hice hace tiempo, que funciona en PC pero no en GP2X. Supongo que, dada la naturaleza de Bennu, este problema no existe ¿cierto?
PD: DCelso, cuando dices "Se generará un archivo con el nombre "a.out" que será nuestro ejecutable." te refieres que hay que renombrar ese archivo a GPU (ejecutables de GP2X/WIZ) o que hay que hacer el GPE correspondiente (script para llamar al bash)?
Nuevo problema: a lo del cygwin le añado esto. He descomprimido nucleo, aplicaciones y librerías de los zip con el winrar, y como el bz2 no lo reconocía lo he intentado con el gestor de archivadores y me dice esto
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/g++.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/c++.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/ld-linux.so.2: No se puede crear el enlace simbólico a `ld-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libanl.so.1: No se puede crear el enlace simbólico a `libanl-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libanl.so: No se puede crear el enlace simbólico a `libanl.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libBrokenLocale.so.1: No se puede crear el enlace simbólico a `libBrokenLocale-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libBrokenLocale.so: No se puede crear el enlace simbólico a `libBrokenLocale.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libc.so.6: No se puede crear el enlace simbólico a `libc-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libcrypt.so.1: No se puede crear el enlace simbólico a `libcrypt-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libcrypt.so: No se puede crear el enlace simbólico a `libcrypt.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libdl.so.2: No se puede crear el enlace simbólico a `libdl-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libdl.so: No se puede crear el enlace simbólico a `libdl.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libgcc_s.so: No se puede crear el enlace simbólico a `libgcc_s.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libm.so.6: No se puede crear el enlace simbólico a `libm-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libm.so: No se puede crear el enlace simbólico a `libm.so.6': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libmudflap.so.0: No se puede crear el enlace simbólico a `libmudflap.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libmudflap.so: No se puede crear el enlace simbólico a `libmudflap.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libmudflapth.so.0: No se puede crear el enlace simbólico a `libmudflapth.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libmudflapth.so: No se puede crear el enlace simbólico a `libmudflapth.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnsl.so.1: No se puede crear el enlace simbólico a `libnsl-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnsl.so: No se puede crear el enlace simbólico a `libnsl.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_compat.so.2: No se puede crear el enlace simbólico a `libnss_compat-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_compat.so: No se puede crear el enlace simbólico a `libnss_compat.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_dns.so.2: No se puede crear el enlace simbólico a `libnss_dns-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_dns.so: No se puede crear el enlace simbólico a `libnss_dns.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_files.so.2: No se puede crear el enlace simbólico a `libnss_files-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_files.so: No se puede crear el enlace simbólico a `libnss_files.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_hesiod.so.2: No se puede crear el enlace simbólico a `libnss_hesiod-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_hesiod.so: No se puede crear el enlace simbólico a `libnss_hesiod.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_nis.so.2: No se puede crear el enlace simbólico a `libnss_nis-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_nis.so: No se puede crear el enlace simbólico a `libnss_nis.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_nisplus.so.2: No se puede crear el enlace simbólico a `libnss_nisplus-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libnss_nisplus.so: No se puede crear el enlace simbólico a `libnss_nisplus.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libpthread.so.0: No se puede crear el enlace simbólico a `libpthread-0.10.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libresolv.so.2: No se puede crear el enlace simbólico a `libresolv-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libresolv.so: No se puede crear el enlace simbólico a `libresolv.so.2': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/librt.so.1: No se puede crear el enlace simbólico a `librt-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/librt.so: No se puede crear el enlace simbólico a `librt.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libssp.so.0: No se puede crear el enlace simbólico a `libssp.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libssp.so: No se puede crear el enlace simbólico a `libssp.so.0.0.0': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libstdc++.so.6: No se puede crear el enlace simbólico a `libstdc++.so.6.0.8': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libstdc++.so: No se puede crear el enlace simbólico a `libstdc++.so.6.0.8': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libthread_db.so.1: No se puede crear el enlace simbólico a `libthread_db-1.0.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libthread_db.so: No se puede crear el enlace simbólico a `libthread_db.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libutil.so.1: No se puede crear el enlace simbólico a `libutil-2.3.6.so': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/lib/libutil.so: No se puede crear el enlace simbólico a `libutil.so.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-ar.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/ar.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-as.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/as.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-g++.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-c++.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-gcc.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-gcc-4.1.1': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-ld.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/ld.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-nm.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/nm.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-objdump.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/objdump.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-ranlib.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/ranlib.exe': Operación no permitida
tar: opt/open2x/gcc-4.1.1-glibc-2.3.6/./bin/arm-open2x-linux-strip.exe: No se puede crear un enlace duro a `opt/open2x/gcc-4.1.1-glibc-2.3.6/./arm-open2x-linux/bin/strip.exe': Operación no permitida
tar: Salida con error demorada desde errores anteriores
Y no se descomprimen. ¿Alguna sugerencia? ¿algun comando que deba aplicar en lugar de modo gráfico? :(
probaste la distro wiz tal cual viene? sin tocar nada?
Si, ya lo comenté en el otro hilo:
http://forum.bennugd.org/index.php?topic=736.0
Respuesta 2.
Por eso quiero recompilar para GP2X, pero si no puedo descomprimir las librerías que necesito, no podré hacer nada.
Mientras iré buscando alternativas.
EDIT: ¿puede ser que deba descomprimirlo desde el propio cygwin?
lamentablemente, eso que has probado no es lo que viene por defecto en el paquete, has tocado los mismos... debes probar tal cual vienen...
ya que los ejecutables funcionaron... pero algo estas haciendo mal...
ves por que se necesita tener una consola? :D
Lo volveré a probar, aunque ya lo hice usando tu script, pero modificando la dirección del runtime pues lo había copiado a la misma carpeta.
Ya, ya, lo pruebo sin más y te cuento.
Yo ya se para qué se necesita la consola, ya lo dije en su momento: porté un juego sin la consola y fue imposible.
PD: he hecho un edit al último mensaje a la vez que escribías, por si sabes algo. (Si andas por el MSN...)
Nada, solucionado:
El Tar parece que ya viene instalado por defecto, y a continuación vereis por qué.
Efectivamente, los tres paquetes tar.bz2 hay que "instalarlos" desde cygwin: ejecutando el .bat de donde se instala, se abre una ventana de MS-DOS, salvo que en realidad es de un Linux virtual.
Colocamos el tar.bz2 del kernel y de la aplicaciones en la raiz de nuestro Linux (la carpeta donde instaleis Cygwin), y a continuación hacemos:
tar xvjf arm-gp2x-linux...(resto del nombre)
Primero con el kernel, luego con las aplicaciones. Tras unos segundos, se habrán descomprimido los archivos. Tendremos una nueva carpeta, opt, con el contenido de ambos ficheros.
Ahora cojemos el de las librerías, y lo metemos en opt/open2x, ejecutamos de nuevo el tar con este fichero (no olvidar las opciones) y se sobreescribirán las librerías viejas por las nuevas.
Si los demás me confirmas que esto es así, estoy listo para hacer una prueba ¿Hay algun ejemplo por ahi para testear? (y cómo se hace, claro ^^U).
no tengo windows... no puedo confirmar que sea asi...
Bueno, creo que está conseguido. Gracias por la ayuda: karma++ para Splinter y DCelso ;)
de nada... conta que tal te va...
Drumpi, me fui de vacas, no pude contestarte.
El a.out es generado siempre como salida por defecto del gcc, puedes cambiar el nombre al que quieras. El formato dependerá del gcc que uses. En nuestro caso es un gpe directamente, puedes obligar el cambio del nombre con el argumento -o nombrequequieres, por ejemplo la línea del ejemplo quedaría:
cd /src/prueba
arm-open2x-linux-gcc main.c -o prueba.gpe
De todos modos, ya creo que a estas alturas lo sabrás :D.
Muchas gracias por la info, nunca está de más.
No sabía que el out.a era el estandar de salida, pero el parámetro -o sí que lo conocía de antes de ponerme con el berenjenal ;D
De todas formas, el ejecutable debería ser GPU, ya que el GPE es un fichero de textos equivalente al .bat de windows :D
Aun así, hay muchas cosas que aun desconozco de este entorno, apenas hemos usado configure y make, y me gustaría saber cómo compilar "a pelo", por ejemplo, mis propias .dll/.so. Anoche se me ocurrió que podía sustituir la actual mod_key por una específica para que tome los botones de la consola como hacía UFenix, o que tambien pillase el teclado USB... aunque antes debo darle un buen repaso a C y enterarme de cómo funcionan las SDL ^^U
la extension de los ejecutables en unix es anecdotica... salvo que espera el launcher...
O sea, que un ejecutable, un .o, un .so y un .ko se programan y se compilan exactamente igual ¿no?
Interesante ;D
ja, no, no dije eso...
dije que la extension de un ejecutable es lo de menos, en sistemas like unix, no importa la extension de los ejecutables, a un ejecutable le podes poner la extension que quieras.
sipo, a nivel de funcionalidad no hay problema, es un flag más en los permisos del archivo.
Pero a nivel conceptual es bueno usarlas para identificar más facilmente los archivos. Por ejemplo por lo que veo
".gpu" es una extensión que sirve para identificar un archivo binario ejecutable para el linux de la GP2X.
".gpe" es una extensión que sirve para identificar un archivo de texto script para el linux de la GP2X.
DCelso, cuando tu compilas con el open2x ¿tienes problemas de compatibilidad con los firms oficiales? porque el tema este de que falte la librería me trae de cabeza.
Debo esperar un poco más, que sólo llevo dos días... pero es que me puede la impaciencia :S
Umn, amos a ver como lo explico yo esto, pues este ups, a mi no me da ningún tipo de problema porque no tengo GP2x ni wiz :D :D.
Tengo desde antaño en mente comprarme la pandora, mencantaeldiseño, a ver si sale de una vez y leo críticas para decirme de todas todas, ahora mismo tiro con la nds.
Me puse hacer el port por echaros una mano nada más, así de tonto soy :D.
(Poner aqui foto de drajon lol, cuando todos los presentes se caen de espaldas y sólo se les ve las piernas mirando para arriba)
Buenas, ahora soy yo que intento compilar Bennu para Gp2x :)
He seguido todos los pasos, pero ni el Hola Mundo me funciona en mis Gp2x's (Firmware 1.2.1 y 4.0).
Notas:
1- He descompactado todos los archivos usando el winrar, estos los he tenido que renombrar de nuevo a zip para volver a abrirlos y así descompactarlos, las carpetas resultantes en la raiz del cygwin, han sido: 'gcc-4.1.1-glibc-2.3.6' y 'opt' respectivamente.
Al extraer la carpeta 'gcc-4.1.1-glibc-2.3.6' me ha dado conflicto de nombres repes, pero le he dicho al winrar para substituir todo.
2 - He compilado el ejemplo, con exito aunque salgan 2 warnings.
3 - Para probarlo hay que renombrarlo a '.gpe' sino la consola no los encuentra, pero el problema es que entra en la aplicación pero no escribe Hola Mundo, se queda la pantalla en negro.
Antes de intentarlo con Bennu me gustaria saber porque no funciona, os lo pongo por si lo quereis probar.
gpe no es como un .sh en linux?
prueba a poner dentro de este la ejecución del binario.
por otro lado pon el ejemplo aqui para que lo vea a ver si se me ocurre el motivo, quizas un printf no se muestre en pantalla sino en un archivo, tipo fenix.
Lo que tengo seguro es que algo se ejecuta porque entra y no sale.
Si miras los ejemplos de lo que puso splinter, no debes renombrar el binario con la extensión, debes hacer un script para llamar al ejecutable y añadirle como parámetro el nombre del código a compilar o del dcb a ejecutar. Un GPE es como un .bat de windows, así que notepad++/gedit al poder.
Tambien puede ser que te de el problema de liberías incompatibles que me da a mi, si lo has hecho con las toolchains open2x. En el script puedes añadir que escriba los errores en ficheros de texto, por ejemplo:
bgdc miprograma.prg 1>salida1.txt 2>error1.txt
bgdi miprograma.dcb 1>salida2.txt 2>error2.txt
Pero pensaba que era un exe, ya que creo que algunos juegos sólo tenian el gpe para iniciar.
Lo voy a mirar, pero lo urgente es que me digas como compilaste Bennu, como ejecutas los makefile, en Gp32 te hago la misma pregunta, hace años que no uso makefiles.
pues no se como ayudarte, vas a tener que compilar bennu o cualquier otro ejemplo para mostrar una imagen en pantalla para ver si va.
Si te instalas todo el devkitpro http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/devkitProUpdater-1.5.0.exe/download
vienen ejemplos para gp2x (además de para wii y nds), intenta compilarlos a ver si te van.
Este entorno, devkipro, es más facil de instalar y usar, pero carece de algunas herramientas que necesita bennugd para compilar, así que complicaría su compilación ya que no trae autotools y debes de hacer manualmente los makefiles de compilación de bennu o buscar e instalar unas autotools para el "msys" que viene en el entorno devkitpro. (msys es un equivalente a cygwin que usa este entorno)
en lo referente a lo comentado, a ver.
El ejemplo hola mundo, su binario resultado final tiene que ser ".gpu"
Luego creas un .gpe, que es un texto que simplemente tiene una línea que es el nombre del .gpu.
Quote
4.- Ya debería de estar listo. Para probarlo se puede hacer lo siguiente.
Crear un archivo "main.c" en c:/cygwin/src/prueba
que ponga lo que quieras, por ejemplo
Code:
int main(){
printf ("hola mundo");
return 0;
}
Abres la línea de comandos cygwin, se verá una ventana tipo terminal de linux.
Desde ahí escribir
Code:
cd /src/prueba
arm-open2x-linux-gcc main.c
Se generará un archivo con el nombre "a.out" que será nuestro ejecutable.
Probar en la consola.
Desde mi punto de vista open2x ofrece la ventaja de estar bajo cygwin pudiendo así usar las autotools que usa bennugd para la compilación.
En devkitpro también se podría hacer pero hay que buscarse por otro lado el programa pkg-config ya que no viene en msys (que es el simulador de linux para esta otra toolchain).
Por ejemplo:
Después de este punto
renombras a.out por holamundo.gpu
depués creas un fichero de texto llamado holamundo.gpe que contenga lo siguiente
holamundo.gpu
así de facil.
Antes de leer tu post lo habia renombrado a gpu y el resultado es el mismo, entra y se queda en negro la pantalla.
(Lo tonto que soy, editando los gpe para los juegos de bennu en la wiz, y no me di cuenta que en la gp2x era la misma extension).
Voy a mirar tu ejemplo y te cuento.
Grácias.
Ya lo probe, ocurre lo mismo (me imagino que lo que hice antes al abrir directamente el Hola.gpu tenia que funcionar tambien).
Si, hay algunos gpe que son ejecutables, pero recuerda que es un sistema Linux y la extensión no es lo importante. El GPE es para que salga en el menu de aplicaciones, pero por norma general, es un script.
Además, al compilar bennu, aunque obtengas un ejecutable, te pasa lo mismo que en windows: si no le metes por comandos el prg/dcb, no te va a compilar/interpretar nada (como mucho te saldrán los nombres de los que han programado Bennu y anteriores y la ayuda de las opciones).
Yo lo compilé ejecutando un .sh que hay en la raiz del código fuente para establecer las variables del sistema y las rutas (este lo tuve que modificar). Después un ./configure en la carpeta core, y un make seguido de un chorizo enorme (al hacer configure sin errores, te dice lo que tienes que poner).
Repetimos configure y make en la carpeta modules y listo... bueno, listo no, porque da mil problemas. Uno que tuve yo es que además necesité descargar y compilar los fuentes de la libiconv. Y tambien cambié un par de cosillas en los makefiles (por ejemplo, quitar la mod_wm porque no se compilaba ni pa'trás).
Si quieres los makefiles... creo que también los puse en gp32spain ¿no fue a ti?
Si fue a mi. Eso ya los substitui, lo que falta es la otra lib (version 3 creo) que me pusiste, que no se donde ponerla.
Pero vamos que soy tan despistao que ya no se ni ejecutar el sh. Ponme el comando que tengo que poner en el cygwin a ver si lo ejecuto ahora.
Grácias
Me da que redirige la salida de los printf a un archivo (tendrías que buscar algún out.log o así) .
O bien, prueba a hacer un fprintf
int main(){
FILE * archivo;
archivo = fopen("mihistorial.log");
fprintf (archivo,"hola mundo");
fclose(archivo);
return 0;
}
El ejemplo correcto es así:
#include "stdio.h"
int main()
{
FILE * archivo;
archivo = fopen("mihistorial.log", "rw");
fprintf (archivo,"hola mundo");
fclose(archivo);
return 0;
}
`
pero tampoco funciona, no escribe nada en el log...
Mirate este post, al poner el ejemplo SDL tengo el mismo problema del que postea, la referencia SDL_Init:
http://www.gp32x.com/board/index.php?showtopic=45557#entry675129
Quote from: FreeYourMind on January 31, 2010, 12:16:53 AM
Si fue a mi. Eso ya los substitui, lo que falta es la otra lib (version 3 creo) que me pusiste, que no se donde ponerla.
Pero vamos que soy tan despistao que ya no se ni ejecutar el sh. Ponme el comando que tengo que poner en el cygwin a ver si lo ejecuto ahora.
Grácias
La libiconv, una vez compilada.........
.....
Lo siento, no me acuerdo dónde había que ponerla. ¿Cambiaría alguna ruta en algun makefile?
Respecto al .sh no necesitas comandos, creo recordar. Escribes el nombre dentro del cygwin y se ejecuta solo. Si no, que me corrija algún gurú de Linux.
Puedes pasarme la carpeta de tu codigo fuente modificado de Bennu ?, o sea, dijiste que todo ocupaba muchos megas, pero no necesito lo demas, sólo la carpeta de código fuente de tu bennu en el cual has ido modificando los ficheros de configuracion, así seria mucho mas fácil porque ya se que el tuyo compila, así que lo intentaba tambien en mi maquina, a ver si compilaba.
Despues y como estoy con la ultima version, pues adaptaba los cambios que ya tienes tambien a esta ultima y seguia a partir de ahí.
EDITO:
Ya ejecute el sh de la raiz, y logicamente me da error en la linea 31:
ln -s `whereis -b pkg-config | sed 's/pkg-config\: //g'` /opt/openwiz/toolchain/arm-openwiz-linux-gnu/bin/pkg-config
ya que no tengo el openwiz, seguramente tambien cambiaste este fichero sh, así que una vez más la mejor solucion será que me pases el src :)
Por pasos,
Los "undefined reference", es decir, referencias no definidas se producen porque te falta enlazar tu binario con alguna librería, lo más probable es que en tu caso te falte "-lSDLmain -lSDL" en ese orden, o bien que no tengas las .dll o .so de SDL en tu path o libpath o ld_library_path.
Con respecto a que te sigue pasando con el ejemplo de fprinft (por cierto, gracias por la correción del ejemplo, lo hice aqui directamente a ciegas :D) entonces ya es que falla algo en el entorno de compilación o bien no tienes el firmware open2x necesario en tu gp2x, si no recuerdo mal, esto le pasaba a drumpi cuando compiló bennugd para gp2x, solo le iba con el firmware open2x, con el original le petaba nosequecosa :D.
Aún así, puede que al ejemplo de mi hola mundo que puse le falte alguna macro de gp2x, voy a averiguarlo mirando los ejemplos del devkitpro.
De todas formas, reitero mi solución de que pruebes a instalarte también el entorno devkitpro, compiles los ejemplos de gp2x y los pruebes en tu gp2x a ver si también les pasa lo mismo. Simplemente es bajar el entorno, abrir una consola, ir al directorio de los ejemplos y hacer make.
Por cierto puedes tener los dos entornos instalados a la vez, es decir, open2x y devkit, por si es eso lo que te asustaba.
Okis, te subo lo que tengo, pero te va a pasar lo mismo: esto está compilado con el SDK Open2x por lo que:
ln -s `whereis -b pkg-config | sed 's/pkg-config\: //g'` /opt/openwiz/toolchain/arm-openwiz-linux-gnu/bin/pkg-config
También te dará error. Solución: abre el .sh y cambia las rutas por las de la toolchain que uses. Lo que te subo verás que tiene el .sh de WIZ y el .sh de GP2X para openwiz, verás que hay algunos cambios, básicamente, las rutas a los binarios.
http://drumpi.se32.com/cosas/bennucompil.rar
Drumpi, eso no me quedó claro.
Yo tenía entendido que open2x es para compilar para la gp2x f-100 o f-200,(digamos la normal o antigua, sucesora de la gp32). http://es.wikipedia.org/wiki/GP2X
Y que openwiz es para compilar para la gp2x wiz (digamos la última de gamepark, para la que splintergu da soporte oficial, sucesora de la anterior) http://es.wikipedia.org/wiki/GP2X_Wiz
Eso que pones me confunde, parece que usas openwiz para compilar para la gp2x antigua.
Tienes razón a mi tambien me confunde, no deberia usar el openwiz, tampoco se en que parte difieren.
Sobre el ejemplo apuesto que es por no ser compatible con mis firmwares como decis, seguramente funcione en open2x. Drumpi porque no lo pruebas en tu máquina ?? Te lo pongo de nuevo, create el .gpe, pero apuesto que directamente pinchando en el .gpu tendria que entrar tambien.
Por ultimo deciros que hoy tambien he conseguido montar mi entorno cygwin para compilar cosas para Dingoo, he creado una carpeta cygwin_dingoo sólo para esta para no mezclarlo con las cosas de la Gp2x.
Y lo bueno es que aqui puedo usar VS2008, lo unico malo, es que he compilado correctamente para Dingoo un ejemplo, y my dingoo no lo arranca y deberia hacerlo...
Sin duda, lo que mas me mola es que por fin estoy montando entornos para estas consolas, y hace meses que lo queria hacer :)
Te lo miro en un rato ¿okis?
Respecto al openwiz... Creo que necesito tomarme lo que queda de día descansando ^^U
Efectivamente, NO uso openWIZ, sino open2X, es que al final me lio solo. Donde dije openwiz, quería decir open2x :P
De todas formas, hay dos .sh en la raiz: uno es el de openwiz, el que usa Splinter para el port a WIZ (open2xwiz-vars.sh), y el otro es para la GP2X (open2x-vars.sh), y el que uso yo es el segundo, antes de compilar nada.
Ok, te agradezco la prueba, por otra parte ya he probado otras cosillas en Dingoo que funcionan :)
He ejecutado el sh, parece que no ha dado error, el problema es que no se que hacer de seguida ;D Joer, que mal estoy con los ficheros de configuracion, cosa que he evitado siempre usando siempre windows y ide's.
Ayudame porfa, te pongo la foto.
(http://forum.bennugd.org/index.php?action=dlattach;topic=726.0;attach=836)
PS: lo tenias chequeado con el CVS y como lo tengo instalado, me ha salido las carpetas con el icono del cvs, que no me mola nada, encima que si tenias una version antigua, imaginate que hago un update :) No se como quitar la asociacion del CVS de tus carpetas...
Pues una vez ejecutado el .sh ya tienes configuradas las rutas de compilación, de las toolchains y todo. Ahora tienes que ir a la carpeta core y hacer el configure: es escribir ese chorizo que te ha salido en las dos últimas lineas, tal cual.
Aunque si es mi carpeta, con actualizar los ficheros de código y hacer directamente MAKE en el core y en la carpeta de los módulos ya debería ir, pero haz el configure.
Lo de quitar la asociación de CVS ni idea, no se aun cómo funciona el tortoise. Supongo que quitando las carpetas que te genera el programa de CVS (las .svn supongo que serán) ya te las debería desasociar.
Por cierto, he probado el hola_mundo: desde el menú se me ha quedado la consola totalmente pillada, menos mal que el open2x tiene un "reset" software y he podido seguir sin apagar (una de las ventajas). Luego lo he probado desde termula (si no lo conoces, es un programa de ventana de comandos) y me ha escrito "Hola mundo" y a continuación el prompt para meter otro comando, o sea, que funciona.
Prueba tu de nuevo con el termula, o usando un GPE con algo así como:
#!/bin/sh
hola.gpu >log.txt
sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Recuerda escribirlo en formato UNIX. Y el GPU sobra ^^
En esas dos ultimas lineas no tengo que cambiar nada de nada (prefix, target..), o sea me parecen parametros que hay que completar... ?
Pero entonces el ejemplo funciona como en las mias... Porque coño no escribe en la consola ?? Ese termula es para windows ? Como lo pruebas en termula (ya que es supuestamente aplicacion Linux) ?
Grácias.
Se refiere a termula para gp2x.
Por otro lado, devkit pro no trae soporte oficial para gp2x, solo lo trae para gp32, así que no he podido encontrar ejemplos para este entorno de gp2x, error mio cuando dije que venían ejemplos :(.
Lo que puedes probar sin termula es el .gpe que te comenta Drumpi que redirige la salida a un archivo de texto para ver si rula y te crea el archivo de texto con las palabras hola mundo.
Me estaba fijando en eso:
(http://www.tuxbrain.com/sites/default/files/P1010109_400.jpg)
Sobre la salida del texto, pues lo pruebo mañana que ya no me apetece salir de la cama ;D
Pero lo raro es que el otro ejemplo que escribe en un fichero externo por código, lo lo haya echo...
Quote from: FreeYourMind on January 31, 2010, 11:33:46 PM
En esas dos ultimas lineas no tengo que cambiar nada de nada (prefix, target..), o sea me parecen parametros que hay que completar... ?
Pero entonces el ejemplo funciona como en las mias... Porque coño no escribe en la consola ?? Ese termula es para windows ? Como lo pruebas en termula (ya que es supuestamente aplicacion Linux) ?
Grácias.
Si, escribe las dos lineas tal cual, sin cambios. Esos parámetros ya se han asignado al ejecutar el .sh (si te lo lees, aunque no sepas mucho, más o menos lo verás)... Aunque no son dos líneas, es una que no cabe en el ancho del shell.
Y no, te hablaba del termula de gp2x, como ya te han dicho (y menos mal que me conozco los atajos de las teclas, que no tegno pantalla táctil).
Ten en cuenta que la consola, el menú es un programa que se cierra cuando ejecutas cualquier cosa, y si no le devuelves el control (por ejemplo, con el código del GPE que he escrito, o añadiendo las líneas que dice en el wiki al final del código para llamar de nuevo al menu2x) se queda en standby.
entonces, drumpi, aclárame una cosa.
Los binarios compilados con open2x pueden ejecutarse sobre un firmware oficial de gamepark? o solo van en el de open2x. o nosabe no contesta :D.
Pues hasta donde yo se, depende.
Si se usan librerías genéricas no hay problema.
Pero a mi, el port de Bennu me da problemas con:
ld-2.2.5.so
libc-2.2.5.so
libcrypt-2.2.5.so
libdl-2.2.5.so
libm-2.2.5.so
libnsl-2.2.5.so
libnss_dns-2.2.5.so
libnss_files-2.2.5.so
libresolv-2.2.5.so
librt-2.2.5.so
libutil-2.2.5.so
Primero te dice error con la libc, y si la pones en la misma carpeta ya no hay problema, hay otro que viene por usar cualquiera de las otras, ya que las del firm oficial son de una versión más antigua, y en este caso, aunque uses las del firm open2x, nada, porque se linkan unas con otras con rutas absolutas y sigue buscando en las carpetas del sistema.
Y lo que he repetido ya varias veces: la solución de sobreescribir las librerías del sistema brickean la consola.
Tambien me ha pasado que, por ejemplo, con las librerías del wifi, que me dice que no valen porque no se han compilado con gcc4.0 (y en el modo de compatibilidad directamente no funcionan).
Y sin embargo me ha funcionado todo lo demás (emuladores, homebrew, ports, Fenix...).
entonces el problema es que hay que compilar con gcc 3.0 para que vaya en el firmware oficial en vez de con gcc 4.0 o voy mal encaminado.
Habria que probar a compilar bennu con devkitgpx2 que este entorno es mas antiguo y por lo que he leido es el que usan casi todos los programadores de homebrew para gp2x, (vamos es lo que he visto en gp32x) el problema estará en que habrá que rehacer todos los makefiles para eliminar la dependencia de las autotools o buscar una manera de usar autotools en el entorno :).
me parece que no deberias tocar lo de autotools, eso no deberia tener que ver con el compilador...
si me consiguen el entorno de compilacion para linux lo hago yo...
Quote from: DCelso on February 01, 2010, 04:58:41 PM
Habria que probar a compilar bennu con devkitgpx2 que este entorno es mas antiguo y por lo que he leido es el que usan casi todos los programadores de homebrew para gp2x, (vamos es lo que he visto en gp32x) el problema estará en que habrá que rehacer todos los makefiles para eliminar la dependencia de las autotools o buscar una manera de usar autotools en el entorno :).
Es lo que yo siempre he pensado, si con ese entorno se hacen aplicaciones compatibles con todos los firmware, pues lo mejor era poder adaptar lo que se pudiera con este entorno (ni que Bennu tuviera que perder alguna cosilla como en wii).
Vamos si Fenix, Puck lo compilo con este entorno, no veo que esta fallando para que alguiencon experiencia en linux lo haga.
Splinter, no se como has preparado el entorno para windows para compilar Bennu para Win, y no lo haces para Gp2x si es Linux ;)
Vamos, yo es más que nada por internar algo, pero soy un novato en experiencia con estos entornos (aunque hace años que los acompaño) ...
Quote from: Drumpi on January 31, 2010, 10:41:46 PM
Prueba tu de nuevo con el termula, o usando un GPE con algo así como:
#!/bin/sh
hola.gpu >log.txt
sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu
Recuerda escribirlo en formato UNIX. Y el GPU sobra ^^
Lo he probado con termula2x-0.2.1-turkiye-dynarmic.tar.gz y funciona, pero usando tu ejemplo, el log.txt se crea pero tampoco escribe nada en el.
Para pintar en la consola, habra que usar funciones gráficas, seguro que hay mogollon de ejemplos, pero eso lo dejo para si algun día me pongo a programar algo en c para la Gp2x. De momento prefiero hacerlo para Dingoo, que lo tengo más adelantado, pero curiosamente tampoco he podido escribir letras en pantalla (aunque ya he podido dibujar algunas cosillas) ;D
Voy a echar otro ojo a bennu a ver que tal.
SplinterGU, open2x está también para linux. http://wiki.gp2x.org/wiki/Installing_the_Open2x_toolchain
He estado leyendo los distintos entornos de programación para gp2x y he de decir que devkitgp2x usa también gcc 4.x, así que creo que compilar con gcc 4.x no debería hacer el software incompatible con el firmware original de la gp2x, por lo que a la compilación que hizo Drumpi le debió de faltar algún parámetro o algo que hizo al binario dependiente del firmware open2x.
http://wiki.gp2x.org/wiki/Getting_started_with_GP2X_development
sencillamente porque no tengo mas espacio en disco en windows, y porque no se como se hace en windows para tener el cross...
Quote from: DCelso on February 01, 2010, 08:59:36 PM
SplinterGU, open2x está también para linux. http://wiki.gp2x.org/wiki/Installing_the_Open2x_toolchain
He estado leyendo los distintos entornos de programación para gp2x y he de decir que devkitgp2x usa también gcc 4.x, así que creo que compilar con gcc 4.x no debería hacer el software incompatible con el firmware original de la gp2x, por lo que a la compilación que hizo Drumpi le debió de faltar algún parámetro o algo que hizo al binario dependiente del firmware open2x.
http://wiki.gp2x.org/wiki/Getting_started_with_GP2X_development
esto no es lo mismo que compilo drumpi? la que no funciona en todos los gp2x?
He echo el segundo paso, y me da este error:
(http://forum.bennugd.org/index.php?action=dlattach;topic=726.0;attach=838)
Por partes:
Si, había pensado en instalarme el SDK oficial, pero el que hay usa codeblocks o dev-c++ y no se pueden usar las autotools, por lo que me pierdo. Creo recordar que una vez conseguí usar las autotools del entrono con dev-c++, haciendo un experimento raro, pero no he conseguido reproducirlo. Me funcionó el ejemplo de SDL que incluye, pero no las dll para Fenix que si me iban en Windows.
De todas formas, Free, no le riñas a Splinter, porque aunque la WIZ/GP2X use linux, llevan un procesador ARM, no X86, por lo que se necesita un compilador cruzado, que es algo aun más complejo que compilar para otro SO. ;D
Para pintar en la cosola están las SDL, o si no tendrías que usar alguna librería gráfica. Creo que se debe a que estamos acostumbrados a diseñar código para la ventana de comandos, y este va sobre un motor gráfico, que es el que usa el SO, y en cuanto se nos quita la capa esa de debajo, nos caemos :D :D :D
Lo de la versión del GCC, no sé, a mi me daba problemas con el módulo de wifi en Open2X por haber sido compilado en una versión no v4. De bennu lo que me da problemas son las DLL ya compiladas (yo no las he hecho, son las del sistema). Tened en cuenta que el firm open2x se hizo usando herramientas más modernas y con librerías ligeramente más avanzadas, puede que de ahi venga el fallo.
De los enlaces de DCelso, el primero si es el mio, el segundo, el del devkitpro con el minsys no, lo tengo instalado pero no he conseguido que funcione, supongo que me faltan los pasos de configuración de PATH, algo que no me he atrevido a tocar nunca (cosas del sistema no me meto).
Y respecto al mensaje de error: lo único que se me ocurre es que no has cambiado correctamente la ruta. Mira el log que te ha creado, por ahí te dirá dónde ha buscado el gcc, porque a mi me costó bastantes intentos por culpa de las barras (la última, que no sabía si había que ponerla o no). Ten en cuenta que cygwin es como un linux: distingue entre mayúsculas y minúsculas, y usa las barras / en lugar de \
Si no, no tengo ni idea, eso es Splinter el que te lo tendría que aclarar. Estas cosas son las que no te enseñan cuando empiezas a programar :S
No te preocupes, el mayor fallo es no dedicarle los minutos necesarios, ya lo mirare y intentaré arreglar con calma. Tambien hay un documento por openhandhelds que te enseña a instalar el sdk en codeblocks, yo tengo el codeblocks, igual lo miro tambien.