Kit de desarrollo completo para PSP. ACTUALIZADO.

embeddedArco

Bien... supongo que quien tenga una PSP y tenga espíritu aventurero (o firmware 1.50) habrá pensado alguna vez hacerse un programita para la PSP... ver su "creación" en semejante aparatejo. Si tenéis una importante empresa y mucho dinero tal vez podáis pedir el SDK oficial a Sony y si a ellos les apetece, poder formar parte de los elegidos capaces de crear pequeñas joyas portables para disfrute de todos (o unos pocos). Por el contrario, si lo único que queréis es sacar el máximo partido posible a algo vuestro, usándolo como más os guste y sin tener que gastaros otra fortuna gracias al software libre (que, además, es gratuito), necesitaremos un SDK... no tan oficial como el de Sony pero que nos permitirá realizar nuestras propias aplicaciones. Eso vamos a intentar, configurar e instalar nuestro propio SDK (o homebrew como se conoce coloquialmente a este tipo de SDK's no oficiales).

Estado del arte

Bien, a partir de ahora llamaremos scene al estado del arte del homebrew, no por hacernos los "guays" sino porque en google obtendréis mejores resultados con "psp scene" que con "psp estado del arte". O dicho de otro modo: así se le llama a este mundillo.

Actualmente disponemos de un completo toolchain para las psp. Esto nos permitirá usar la potencia del gcc para crear ejecutables para nuestras consolas.

Además de programar en C, se han creado intérpretes de LUA y de python por lo que podremos empezar a crear programillas sin tener que meternos de lleno con el gcc. Además se han portado muchas librerías a LUA como por ejemplo SDL, etc. El python también está cada vez menos "verde", etc. De todas formas, aquí explicaremos como instalarnos el pspsdk homebrew, con lo que obtendremos el gcc-psp y los intérpretes de LUA y python así como muchas librerías interesantes tipo SDL. Vamos al trabajo!

Instalación del toolchain

Esto es lo primero y lo principal... sin esto no podemos empezar a hacer nada, nos bajaremos el repositorio de todo el SDK completo que, entre otras cosas, incluye estos scripts (yo uso el normal... no el "sudo"... bastantes emociones tengo ya... ;-)). Antes de instalarlo debemos asegurarnos que tenemos instalados los siguientes paquetes:

  • automake1.9
  • bison
  • dot2tex
  • doxygen
  • flex
  • libncurses5-dev
  • libreadline5-dev
  • texinfo
  • libusb-dev
  • libgmp3-dev
  • libmpfr-dev
  • libreadline-dev

Ahora descargamos el repositorio completo:
$ svn co svn://svn.ps2dev.org/psp/trunk

Para ejecutar el script tendremos que establecer algunas variables en el sistema:
$ export PSPDEV=/usr/local/pspdev
$ export PATH=$PATH:$PSPDEV/bin

Es recomendable dejar fijos estos cambios, para ello (y si no queremos interferir en el resto de usuarios) modificaremos el archivo ~/.bashrc y añadiremos las siguientes líneas:

export PSPDEV="/usr/local/pspdev"
export PATH="$PATH:$PSPDEV/bin"

Ya sólo nos queda ejecutar el script del toolchain:

$ cd trunk/psptoolchain
$ ./toolchain.sh

Bien, esto se descargará todas las herramientas de GNU necesarias, los últimos parches disponibles para ellas, los aplicará, compilará las herramientas y finalmente, las instalará. No hace falta ser root (no debemos serlo) ya que instala todo eso en /usr/local/pspdev y ahí podremos escribir si pertenecemos al grupo staff.

Instalación del homebrew

Tenemos la gran mayoría del homebrew recopilado en el repositorio subversion que descargamos anteriormente, además de unas cuantas librerías y utilidades bastante "entretenidas" (por ejemplo: SDL, prx-tools, etc.).. , sólo debemos compilarlo e instalarlo. No es difícil, es más bien repetitivo.

Ya que tenemos el compilador para psp listo, lo siguiente es compilar el pspsdk, que son las bibliotecas de acceso a los recursos de la psp:

$ cd trunk/pspsdk
$ ./bootstrap
$ ./configure
$ make
$ make doxygen-doc (opcional)
$ make install

Al igual que antes, no es necesario ser root en ninguno de los pasos, todo se instalará en los directorios de /usr/local/pspdev.

Instalación automática de librerías

Gracias a uno de los sceners que más han contribuído al pspsdk, un tal oopo, tenemos un script que nos descargan y compilan el resto de librerías extra como son zlib, SDL, etc. Para usar este script es necesario tener instalado libtool:
$ cd trunk/psplibraries
$ ./libraries.sh

Esto nos instalará (en este orden): zlib, bzip2, freetype, jpeg, libbulletml, libmad, libmikmod, libogg, libpng, libpspvram, libTremor, libvorbis, lua, pspgl, pspirkeyb, sqlite, SDL, SDL-gfx, SDL-image, SDL-mixer, SDL-ttf, smpeg-psp y zziplib. ¿Suficiente? ;-)

Instalación manual de librerías

Si no queremos instalar todo eso, podemos instalar las que deseemos una a una, a modo de ejemplo vamos a instalar una libreria, aunque el sdk incluye muchas, todas se suelen hacer de igual o similar forma. En cualquier caso, en cada directorio tenéis un fichero README.PSP que os lo explica, así como si la librería tiene dependencias (en cuyo caso hay que compilar e instalar sus dependencias antes). Vamos a instalar SDL, por ejemplo: leemos su archivo README.PSP y encontramos las instrucciones para hacerlo:

$ cd trunk/SDL
$ ./autogen.sh
$ LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix)
$ make
$ make install

Repito que en ningún paso es necesario ser root. Esto instalará las librerías para psp y sus cabeceras. En el README.PSP explican cómo escribir aplicaciones para psp que usen estas librerías, incluyendo las opciones del compilador.

El orden de instalación de las utilidades y las librerías que YO he seguido es el siguiente:

  1. psptoolchain
  2. pspsdk
  3. cppunit
  4. pspgl
  5. SDL
  6. SDL_gfx
  7. jpeg
  8. zlib
  9. libpng
  10. SDL_image
  11. libTremor
  12. libogg
  13. libvorbis
  14. libmikmod (ver parche más abajo)
  15. mikmodlib
  16. cpplibs
  17. SDL_mixer
  18. freetype
  19. SDL_ttf
  20. cal3D

Con esto tendréis toda la versatilidad de SDL al alcance de vuestra psp ;-) (así como otro montón de librerías interesantes).

Nota: libmikmod compila y se instala sin problemas, sin embargo, no se puede usar de forma "automática" en tus compilaciones porque no se ha incluído el programa libmikmod-config. Yo he creado el mio propio que debéis copiar en /usr/local/pspdev/psp/bin (bueno... depende de donde estéis instalando todo, en realidad sería en $(psp-config -p)/bin). Una vez compilado e instalado libmikmod copiáis este archivo y seguís la instalación de las librerías de forma normal.

#! /bin/sh
prefix=`psp-config -P`
exec_prefix=${prefix}
exec_prefix_set=no

usage="Usage: libmikmod-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] \
[--libs] [--cflags] [--ldadd]"

if test $# -eq 0 ; then
        echo "${usage}" 1>&2
        exit 1
fi

while test $# -gt 0 ; do
        case "$1" in
        -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
        *) optarg= ;;
        esac

        case $1 in
        --prefix=*)
                prefix=$optarg
                if test $exec_prefix_set = no ; then
                        exec_prefix=$optarg
                fi
        ;;
        --prefix)
                echo $prefix
        ;;
        --exec-prefix=*)
                exec_prefix=$optarg
                exec_prefix_set=yes
        ;;
        --exec-prefix)
                echo $exec_prefix
        ;;
        --version)
                echo 3.1.11
        ;;
        --cflags)
                includedir=${prefix}/include
                if test $includedir != /usr/include ; then
                includes=-I$includedir
                fi
                echo $includes
        ;;
        --ldadd)
        ;;
        --libs)
                libdir=-L${exec_prefix}/lib
                echo $libdir -lmikmod -L`psp-config -P`/lib -L`psp-config \
-p`/lib -lm -lpspvfpu -lpspdebug -lpspgu -lpspctrl -lpspge -lpspdisplay \ 
-lpsphprm -lpspsdk -lpsprtc -lpspaudio -lc -lpspuser -lpsputility -lpspkernel
        ;;
        *)
                echo "${usage}" 1>&2
                exit 1
        ;;
        esac
        shift
done

DevKit Pro

Gracias a la inestimable ayuda de Paco, disponemos de un paquete debian con la toolchain y el pspsdk completo, como podéis ver en este aviso. Funciona perfectamente, pero no se puede compilar e instalar directamente el resto de librerías puesto que los scripts del homebrew son un poco cutres y hay que maquillarlos un poquito... cuando tenga tiempo intentaré buscar alguna solución...

Conclusiones

Bueno... con esto tendréis un completo entorno de desarrollo para psp. Era el objetivo de la receta. De todas formas falta aún una cosa: crear un archivo EBOOT.PBP listo para su ejecución en la consola. El problema se reduce a tener el Makefile apropiado. Os sugiero que os descarguéis el código fuente del port del maravilloso ScummVM, tiene el mejor Makefile sobre el tema que he visto. De todas formas, si no dáis con ello, se hace una receta y en paz, ok?

Disfruten! :-)

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Problemilla

Hola.
En su dia seguí éste tutorial y me funcionó al 100%, pero ahora tengo un portatil nuevo y le quería instalar el sdk. El caso es que, como no está el tool chain que se indica, lo he tenido que probar con otros (20070830, 20070626 y 20080610). El caso es que con los tres me da el mismo error:

../scripts/001-binutils-2.16.1.sh: Failed.
ERROR: Could not run the toolchain script.

y se para. Antes de ésto no da ningun error, aunque por si acaso pongo algunas salidas:
checking for gcc version with buggy 64-bit support... no
checking for ftello... yes
checking for ftello64... yes
checking for fseeko... yes
checking for fseeko64... yes
checking size of off_t... 8
checking file_ptr type... BFD_HOST_64_BIT
checking for stdlib.h... (cached) yes
checking for unistd.h... (cached) yes
checking for getpagesize... (cached) yes
checking for working mmap... (cached) yes
checking for madvise... yes
checking for mprotect... yes
updating cache ./config.cache
configure: creating ./config.status
config.status: creating Makefile
config.status: creating doc/Makefile
config.status: creating bfd-in3.h
config.status: creating po/Makefile.in
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default commands
../scripts/001-binutils-2.16.1.sh: Failed.
ERROR: Could not run the toolchain script.

Llevo dos dias con esto, googleando, pero a todo el mundo le pasa usando el Cygwin, y resultan ser fallos del tipo de que el nombre de usuario o la carpeta tienen espacios, que no es mi caso. ¿Teneis alguna idea de por que puede ser? Tengo un Core2Duo y un Ubuntu 8.04 de 64bits, ¿eso influye? ¿Alguien tiene el 20060120, por si este si me funciona?
Muchas gracias de antemano por la ayuda, y gracias tardías por el tutorial. Me fue realmente util.

int-0's picture

Lo siento...

...pero me he bajado el último toolchain script que he encontrado, lo he descomprimido y lo he ejecutado... y funciona sin problemas, no me da el error que comentas, así que al no ser reproducible... no sé cómo podría ayudarte...

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

Fallo segmentación de gcc?

Tienes razón, con el error ese poco se puede hacer. He seguido investigando y creo que he llegado al error por el que falla el script 001-binutils. Al compilar el libiberty en la carpeta binutils da un fallo de segmentación el gcc (que por cierto no se si es normal, pero a mí no me había pasado hasta ahora):

joserc87@portatile:~/Programas/psptoolchain/scripts/binutils-2.16.1/libiberty$ make
if [ x"" != x ] && [ ! -d pic ]; then \
	  mkdir pic; \
	else true; fi
touch stamp-picdir
if [ x"" != x ]; then \
	  gcc -c -DHAVE_CONFIG_H -g -O2 -I. -I./../include  -W -Wall -Wtraditional -pedantic  ./regex.c -o pic/regex.o; \
	else true; fi
gcc -c -DHAVE_CONFIG_H -g -O2 -I. -I./../include  -W -Wall -Wtraditional -pedantic ./regex.c -o regex.o
 
In file included from ./../include/xregex.h:26,
                 from ./regex.c:199:
Fallo de segmentación
Por favor envíe un reporte completo de bichos,
con el código preprocesado si es apropiado.
Vea <URL:http://gcc.gnu.org/bugs.html> para más instrucciones.
For Debian GNU/Linux specific bug reporting instructions,
see <URL:file:///usr/share/doc/gcc-4.2/README.Bugs>.
make: *** [regex.o] Error 1

De "pequeño" siempre te enseñan que nunca es fallo del compilador, sino tuyo, pero ya no se que pensar. Estoy acostrumbrado a que el compilador me de errores de compilacion, pero de ejecucion... Puzzled
Alguien sabe si el error tiene alguna explicación, o es solo por que soy negro? Sad

Muchas gracias por aguantarme y perdón por tardar tanto en contestar.

Solución

Me contesto a mi mismo dando(me) la solución. Más que nada por si alguien llega aqui con el mismo problema. En google apenas hay información sobre este error, y ya que lo conseguí solucionar cerca de un mes más tarde, no quiero que nadie pase por esto innecesariamente. Esto error me ocurrió en Ubuntu7.10, Ubuntu8.04 y Ubuntu8.10. Ahora he actualizado a la 9.10 y he conseguido instalar por primera vez del tirón sin un solo error, incluso con el script que instala todas las librerías de golpe! Smiling.
Bueno, no se donde radica exactamente el fallo (al principio creí que era por la arquitectura de 64bits, pero probé en un celeron de 32 y me dió el mismo error). El caso es que la solución que encontré fue cambiar el compilador (yo cambie tanto gcc como g++ por si acaso) a una versión más baja a la hora de instalar la toolchain. Simplemente hay que instalar una versión más antigua, borrar el link /usr/bin/gcc y crearlo de nuevo linkando a la versión gcc antigua que está en el mismo directorio (idem para g++). Una vez que se ha instalado todo, se puede restaurar sin problema la versión nueva.
Otra opción es subir la versión, ya que como digo en la versión 9.10 de ubuntu (que usa gcc-4.4) si me funciona.
Supongo que nunca sabré el porqué del error, pero siempre recordaré con cariño el día que gcc me soltó un fallo de segmentación...xD. Espero que nadie necesite leer esto.

Saludos.

El enlace para la descarga de la toolchain

me temo que no funciona. Yo la he descargado mediante subversion:
javieralso@avalon:~$ svn co svn://svn.pspdev.org/psp/trunk/psptoolchain

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

brue's picture

int-0...

.. seguro que lo cambia Smiling A mi me ha pasado lo mismo y he usado esa dirección sin problemas

--
"Computer Science is no more about computers than astronomy is about telescopes."
– Edsger W. Dijkstra

brue

problema con cpplibs

Hola tengo un problema al compilar cpplibs(el último extra que me falta) haber si alguien me puede ayudar pongo el error:

cd libpsp2d && make
make1: se ingresa al directorio `/home/fastangel/configuracion/programas/psptoolchain/trunk/cpplibs/libpsp2d’
psp-g++ -I. -I/usr/local/pspdev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -I.. -c -o framebuffer.o framebuffer.cpp
psp-g++ -I. -I/usr/local/pspdev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -I.. -c -o Exception.o Exception.cpp
psp-g++ -I. -I/usr/local/pspdev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -I.. -c -o Drawable.o Drawable.cpp
psp-g++ -I. -I/usr/local/pspdev/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=150 -I.. -c -o Screen.o Screen.cpp
Screen.cpp:41:17: error: png.h: No existe el fichero o el directorio
Screen.cpp: In static member function ‘static u32* PSP2D::Screen::getList()’:
Screen.cpp:229: error: conversión inválida de ‘unsigned int*’ a ‘u32*’
Screen.cpp: In member function ‘void PSP2D::Screen::_saveToPNG(const std::string&)’:
Screen.cpp:266: error: ‘png_structp’ no se declaró en este ámbito
Screen.cpp:266: error: expected `;’ before ‘png_ptr’
Screen.cpp:267: error: ‘png_infop’ no se declaró en este ámbito
Screen.cpp:267: error: expected `;’ before ‘info_ptr’
Screen.cpp:277: error: ‘png_ptr’ no se declaró en este ámbito
Screen.cpp:277: error: ‘PNG_LIBPNG_VER_STRING’ no se declaró en este ámbito
Screen.cpp:277: error: ‘png_create_write_struct’ no se declaró en este ámbito
Screen.cpp:284: error: ‘info_ptr’ no se declaró en este ámbito
Screen.cpp:284: error: ‘png_create_info_struct’ no se declaró en este ámbito
Screen.cpp:286: error: ‘png_infopp’ no se declaró en este ámbito
Screen.cpp:286: error: ‘png_destroy_write_struct’ no se declaró en este ámbito
Screen.cpp:291: error: ‘png_init_io’ no se declaró en este ámbito
Screen.cpp:293: error: ‘PNG_COLOR_TYPE_RGB’ no se declaró en este ámbito
Screen.cpp:293: error: ‘PNG_INTERLACE_NONE’ no se declaró en este ámbito
Screen.cpp:294: error: ‘PNG_COMPRESSION_TYPE_DEFAULT’ no se declaró en este ámbito
Screen.cpp:294: error: ‘PNG_FILTER_TYPE_DEFAULT’ no se declaró en este ámbito
Screen.cpp:294: error: ‘png_set_IHDR’ no se declaró en este ámbito
Screen.cpp:295: error: ‘png_write_info’ no se declaró en este ámbito
Screen.cpp:298: aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto
Screen.cpp:298: error: conversión inválida de ‘int*’ a ‘int’
Screen.cpp:298: error: argumento de inicialización 4 de ‘int sceDisplayGetFrameBuf(void**, int*, int*, int)’
Screen.cpp:334: error: ‘png_write_row’ no se declaró en este ámbito
Screen.cpp:337: error: ‘png_write_end’ no se declaró en este ámbito
Screen.cpp:338: error: ‘png_infopp’ no se declaró en este ámbito
Screen.cpp:338: error: ‘png_destroy_write_struct’ no se declaró en este ámbito
make1: *** [Screen.o] Error 1
make1: se sale del directorio `/home/fastangel/configuracion/programas/psptoolchain/trunk/cpplibs/libpsp2d’
make: *** [libs] Error 2

brue's picture

edita..

el archivo png.h y en la linea 229 modifica, añadiendo (u32 *) del modo:

return (u32*) loquesiga

y recompila.


PPC: int main(){long foo=1649571173;puts(&foo);}
x86: int main(){long foo=1702187618;puts(&foo);}

brue

int-0's picture

Me la juego...

…has instalado libpng en el pspdev? comprueba que está correctamente instalado porque no se de qué me suena que había que hacer alguna correción por ahí (con libpng o con cpplibs), pero no estoy seguro…
—————————————————————
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')"
------------------------------------------------------------

Y también hay que instalar ...

… libusb-dev

Por eso no me compilaba a mi la toolchain Laughing out loud

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

Problema al instalar toolchain

Felicidades por el tuto. No podria ser más claro. Sobre todo me gusta especialmente por que trata como instalar el toolchain en linux y las librerías SDL.
El problema que tengo es que no puedo instalar el toolchain Sad. Lo he probado 2 veces ya, y despues de 1 hora y media bajando y compilando cosas, me dan una serie de errores de compilación.
Por los errores que obtengo, lo que me he dado cuenta es que dice que me falta el usb.h. Eso que significa? Tengo todos los paquetes necesarios, al menos los que se dicen arriba. Cual puede ser el problema? Pueden ser las cabeceras de linux-headers?

Agradecería muy-muy-mucho al que me pueda ayudar.

pongo la parte de los errores (si creeis que es demasiado texto como para ponerlo aki, decidlo y lo quito):

A psplinkusb/Makefile.clients
A psplinkusb/Makefile
A psplinkusb/Makefile.psp
A psplinkusb/psplink_user
A psplinkusb/psplink_user/exports.exp
A psplinkusb/psplink_user/kmode.S
A psplinkusb/psplink_user/psplink_user.h
A psplinkusb/psplink_user/main.c
A psplinkusb/psplink_user/Makefile
U psplinkusb
Revisión obtenida: 2336
make -C pspsh clean
make[1]: se ingresa al directorio `/home/hack87/psp_programing/install/psptoolch ain/build/psplinkusb/pspsh'
rm -f pspsh *.o
make[1]: se sale del directorio `/home/hack87/psp_programing/install/psptoolchai n/build/psplinkusb/pspsh'
make -C usbhostfs_pc clean
make[1]: se ingresa al directorio `/home/hack87/psp_programing/install/psptoolch ain/build/psplinkusb/usbhostfs_pc'
rm -f usbhostfs_pc *.o
make[1]: se sale del directorio `/home/hack87/psp_programing/install/psptoolchai n/build/psplinkusb/usbhostfs_pc'
if ( test -f /usr/include/SDL/SDL.h ); then { make -C tools/remotejoy/pcsdl clea n; } else { make -C tools/remotejoy/pc clean; } fi
make[1]: se ingresa al directorio `/home/hack87/psp_programing/install/psptoolch ain/build/psplinkusb/tools/remotejoy/pcsdl'
rm -f remotejoy *.o
make[1]: se sale del directorio `/home/hack87/psp_programing/install/psptoolchai n/build/psplinkusb/tools/remotejoy/pcsdl'
make -C pspsh all
make[1]: se ingresa al directorio `/home/hack87/psp_programing/install/psptoolch ain/build/psplinkusb/pspsh'
g++ -Wall -g -D_PCTERM -I../psplink -c -o pspsh.o pspsh.C
g++ -Wall -g -D_PCTERM -I../psplink -c -o parse_args.o parse_args.C
g++ -Wall -g -D_PCTERM -I../psplink -c -o pspkerror.o pspkerror.C
g++ -Wall -g -D_PCTERM -I../psplink -c -o asm.o asm.C
g++ -Wall -g -D_PCTERM -I../psplink -c -o disasm.o disasm.C
g++ -o pspsh pspsh.o parse_args.o pspkerror.o asm.o disasm.o -lreadline -lcurses
make[1]: se sale del directorio `/home/hack87/psp_programing/install/psptoolchai n/build/psplinkusb/pspsh'
make -C usbhostfs_pc all
make[1]: se ingresa al directorio `/home/hack87/psp_programing/install/psptoolch ain/build/psplinkusb/usbhostfs_pc'
cc -Wall -ggdb -I../usbhostfs -DPC_SIDE -D_FILE_OFFSET_BITS=64 -I. -O2 -c -o m ain.o main.c
main.c:19:17: error: usb.h: No such file or directory
main.c:98: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ to ken
main.c:207: error: expected ‘)’ before ‘*’ token
main.c:226: error: expected ‘)’ before ‘*’ token
main.c:244: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ t oken
main.c:311: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:311: warning: its scope is only this definition or declaration, which is probably not what you want
main.c: In function ‘close_device’:
main.c:317: warning: implicit declaration of function ‘usb_release_interface’
main.c:318: warning: implicit declaration of function ‘usb_reset’
main.c:319: warning: implicit declaration of function ‘usb_close’
main.c: At top level:
main.c:853: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c: In function ‘handle_hello’:
main.c:861: warning: implicit declaration of function ‘usb_bulk_write’
main.c: At top level:
main.c:864: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c: In function ‘handle_open’:
main.c:891: warning: implicit declaration of function ‘euid_usb_bulk_read’
main.c:901: warning: implicit declaration of function ‘euid_usb_bulk_write’
main.c: At top level:
main.c:908: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:982: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1076: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1143: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1194: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1225: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1290: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1337: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1392: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1447: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1502: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1654: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1702: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1785: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1836: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:1948: warning: ‘struct usb_dev_handle’ declared inside parameter list
main.c:2014: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
main.c: In function ‘do_hostfs’:
main.c:2086: error: ‘g_hDev’ undeclared (first use in this function)
main.c:2086: error: (Each undeclared identifier is reported only once
main.c:2086: error: for each function it appears in.)
main.c: In function ‘do_bulk’:
main.c:2223: error: ‘g_hDev’ undeclared (first use in this function)
main.c: In function ‘start_hostfs’:
main.c:2250: error: ‘g_hDev’ undeclared (first use in this function)
main.c:2250: warning: implicit declaration of function ‘wait_for_device’
main.c:2291: warning: dereferencing type-punned pointer will break strict-aliasi ng rules
main.c:2301: warning: dereferencing type-punned pointer will break strict-aliasi ng rules
main.c:2311: warning: dereferencing type-punned pointer will break strict-aliasi ng rules
main.c: In function ‘exit_app’:
main.c:2460: error: ‘g_hDev’ undeclared (first use in this function)
main.c: In function ‘async_thread’:
main.c:3083: error: ‘g_hDev’ undeclared (first use in this function)
main.c: In function ‘main’:
main.c:3119: warning: implicit declaration of function ‘usb_init’
make[1]: *** [main.o] Error 1
make[1]: se sale del directorio `/home/hack87/psp_programing/install/psptoolchai n/build/psplinkusb/usbhostfs_pc'
make: *** [all] Error 2
../scripts/009-psplinkusb.sh: Failed.

Gracias de antemano.

int-0's picture

Problema con usb.h

Si te fijas en los scripts que compilan la toolchain, resulta que intenta instalar y compilar psplinkusb, para compilar la parte del PC de estas utilidades/librerías es necesario el paquete libusb-dev en el sistema, en Debian/Ubuntu:
# apt-get install libusb-dev
(también se puede usar aptitude Smiling)

Con eso instalado te debería compilar sin problemas esta parte y todo el proceso continuará normalmente. Suerte.

------------------------------------------
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')"
------------------------------------------------------------

Me funciona!

Ya me funciona:)Smiling:)! muchisimas gracias por la rapidez en contestar Eye-wink

int-0's picture

Pues ahora...

...a ver si haces un programa chulo y lo subes que aprendamos Eye-wink
------------------------------------------
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')"
------------------------------------------------------------

Gracias

Me estaba dando problemas la cuestión de los permisos en Ubuntu, resulta que para ejecutar el toolchain usé sudo (puesto que /usr/local le pertenece a root en esta distribución), pensé que no habría problemas puesto que tras la instalación podía ejecutar todas las herramientas psp-xxx, sin embargo al compilar no encontraba psp-ranlib. El problema eran los permisos (no entiendo bien la razón, como dije, desde mi usuario ejecuto sin problemas psp-ranlib y las demás desde la terminal), en fin, ya logré que funcionara, muchas gracias Laughing out loud.

instalación del toolchain

Hola, antes que nada agrader esta receta porque es la única sobre linux que he encontrado.

Yo soy nuevo en ésto de linux, hace apenas un mes que instalé Ubuntu porque me dijo un amigo que estaba muy bien. Cuál fue mi sorpresa cuando me pongo con ello, me bajo la imagen correspondiente a 6.10 amd64 y me aparece un mensaje de "signal out of range". En fin esto era solo para poneros en situación de mi nivel de inmadurez en lo que se refiere a linux: la shell, comandos, makefiles, librerías, repositorios, el famoso aptitude y toda esa maraña de cosas, que flotan en mi cabeza.

Una vez que con la beta del Feisty Fawn 7.04 de Ubuntu he conseguido instalarlo pues me había animado a instalar el toolchain en ubuntu al igual que lo tengo en el cywin sobre wXP. Se que ser root es como decir el administrador del equipo pero no entiendo bien como hay que realizar estos pasos sin ser root cuando al meterme en el sistema operativo ya me pide login y contraseña y me meto...como root (supongo yo vamos). En fin la cosa es que guiándome de mi mala intuición cuando en el paso de ejecutar ./toolchain.sh (los previos, es decir, instalación de las librerías necesarias, y descarga del archivo yo creo que los hice bien) llegó un punto de la instalación que ponía que no podía crear la carpeta .../pspdev y yo siguiendo mi pésima intuición pensé que eso era porque no era root y volví a ejecutarlo añaciendo sudo a la instrucción. Esto lo seguí aplicando a la hora de instalar el pspsdk (también tengo una duda con esto, ¿no es el pspsdk precisamente lo que instala el toolchain? de hecho siguiendo otras guias de instalación del entorno en windows sobre cygwin no hablan de instalar tras el toolchain el pspsdk ) pero llegó un punto en el que me dió un error aunque pusiera sudo delante os pongo esta parte:

wilcome@wilcome-desktop:~/trunk/pspsdk$ make install
Making install in src
make[1]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src'
Making install in atrac3
make[2]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[3]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
test -z "/usr/local/pspdev/psp/sdk/lib" || mkdir -p -- "/usr/local/pspdev/psp/sdk/lib"
 /usr/bin/install -c -m 644 'libpspatrac3.a' '/usr/local/pspdev/psp/sdk/lib/libpspatrac3.a'
/usr/bin/install: no se puede borrar `/usr/local/pspdev/psp/sdk/lib/libpspatrac3.a': Permiso denegado
make[3]: *** [install-libLIBRARIES] Error 1
make[3]: se sale del directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[2]: *** [install-am] Error 2
make[2]: se sale del directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[1]: *** [install-recursive] Error 1
make[1]: se sale del directorio `/home/wilcome/trunk/pspsdk/src'
make: *** [install-recursive] Error 1
wilcome@wilcome-desktop:~/trunk/pspsdk$ sudo make install
Password:
Making install in src
make[1]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src'
Making install in atrac3
make[2]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[3]: se ingresa al directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
test -z "/usr/local/pspdev/psp/sdk/lib" || mkdir -p -- "/usr/local/pspdev/psp/sdk/lib"
 /usr/bin/install -c -m 644 'libpspatrac3.a' '/usr/local/pspdev/psp/sdk/lib/libpspatrac3.a'
 psp-ranlib '/usr/local/pspdev/psp/sdk/lib/libpspatrac3.a'
/bin/bash: line 4: psp-ranlib: orden no encontrada
make[3]: *** [install-libLIBRARIES] Error 127
make[3]: se sale del directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[2]: *** [install-am] Error 2
make[2]: se sale del directorio `/home/wilcome/trunk/pspsdk/src/atrac3'
make[1]: *** [install-recursive] Error 1
make[1]: se sale del directorio `/home/wilcome/trunk/pspsdk/src'
make: *** [install-recursive] Error 1
wilcome@wilcome-desktop:~/trunk/pspsdk$ 

Estoy completamente seguro de que nunca debí ejecutar las instrucciones con "sudo" delante pero ahora ya no sé como echar marcha atrás no sé como volver sobre mis pasos ni sé como hacerlo bien. Básicamente estoy perdido. Siento haberme alargado tanto. Gracias.

int-0's picture

Corregir los 'sudo'...

La gente que empieza en esto del GNU/Linux suele usar como usuario para todo root. Esto es un grave error, deberías crearte un usuario y hacer siempre el login con ese usuario. Como ya tienes la toolchain instalada para el root lo que puedes hacer es cambiar el propietario de la toolchain y poner al nuevo usuario como propietario:

$ cd /usr/local
$ chown usuario:staff -R pspdev/*
$ chown usuario:staff pspdev

De todas formas, independiente a todo esto, he observado un error en la salida que has pegado:

/bin/bash: line 4: psp-ranlib: orden no encontrada

Esta utilidad se tiene que crear al instalar el toolchain, si no se ejecuta puede ser por dos motivos: algún error en la compilación o no se encuentra el ejecutable, en mi caso está en /usr/local/pspdev/bin/psp-ranlib. Si tienes ahí el ejecutable y no se encuentra es porque no has añadido ese directorio al path de tu sistema, añade esto en el .bash_profile que encontraras en tu home:

# set PATH so it includes user's private bin if it exists
if [ -d /usr/local/pspdev/bin ] ; then
    export PSPDEV="/usr/local/pspdev"
    export PATH="$PATH:$PSPDEV/bin"
fi

Si el ejecutable no existe entonces no se te está compilando bien el toolchain, revisa los pasos de la generación. Puede ser incluso por algún bug en los parches de la gnu toolchain (poco probable).

Por último sólo decirte que el toolchain es el conjunto de herramientas necesarias para compilar y manejar aplicaciones para una arquitectura determinada (la PSP en este caso). El pspsdk es un conjunto de bibliotecas que facilitan el acceso al hardware de la PSP. He visto en scripts de instalación del pspsdk que automáticamente instalan el toolchain, pero lo mismo da que lo instales tú y luego instales el sdk.
------------------------------------------
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')"
------------------------------------------------------------

Solucionado

Hola, siento haber tardado en contestar pero en fin uno se ve necesitado de tiempo. He seguido todos los pasos que me has dicho y perfecto; la pena es que uno siempre termina viendo ésto como que funciona por arte de magia. Por cierto una última duda tonta, el ¿root existe como tal?. Me intento explicar: al ir a crear una cuenta para un nuevo usuario vi que había dos líneas una con el root y otra con digamos el nombre que di yo al instalar ubuntu (en mi caso wilcome como se puede apreciar en el código que puse inicialmente) He intentado meterme utilizando como login root y la misma contraseña que siempre (porque no me sé otra) y, lógicamente, no me deja porque esto debe ser una tontería. Es ¿entonces wilcome el root?; a pesar de tener esta duda seguí tus pasos creando otro usuario más y aunque ejecuté las órdenes de cambiar el propietario de pspdev luego bajé de nuevo el toolchain y repetí los pasos de instalación de tu guía (por si acaso) esta vez con total éxito (¡¡ya se ha creado mi primer EBOOT.PBP en linux!!). ¡muchas gracias por tu ayuda!

brue's picture

usuario root

El usuario root existe realmente. En ubuntu, si quieres activarlo para poder usarlo, has de ponerle una contraseña. Desde tu usuario haces:


$ sudo su

y metes el password de tu usuario. Después cambias el password de root con (nótese que ahora sale # que denota superusuario -root- ):


# passwd

Ahora ya tienes activado tu usuario de root. Y podrás acceder a él con:


$ su root

e introduces el password de root que pusiste antes.

Como dice int-0, no uses root si no sabes lo que estás haciendo, con tu usuario te debería bastar.

--
·brue

brue

brue's picture

hey int-0...

tú tienes 1.5 o 3.xx DA ???

--
·brue

brue

int-0's picture

Pues ahora mismo

Tengo 1.50 porque el SDK de la 3.xx necesita de unos parches (tengo entendido) pero creo que el cambio a 3.XX DA va a ser inminente... Eye-wink
------------------------------------------
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')"
------------------------------------------------------------

brue's picture

macho...

el toolchain no rula en ppc ... cago en tó. A ver si lo puedo arreglar para el mac.

--
·brue

brue

Podrias explicarnos como

Podrias explicarnos como instalaste esas librerias ( SDL, pspgl, orbis ... ) GRACIAS !

int-0's picture

Pues depende...

...como dije en la receta (creo) las instrucciones de cada librería vienen en un archivo README.PSP o símplemente README (para los exclusivos a la PSP). Generalmente ejecutando "make install" se instala en tu SDK. En la PSP no hace falta instalar nada puesto que la compilación de los EBOOT.PBP se realiza de forma estática (vamos que lo mete todo ahí a cholón)...
------------------------------------------
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')"
------------------------------------------------------------

Tutorial inmejorable...

hey, enhorawena por el pedazo de tutorial.. te importaría que lo publicase en un par de webs de la scene?, esq es el mejor tutorial que he visto, y debería conocerlo mas gente.. te aseguro q te pongo como autor total.. y hago referencia a esta web.. Smiling sin problemas.. jeje

Salu2

PD: las webs son http://lan.st y http://elotrolado.net

admin's picture

Por supuesto

Es de agradecer que pidas permiso, pero debes saber que todo el contenido de esta web está bajo una licencia Creative Commons. Lo único que tienes que hacer es cumplir esa licencia.

int-0's picture

Desde luego que no hay problema!

...y si mantienes mi autoría te invito a unas cañas y todo! Smiling

P.D. Perdona por tardar tanto en responder... no me di cuenta! Sad
------------------------------------------
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')"
------------------------------------------------------------

brue's picture

La Scene..

Esta gente apoya mucho a Dark Alex, y algunos de la web de eol curran mucho, hay tutos y mucha gente desinteresada. Además creo que ellos tienen una política de licencia parecida.

Creo que la receta de int-0 merece que rule por la web Smiling

--
·brue
·vigilando

brue

brue's picture

Gracias

En nombre de todos, gracias...

Debería estar como receta para que la gente lo tenga como referencia.

--
·brue
·dj brue

brue