Compilando el Kernel en el PS3


Tuz En entregas pasadas vimos cómo instalar Debian en el PlayStation 3, bien sea desde un cdrom de instalación o desde un Pendrive. Ahora vamos a ver cómo compilar el kernel de Linux a lo Debian en el PS3, para activar algunas características como el nuevo VRAM soportado en el kernel 2.6.29 o drivers de sonido adicionales.

Requisitos

Antes de comenzar debemos tener unos paquetes que se necesitarán para compilar el kernel, y en especial porque se hará a lo Debian:

aptitude install build-essential libncurses5-dev kernel-package

Compilando el kernel

Ahora debemos obtener las fuentes del kernel 2.6.29 (o uno superior), descomprimirlas y crear el enlace simbólico /usr/src/linux apuntando al directorio que acabamos de descomprimir, y entrar a ese enlace /usr/src/linux, esto es:

cd /usr/src
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2
tar xjfv linux-2.6.29.tar.bz2
ln -sf linux-2.6.29 linux
cd linux

Paso seguido, vamos eliminar cualquier archivo .config que existiese y limpiar los archivos objetos de versiones anteriores.

make mrproper

Ahora para configurar las opciones del kernel específicas del PS3 ejecutamos esta orden:

make ps3_defconfig

Esto creará un archivo .config con las opciones del soporte PS3 habilitadas, tales como el nuevo VRAM. Adicionalmente si se quiere habilitar otras opciones (por ejemplo yo selecciono los módulos de sonido OSS ), ejecutamos el programa de ncurses menuconfig y seleccionamos lo que queramos:

make menuconfig

Llegó la hora de compilar tanto la imagen del kernel como los headers (estos últimos necesarios para compilar otros programas en nuestro Linux sin tener las fuentes del kernel), solo escribe lo siguiente:

make-kpkg clean
make-kpkg --revision ccs1 --initrd kernel_image kernel_headers

Instalación del nuevo kernel

Esta compilación creará unos archivos .deb en el directorio /usr/src. Para instalarlos basta con usar dpkg como harías con cualquier otro paquete de Debian:

dpkg -i /usr/src/linux-image-2.6.29_ccs1_powerpc.deb

Configurando Petitboot (el gestor de arranque)

Petitboot lee el archivo de configuración usado por kboot o yaboot. Si estas usando el archivo /etc/yaboot.conf para configurar las imágenes, solo agregar las siguientes líneas:

image= /boot/vmlinux-2.6.29
label=Debian-2.6.29-ccs1
initrd=/boot/initrd.img-2.6.29
initrd-size=16076
append="video=ps3fb:mode:3 --"
read-only

En caso de estar usando kboot, crear una entrada como la siguiente en el archivo /etc/kboot.conf:

debian='/boot/vmlinux-2.6.29 root=/dev/ps3sda1 initrd=/boot/initrd.img-2.6.29\
append=video=ps3fb:mode:3 --'

Si compilaste el kernel 2.6.29, verás al arrancar la mascota Tuz:


Tuz

Tuz, la nueva mascota del kernel 2.6.29

Referencias

, ,

  1. #1 by Luis Gallardo on 12/04/2010 - 4:23

    @luismo Quizás entre la versión 2.6.29 y la 2.6.33.1 ha habido cambios que afectaron en la arquitectura ppc. De hecho a mí no me funciona el teclado y el ratón y sospecho que es el kernel (ejemplo módulo USB), pero no descarto una actualización de aplicaciones en testing para ppc que esté dando problemas, o incluso que sea una combinación de ambas cosas. Cuando tenga tiempo le hecho un ojo a ver que pueda ser lo que pasa…

    Respecto a gnash, basta con hacer:

    aptitude instal gnash

  2. #2 by luismo on 12/04/2010 - 2:23

    Vale gracias. Pero no consigo compilar el 2.6.33.1.
    Siempre me pone el mismo error, aunque edite el fichero version.h (#26 by Jose on 27/03/2010 – 8:36 pm )

    Por ahora me voy a quedar con el 2.6.29 ya que el vram me funciona.

    Sabes si hay una forma de hacer funcionar el Flash Player con debian en la ps3 ? Intento compilar gnash pero no hay manera
    Un saludo !

  3. #3 by Luis Gallardo on 11/04/2010 - 7:59

    @luismo recuerda que las opciones del kernel cambia entre versión y versión. Lo mejor es usar make ps3_defconfig para que esas opciones sean seleccionadas automáticamente.

  4. #4 by luismo on 11/04/2010 - 12:36

    Hola, aqui estoy yo recompilando el kernel.
    He hecho un apt-get update & apt-get upgrade
    y se me han puesto al dia no se cuantos paquetes.
    Me sale el mismo error que el post #14 by Jose on 21/03/2010 – 9:39 pm

    Menos mal que ya se conoce el problema. Nada corregido el version.h y recompilando. Pero me he dado cuenta de una cosa:
    las opciones que le poneis al menuconfig ya las tengo seleccionadas, y hay algunas que no encuentro. No seria mejor mostrar el .config ?

    Bueno, ya os digo dentro de una hora si ha ido todo bien.
    Un saludo

  5. #5 by Luis Gallardo on 06/04/2010 - 7:29

    @Androide hiciste el paso:

    make ps3_defconfig

    ?

  6. #6 by Androide on 06/04/2010 - 5:38

    Buenas, he compilado un kernel pero no tengo sonido, sabrías que puede ser? Si elijo el kernel antiguo si tengo.

    Gracias

  7. #7 by Jose on 28/03/2010 - 8:00

    Buenas, pues ya tengo una version compilada, he incluido unas mejoras, y añadidos. te paso el changelog. y la url de mi blog, para que le eches un vistazo. ;-)

    Saludos.

    Release: 1.1
    * Version del Kernel: 2.6.33.1
    * Soporte completo para PlaySation3
    * Optimizacion para la CPU CELL
    * Soporte de Escritura en Sistemas de Archivos NTFS
    * Soporte para la Swap en VRAM
    * Añadido soporte para el Lector de Tarjetas en modelos de 60Gb
    * Añadido Soporte para MemoryStick. (no va junto con el lector de tarjetas)
    * Correjido el Panic Kernel al apagarla/reiniciarla.

    Enlace: http://azagramac.wordpress.com

  8. #8 by Luis Gallardo on 28/03/2010 - 2:38

    @Jose Excelente!! Debe ser que ne la actualización que hice se actualizó el archivo version.h para poder compilar el kernel…

  9. #9 by Jose on 27/03/2010 - 8:36

    Buenas, te paso una noticia, haber, ya he podido compilar el Kernel 2.6.33.1, lo que hay que hacer es:

    después de ejecutar el comando “make-kpkg clean” hay que hacer un “make include/linux/version.h” y editar la librería añadiendo “#define UTS_RELEASE “2.6.33.1″. Guardamos y ya podemos compilar el kernel :D

    sobre lo que comentas, tengo Ubuntu 9.10 completamente actualizado, y ni con esas, nose que habrás echo o algo para poder compilarlo, ya que el error que te dije es proque no estaba definida en la librería la versión del Kernel, esa chorrada es la que me a estado en vela jajaja

    un saludo ;-)

  10. #10 by Luis Gallardo on 26/03/2010 - 9:32

    @Jose Ya pude compilar el kernel. Efectivamente el problema se resuelve al actualizar el sistema completamente.

  11. #11 by Luis Gallardo on 26/03/2010 - 1:21

    @Jose si, eso es lo que se necesita para compilar el kernel a lo Debian :)

  12. #12 by Jose on 25/03/2010 - 9:22

    Si que dependencias tienes instaladas?

    O solo las que has puesto en el tuto, “aptitude install build-essential libncurses5-dev kernel-package”

    Saludos.

  13. #13 by Luis Gallardo on 25/03/2010 - 3:13

    @Jose Las dependencias de qué? Esta noche actualizo la PS3 (son unos 500 MB)…

  14. #14 by Jose on 25/03/2010 - 7:37

    Con lo que sea, avisa, y haber que tal. va?

    Pon las dependencias que tienes instaladas, y las posibles que hayas instalado anteriormente.

    Saludos

  15. #15 by Luis Gallardo on 23/03/2010 - 2:15

    @Jose quizás por ahí sea la cosa. En la PC de escritorio tengo Debian testing actualizada a los últimos paquetes. En cambio en la PS3 tengo un tiempo que no la actualizo (hoy me pongo a eso). Intenta actualizar tu Ubuntu en la PS3 y luego compilar el kernel con los mismos pasos.

  16. #16 by Jose on 23/03/2010 - 5:25

    Muchas gracias Luis,
    Dime una cosa, que dependencias tienes instaladas?
    Porque a mi ni en mi PC i386, me deja compilarlo, me salta el error al cabo de hora y pico de empezar a compilar.

    Un saludo y gracias :D

  17. #17 by Luis Gallardo on 23/03/2010 - 12:24

    @Jose El problema es con la plataforma ppc. En mi máquina i386 el kernel compila sin problemas…hay que estar atento a posibles parches de futuros kernel :(

  18. #18 by Luis Gallardo on 22/03/2010 - 12:30

    @Jose Efectivamente debe ser algo que tiene esa versión del kernel. Recuerda que tanto Ubuntu como Debian sacan sus versiones de kernel (tanto binarias como fuentes) que sean compatibles con sus distros. Falta ver que no sea algo específico de la plataforma, por lo que voy a compilarlo en una máquina i386 para descartar.

  19. #19 by Luis Gallardo on 22/03/2010 - 10:44

    @Jose al parecer es u problema relacionado a make-kpkg. Mira este enlace http://lkml.org/lkml/2006/7/16/109. Mientras voy bajando esa versión de kernel para compilarla en la PS3 y ver si me da problemas en Debian.

  20. #20 by Jose on 21/03/2010 - 9:43

    cd /usr/src

    sudo wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2

    sudo tar xjfv linux-2.6.33.1.tar.bz2

    sudo ln -s linux-2.6.33.1 linux

    cd linux

    sudo su

    make mrproper

    make ps3_defconfig

    make menuconfig

    make-kpkg clean

    make-kpkg –revision ccs1 –initrd kernel_image kernel_headers
    __________________________________
    Esos son los pasos que hago, y nada…
    Un saludo.

    Espero tu respuesta, puedes contestarme por mail. ;-)

  21. #21 by Jose on 21/03/2010 - 9:39

    Buenas, te queria comentar un problema, he seguido tu tutorial, solo que en vez de compilar la version que pones tu, he intentado la ultima a fecha de hoy, la 2.6.33.1, y nada. este es el error despues de tirarse media hora compilando:


    make[1]: se sale del directorio `/usr/src/linux-2.6.33.1′
    test ! -e scripts/package/builddeb || mv -f scripts/package/builddeb scripts/package/builddeb.kpkg-dist
    test ! -e scripts/package/Makefile || test -f scripts/package/Makefile.kpkg-dist || (mv -f scripts/package/Makefile scripts/package/Makefile.kpkg-dist && (echo “# Dummy file “; echo “help:”) > scripts/package/Makefile)
    COLUMNS=150 dpkg -l ‘gcc*’ perl dpkg ‘libc6*’ binutils make dpkg-dev |\
    awk ‘$1 ~ /[hi]i/ { printf(“%s-%s\n”, $2, $3) }’> debian/buildinfo
    uname -a >> debian/buildinfo
    echo using the compiler: >> debian/buildinfo
    grep LINUX_COMPILER include/linux/compile.h | \
    sed -e ‘s/.*LINUX_COMPILER “//’ -e ‘s/”$//’ >> debian/buildinfo
    grep: include/linux/compile.h: No existe el fichero ó directorio
    echo applied kernel patches: >> debian/buildinfo
    echo done > debian/stamp/build/kernel
    /usr/bin/make -f ./debian/rules debian/stamp/binary/pre-linux-image-2.6.33.1
    make[1]: se ingresa al directorio `/usr/src/linux-2.6.33.1′
    ====== making target debian/stamp/install/linux-image-2.6.33.1 [new prereqs: ]======
    This is kernel package version 11.015.
    echo “The UTS Release version in include/linux/version.h”; echo ” \”\” “; echo “does not match current version:”; echo ” \”2.6.33.1\” “; echo “Please correct this.”; exit 2
    The UTS Release version in include/linux/version.h
    “”
    does not match current version:
    “2.6.33.1″
    Please correct this.
    make[1]: *** [debian/stamp/install/linux-image-2.6.33.1] Error 2
    make[1]: se sale del directorio `/usr/src/linux-2.6.33.1′
    make: *** [kernel_image] Error 2
    root@playstation3:/usr/src/linux#

    He probado todo, algo me falla, en la PS3 uso, Ubuntu 9.10, y he podido compilar otras cosas sin problemas, pero el Kernel me falla, algo pasa y no doy con el problema.
    Sabrias decirme cual podria ser?
    He probado todo, lo he echo con permisos de root, con el usuario root, y nada.

    La ultima version del Kernel 2.6.33.1:
    http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2

  22. #22 by Luis Gallardo on 26/01/2010 - 6:51

    @ chrisbdk Para activar la swap puedes seguir estos pasos http://lgallardo.com/2009/03/31/activando-el-vram-del-ps3/

  23. #23 by chrisbdk on 26/01/2010 - 5:36

    hola oye ya logre hacer todo solo deje el kboot como esta arranco el sistema y no esta swap activado y ya hizo lo de el otro link

  24. #24 by chrisbdk on 22/01/2010 - 3:23

    esto dice que edito o lo dejo asi

    message=/etc/kboot.msg
    default=linux
    timeout=100
    linux=’/boot/vmlinux initrd=/boot/initrd.img root=/dev/ps3da1 quiet video=ps3fb:mode:3′
    old=’/boot/vmlinux.old initrd=/boot/initrd.img.old root=/dev/ps3da1 quiet video=ps3fb:mode:3′

  25. #25 by chrisbdk on 22/01/2010 - 3:22

    ya solucione es entrar en root desde que se inicia el proceso ya alle kboot.conf lo edito pues o no

  26. #26 by Luis Gallardo on 22/01/2010 - 2:20

    chrisbdk, tienes que estar en el directorio /usr/src/linux cuando vayas a compilar el kernel (eso es justamente lo que dice el error)

  27. #27 by chrisbdk on 22/01/2010 - 1:54

    sigo con el mismo problema mira ya entre como root pero me sale esto:

    root@ubuntu-chrisbdk:~# make-kpkg clean
    We do not seem to be in a top level linux kernel source directory
    tree. Since we are trying to make a kernel package, that does not make
    sense. Please change directory to a top level linux kernel source
    directory, and try again. (If I am wrong, and this is indeed a top
    level linux kernel source directory, then I have gotten sadly out of
    date with current kernels, and you should upgrade kernel-package)
    root@ubuntu-chrisbdk:~# make-kpkg –revision ccs1 –initrd kernel_image kernel_headers
    We do not seem to be in a top level linux kernel source directory
    tree. Since we are trying to make a kernel package, that does not make
    sense. Please change directory to a top level linux kernel source
    directory, and try again. (If I am wrong, and this is indeed a top
    level linux kernel source directory, then I have gotten sadly out of
    date with current kernels, and you should upgrade kernel-package)
    root@ubuntu-chrisbdk:~#

  28. #28 by Luis Gallardo on 22/01/2010 - 12:01

  29. #29 by Luis Gallardo on 21/01/2010 - 11:59

    @chrisbdk antes de compilar el kernel debes entrar como root. En tu caso sería:

    sudo su -

    Te pedirá la contraseña (con la que entras a tu Ubuntu). Luego sigue los pasos tal como están. Ahora, respecto a kboot, el archivo de configuración es diferente al de yaboot. Petitboot reconoce ambos, pero si quieres irte por kboot mira el formato en el etc/kboot.conf

  30. #30 by chrisbdk on 21/01/2010 - 10:44

    pongo:

    make-kpkg clean
    make-kpkg –revision ccs1 –initrd kernel_image kernel_headers

    cuando termina de todo al final me sale

    install -p -d -o root -g root -m 755 /home/chrisbdk/linux/debian/linux-image-2.6.29//boot
    install: cannot change owner and permissions of «/home/chrisbdk/linux/debian/linux-image-2.6.29//boot»: Operación no permitida
    make[1]: *** [debian/stamp/install/linux-image-2.6.29] Error 1
    make[1]: se sale del directorio `/home/chrisbdk/linux-2.6.29′
    make: *** [kernel_image] Error 2

    y pues ya pongo
    cd ..
    dpkg -i linux-image-2.6.29_ccs1_powerpc.deb y no quiere que ago con el error que me marca.

  31. #31 by chrisbdk on 21/01/2010 - 8:09

    ok mira puse make-kpkg clean
    make-kpkg –revision ccs1 –initrd kernel_image kernel_headers que por cierto se tardo mucho y ya despues ṕuse cd ..
    dpkg -i linux-image-2.6.29_ccs1_powerpc.deb pero me sale lo siguiente

    chrisbdk@ubuntu-chrisbdk:~/linux$ cd ..
    chrisbdk@ubuntu-chrisbdk:~$ dpkg -i linux-image-2.6.29_ccs1_powerpc.deb
    dpkg: la operación solicitada precisa privilegios de superusuario
    chrisbdk@ubuntu-chrisbdk:~$

  32. #32 by chrisbdk on 21/01/2010 - 7:29

    ok ya lo solucione solo una cosa en el petitboot hay que editar el archivo que comentas pero si fuera el kboot en una terminal meto lo que comentas o editar un archivo

  33. #33 by Luis Gallardo on 21/01/2010 - 7:24

    @chrisbdk tienes que estar en el directorio /usr/src/linux como el usuario root. Sigue los pasos al pie de la letra!!

  34. #34 by chrisbdk on 21/01/2010 - 6:23

    hola pues aqui yo otra ves iva todo bien pero aqui me quede.

    pongo make mrproper y me sale lo siguiente
    make: *** No hay ninguna regla para construir el objetivo `mrproper’. Alto.
    chrisbdk@ubuntu-chrisbdk:

(No será publicado)