Ver la versión completa : Compilando el kernel con el SDK oficial y Mac (o Linux)
Hola
dejo ahora aquí comentado cómo compilar el kernel 2.0.0 usando el SDK oficial de Linux en un Mac (para instala el SDK oficial en Mac OS X, ver este post (http://www.gp32spain.com/foros/showthread.php?t=32381)).
Estoy casi seguro que estas instrucciones también valdrán para Linux, excepto por un par de cosas que sobran en ese caso.
Bajar el código fuente (si se está en Mac OS X, conviene hacerlo en un directorio de una imagen de disco con sistema de archivos que distinga correctamente archivos con mayúsculas y minúsculas -case sensitivie file system- como HFSX):
svn co http://svn.gp2x.com/gp2x/tag/kernel/2.0.0/
Entrar en el directorio 2.0.0 que se ha creado.
cd ./2.0.0/
Borrar en .config una opción (este paso sólo es para Mac, y no creo que sea muy buena idea, porque he leido que busybox utiliza esta opción, pero si está activado, da un error de enlazado justo al final del proceso, que no he podido encontrar como arreglar :().
CONFIG_VT=yes
Ejecutar
make oldconfig
Responder a las preguntas que salgan con un N (basta con pulsar enter)
Cambiar la linea de Makefile:
export CROSS_COMPILE = arm-linux-
por
export CROSS_COMPILE = arm-gp2x-linux-
para que use los datos del SDK oficial
y, en el caso de Mac OS X,
@expr length "$(KERNELRELEASE)" \<= $(uts_len) > /dev/null || \
por
@expr "$(KERNELRELEASE)" : '.*' \<= $(uts_len) > /dev/null || \
para que no de un error al comienzo de la compilación.
Cambiar en arch/arm/Makefile:
CFLAGS_BOOT:=$(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -Uarm
CFLAGS +=$(apcs-y) $(arch-y) $(tune-y) -mshort-load-bytes -msoft-float -Uarm
por
CFLAGS_BOOT :=$(apcs-y) $(arch-y) $(tune-y) -malignment-traps -msoft-float -Uarm
CFLAGS +=$(apcs-y) $(arch-y) $(tune-y) -malignment-traps -msoft-float -Uarm
y cambiar en drivers/char/keyboard.c la línea 413 de
out:
}
a
out:
return;
}
Además cambiar en drivers/sound/ac97_codec.c
#define CODEC_ID_BUFSZ 14
por
#define CODEC_ID_BUFSZ 14
static void ac97_set_hw_eq(struct ac97_codec *codec,unsigned int Mode );
Con esto se consigue que compile con el GCC del SDK estándar (no el estático con GCC 4.0)
Ejecutar:
cp .config configureOriginal
make mrproper
cp configureOriginal .config
make oldconfig
make dep
make modules
make bzImage
EDIT: Basándome en el post que hay más abajo de neglox, pongo cómo generar el archivo para instalar en la GP2X:
Comprimir la imagen del kernel
gzip /Volumes/gp2xSDKbuild/kernel/2.0.0/arch/arm/boot/zImage
Ir a un directorio para bajar el fuente del gestor de arranque, por ej:
cd /Volumes/gp2xSDKbuild/src/
Bajar el código fuente
svn co http://svn.gp2x.com/gp2x/tag/bootloader/2.0.0/
cd 2.0.0
Editar el fichero cpu/arm920tconfig.mk y cambiar esta linea
-mshort-load-bytes -msoft-float
por esta otra
-malignment-traps -msoft-float
En el caso de Mac OS X (en Linux creo que no hace falta), editar tools/mkimage.c y cambiar en dos lineas
(void) fdatasync (ifd);
por
(void) fsync (ifd);
Editar Makefile y cambiar
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
por
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-gp2x-linux-
endif
Compilar las utilidades
make mrproper
make mmsp2dtk_config
make
Devolverá un error, pero no importa.
Creamos la imagen del kernel para instalar:
cd tools
./mkimage -A arm -O linux -T kernel -C gzip -a 00008000 -e 00008000 -n "gp32spain Kernel" -d /Volumes/gp2xSDKbuild/kernel/2.0.0/arch/arm/boot/zImage.gz /Volumes/gp2xSDKbuild/kernel/2.0.0/gp2xkernel.img
Ahora se podrá instalar /Volumes/gp2xSDKbuild/kernel/2.0.0/gp2xkernel.img en la consola con el método habitual.
Y listos [wei6]
Espero que sea útil para alguien ;)
Gracias por este pedazo de tutorial, no sabía que había que hacer tantos cambios para que se compilara con el SDK oficial, bueno es saberlo :brindis:
Creo que solo te faltaría el proceso de crear un IMG con el kernel para poder actualizar la GP2X con él, creo que se hace con la herramienta mkimage (http://wiki.gp2x.org/wiki/Building_a_Custom_Kernel) de U-Boot (previamente compilado).
Si no lo has hecho ya, creo que deberías añadir este excelente tutorial al Wiki de GP32Spain y como Waninkoko ya ha compilado su propio kernel y generado el IMG del mismo con exito sería interesante sus comentarios o que completara algo este tema :)
Muchas gracias con el manual, estoy intentando compilarlo con el oopo toolchain pero no hay manera, me falla en las opciones que se cambien en arch/arm/Makefile: dice que son incompatibles, quitandolas, da un fallo mas adelante, estoy preparandome ahora el sdk oficial.
Waninkoko
09/06/2006, 16:16
Muchas gracias con el manual, estoy intentando compilarlo con el oopo toolchain pero no hay manera, me falla en las opciones que se cambien en arch/arm/Makefile: dice que son incompatibles, quitandolas, da un fallo mas adelante, estoy preparandome ahora el sdk oficial.
Con el toolchain de oopo nunca lo consegui, siempre para compilar el kernel he tenido que usar el SDK de GPH.
Gracias Waninkoko por la informacion,si un entendido en la materia me dice que no lo ha conseguido con el de oopo, directamente espero a que termine de compilar el SDK de GPH.
Waninkoko
09/06/2006, 18:57
si un entendido en la materia me dice que no lo ha conseguido con el de oopo
Que raro me suena eso xDDDD
Y ya aprovechando este post... Ayer compile todo el toolchain en Linux (la version para compilar ejecutables estaticos) pero no consigo compilar con -static. Le he pasado todas los directorios con las librerias pero es que faltan algunas librerias como -lvorbis, -logg, -lvorbisfile, -lmikmod y -ljpeg.
Asi que... ¿¿¿soy yo que no he buscado demasiado (cosa muy normal), faltan algunas librerias o tengo que enlazar con otras librerias (he visto una tal -lvorbisidec)???
De todos modos ya compile el SDK normal para compilacion dinamica ^^
Bueno pues gracias a todos los que han comentado algo en este post he conseguido compilar el kernel, aqui esta mi granito de arena.
VERSION ANTIGUA, EN BREVE ACTUALIZARE SIMPLIFICANDO EL TRABAJO.
Comprimimos la imagen que hemos creado del kernel
gzip arch/arm/boot/zImage
descargamos el u-boot
wget http://www.dignsys.com/Datas/u-boot-mmsp2.tar.gz
lo descomprimimos
tar -zxvf u-boot-mmsp2.tar.gz
entramos en la carpeta
cd u-boot
Cambiar la linea de Makefile:
export CROSS_COMPILE = arm-linux-
por
export CROSS_COMPILE = arm-gp2x-linux-
nos vamos a la carpeta u-boot/cpu/arm920t
cd cpu/arm920t
editamos el fichero config.mk
y cambiamos esta linea
-mshort-load-bytes -msoft-float
por esta otra
-malignment-traps -msoft-float
Vuelve a la carpeta de u-boot
cd ../..
Ejecuta make mrproper
Ejecuta make mmsp2dtk_config
Ejecuta make
Terminara en Error, al intentar compilar el fichero mmsp2dtk.c
Nos vamos a la carpeta tools
cd tools
Ejecutamos la siguiente linea
./mkimage -A arm -O linux -T kernel -C gzip -a 00008000 -e 00008000 -n "gp32spain Kernel" -d ../../arch/arm/boot/zImage.gz ../../gp2xkernel.img
Si todo ha ido bien, el fichero del kernel se encontrara en la carpeta 2.0.0
Bueno pues gracias a todos los que han comentado algo en este post he conseguido compilar el kernel, aqui esta mi granito de arena.
Comprimimos la imagen que hemos creado del kernel
gzip arch/arm/boot/zImage
descargamos el u-boot
wget http://www.dignsys.com/Datas/u-boot-mmsp2.tar.gzNo estoy seguro pero me parece que ese u-boot no es el último, por lo que no se si funcionará con el firmware 2.0.0 que creo que cambiaba algo de cómo carga el kernel (si se me va la pinza y estoy equivocado, que lo comente alguien, que no quiero meter la pata).
¿Alquien ha probado con el del servidor subversion de GPH (http://svn.gp2x.com/gp2x/tag/bootloader/2.0.0/)? Si no, igual me pongo con ello este finde.
Waninkoko
09/06/2006, 19:10
El u-boot no es necesario compilarlo, solo el fichero mkimage.c de la carpeta tools.
Waninkoko
09/06/2006, 19:12
Bueno, como me acuerdo que para compilar el "mkimage" tuve que sacar informacion del Makefile y tal porque habia que compilar otros ficheros junto al mkimage.c, pues adjunto el ejecutable que compile [wei]
PD: Esta sacado del ultimo u-boot.
voy a probar con esa version, es que svn y yo no nos llevamos muy bien y no encontraba esa version. Voy a intentar compilar solo el mkimage (o al menos intentarlo) y si lo consigo os comento.
EDIT: Gracias por el mkimage lo he probado y los ficheros son del mismo tamaño, voy a mirar los ficheros con un editor hexadecimal para ver si son diferentes o son iguales.
< - >
Ya he estado mirado y solo cambia la cabecera del fichero y muy poco,incluso creandolo con el mismo mkimage, es decir son iguales los ficheros que crea pero como introduce la hora de creación. Por si acaso compilo el otro y os cuento.
Bueno pues gracias a todos los que han comentado algo en este post he conseguido compilar el kernel, aqui esta mi granito de arena.
He revisado tus pasos, usando el código "oficial" de GPH, y lo he puesto en el post original para que figure también como crear el .img que hace falta para instalar en la consola.
He usado el nuevo u-boot para crear el mkimage y he seguido el consejo de Waninkoko para compilar solo el mkimage y asi evitamos editar ficheros, tardamos menos en bajar el codigo fuente y compila mas rapido y sin errores.He creado un script que adjunto para simplificar la vida.
Este es el codigo:
mkdir mkimagedev
cd mkimagedev
svn co http://svn.gp2x.com/gp2x/tag/bootloader/2.0.0/tools
svn co http://svn.gp2x.com/gp2x/tag/bootloader/2.0.0/include
cd tools
wget http://svn.gp2x.com/gp2x/tag/bootloader/2.0.0/lib_generic/crc32.c
gcc -g -Wall -pedantic -I../include -I.. -DTEXT_BASE=0x03E00000 -DUSE_HOSTCC -O -c mkimage.c
gcc -g -Wall -pedantic -I../include -I.. -DTEXT_BASE=0x03E00000 -DUSE_HOSTCC -O -c crc32.c
gcc -Wall -pedantic -I../include -I.. -DTEXT_BASE=0x03E00000 -DUSE_HOSTCC -O -o mkimage mkimage.o crc32.o
strip mkimage
mv mkimage ../../mkimage
cd ../..
rm -r -f mkimagedev
PD: Siento kounch haberme dado cuenta que podia hacerse mas facil ya cuando lo habias pasado en tu post con las etiquetas de code y todo. Como siempre esto es para linux,adaptalo a MAC porque yo lo mas que he estado con uno ha sido 5 minutos.
Waninkoko
09/06/2006, 20:44
Ese script me va a venir bien cuando algun dia borre sin querer todo lo del u-boot xD Gracias :D
Por cierto, he probado a compilar una aplicacion en SDL que utiliza varias de sus librerias (de forma dinamica con el compilador estatico) y funciona perfecto :S
A la hora de la verdad (probar el kernel en la consola) algo ha fallado porque lo he metido, y se me ha quedado tonto en la fase de upgrading firmware, he probado a reiniciar y se ha quedado en la pantalla ngera del u-boot :( El mejor momento para probar el fimware de wanikoko, investigare que es lo que ocurre, lo que me extraña es que el tuyo ocupe unos 640kb y el que creo yo 580kb.
Waninkoko
09/06/2006, 21:28
Mmm, 580kb es sospechoso. Probe a compilar hace tiempo una version del kernel con lo basico y quitandole cosas inutiles y se quedo en poco mas de 600kb.
Si puedo luego te puedo pasar mi fichero .config para que puedas comparar.
Pues cuando puedas pasamelo para probarlo porque la verdad a mi tambien me parece extraño, estoy volviendo a compilar por si algun paso lo he dado mal o se ha producido algun error y no me he dado cuenta, porque si hubiera pasado dudo mucho que se creara el archivo zImage.
< - >
No hay manera, he estado probando a actiar mvarias opciones que tienen que ver con el MMSP2 y aun asi no consigo que salga nada del kernel en la pantalla, eso si ahora ocupaba 718kb
No estoy seguro de que sea esto, pero ¿cabe la posibilidad de que falle por la versión de GCC que se usa en este toolchain? Es decir, creo que, si no he entendido mal, Waninkoko para su kernel ha usado la versión del SDK que salio hace tiempo "de estrangis", el cual se compone, entre otras cosas, del GCC 2.95 y GLIBC 2.5.5. En el SDK de GPH actual la versión de GLIBC es la misma pero el GCC es 3.4.6 así que, si suponemos que sigues al pie de la letra todos los pasos y algo falla, puede que sea por lo único, a priori al menos, que parece que cambia en el escenario, la versión de GCC usada.
Prueba a bajarte el SDK del que te hablo y prueba... aunque no se de donde puedes bajarlo, antes estaba accesible en el FTP de GP32Spain, pero desde que está cerrado ni idea de otro sitio donde se pueda descargar...
Habia pensado en eso, que podia ser cosa del toolchain, no sabia que era lo que cambiaba, pero si es el gcc solo es cuestion de buscarlo, bajarlo compilar de nuevo el toolchain y probar. Lo unico que espero que no me cueste mucho encontrarlo.
Habia pensado en eso, que podia ser cosa del toolchain, no sabia que era lo que cambiaba, pero si es el gcc solo es cuestion de buscarlo, bajarlo compilar de nuevo el toolchain y probar. Lo unico que espero que no me cueste mucho encontrarlo.Todas las versiones de GCC (el código fuente) están en el FTP (http://ftp.gnu.org/gnu/gcc/)de GNU, la versión que usa ese SDK es 2.95.3. No se si tendrás algun problema para compilarlo, puede que necesites incluso algún parche (http://www.kegel.com/crosstool/crosstool-0.42/patches/gcc-2.95.3/), pero lo mejor es que si alguien sabe de algún sitio para bajarse ese SDK que lo diga y así te ahorras problemas :)
Si las fuentes no hay problema y supongo que el parche que habra que aplicar es el de ARM, voy a editar el script del sdk de GPH para que use esa version y si funciona de maravilla y si no a seguir buscando.
Waninkoko
10/06/2006, 00:54
Estaba probando a compilar mi kernel con el nuevo SDK y parece ser que no compila FastFPE (nada importante xDD).
Estaba probando a compilar mi kernel con el nuevo SDK y parece ser que no compila FastFPE (nada importante xDD).Le he estado dando vueltas, y a lo dicho antes algo se me escapó... Binutils, en el SDK oficial actual se usa la última versión estable, pero en el SDK oficial "de estrangis" tenía que tener una versión de Binutil presumiblemente de la misma epoca y como las versiones de GLIBC y GCC que se usan salieron entre finales de 2001 a principios de 2002 presupongo que la versión de Bintutils será de esas fechas, la 2.11 o 2.12.
P.D: Las herramientas de Binutils son también bastante importantes, porque entre otras cosas tiene el ensamblador de GNU que se usa en la etapa de ensamblado del código fuente por no mencionar que el enlazador es también parte de Binutils.
Waninkoko
10/06/2006, 01:19
Vaya, cuando creia que ya todo iba al final una burrada de errores de linkeo xDD
Estoy bajandome al final las binutils 2.12 y el gcc 2.95.3 los parches no se muy bien cual aplicar asi que voy a ir probando y eso es un poco peligroso porque me temo unos cuantos intentos, pero bueno todo sea por conseguir hacer un kernel que funcione.
Waninkoko
10/06/2006, 06:12
He probado a compilar el kernel que hice con el GCC 3.4 y ha ocupado unos 20kb menos.
Eso si, lleva un buen rato en la pantalla de upgrading firmware :S
Te pasa lo mismo que a mi, se queda en esa pantalla y no hace nada...reinicias y se queda en la pantalla negra, con que metas un gp2xkernel.img anterior qeu funcionara solucionado... me estoy peleando intentando hacer un nuevo toolchain pero los errores me desesperan y no hay manera, a ver si hay alguna forma de conseguir el anterior toolchain o al menos descubrir porque en este falla.
< - >
Si alguien puede decirme alguna direccion donde bajarme el antiguo sdk, que me de la direccion porque no hay manera. Veamos intentando compilar la version de binutils 2.12 empezaba a darme errores en la carpeta gas y de ahi no consegui pasar, asi que trabaje con la que viene por defecto en el nuevo sdk 2.16. Pasamos a la fase de gcc prebuild con la 2.95.3 , le aplico el parche arm y cuando hago el make me dice algo muy divertido:
Unknown cpu used with --with-cpu=arm9tdmi
Configure in /gp2xsdk/Tools/build/gp2x/gcc-prebuild/gcc failed, exiting.
Si no esta soportada cpu, cual se supone que hay que usar...estoy algo desconcertado.
He probado a compilar el kernel que hice con el GCC 3.4 y ha ocupado unos 20kb menos.
Eso si, lleva un buen rato en la pantalla de upgrading firmware :S
Lo mismo pasa con los compilados en Mac OS X. Es curioso, si compilas un módulo a parte y lo intentas cargar luego en la consola, te dice que no es capaz de averiguar para qué versión de kernel se ha compilado.
Si alguien puede decirme alguna direccion donde bajarme el antiguo sdk, que me de la direccion porque no hay manera. Veamos intentando compilar la version de binutils 2.12 empezaba a darme errores en la carpeta gas y de ahi no consegui pasar, asi que trabaje con la que viene por defecto en el nuevo sdk 2.16. Pasamos a la fase de gcc prebuild con la 2.95.3 , le aplico el parche arm y cuando hago el make me dice algo muy divertido:
Unknown cpu used with --with-cpu=arm9tdmi
Configure in /gp2xsdk/Tools/build/gp2x/gcc-prebuild/gcc failed, exiting.
Si no esta soportada cpu, cual se supone que hay que usar...estoy algo desconcertado.¿Has probado a montarte el toolchain usando crosstool (http://www.kegel.com/crosstool/)? En su día yo lo usé para compilar un kernel y, al menos, los módulos si que se generaban bien.
El caso es que me lo cargué el otro día y ahora tendré que volver a hacerlo. Creo que tomaré notas y luego postearé aquí los pasos para instalarlo.
Al final despues de todo lo consegui...eso si nos olvidamos del toolchain de oopo del de GPH, vamos a usar uno que esta en internet ya precompilado con la version de gcc 2.95.2
El respositorio donde esta:
deb http://emdebian.sourceforge.net/emdebian unstable main
A mi personalmente me ha fallado el apt-get porque una libreria pedia un fichero que no tengo,lo he buscado por la red y me lo he copiado por si funcionaba y funciono... el fichero es el que adjunto y lo teneis que copiar en la carpeta /usr/share/info/iostream.info.gz
Hacemos un apt-get install task-cross-arm
Nos va a instalar un cross compiler del estilo arm-linux-... por lo tanto hay que deshacer el cambio en el Makefile para que apunte al nuevo toolchain, antes de probar tambien he deshecho el cambio de -malignment-traps en el /arch/arm/Makefile porque creo que eso solo es para gcc mas nuevos.
Ya una vez hecho esto seguimos los pasos de siempre y ya tenemos un kernel que funciona bien.
kounch voy en cuanto tenga un rato subo esto al wiki, lo unico que los pasos retocados que di para usar el otro cross compiler no se si seran compatibles con el sistema de MAC (apt-get... no se si hay que poner algun comando mas o editar alguna linea) Si eso lo pongo para linux y ya cuando puedas pones para MAC.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.