Lo primero descargamos las fuentes del kernel desde http://android.git.kernel.org
En esa url aparecen kernels para otras plataformas también. Elegimos descargar kernel/common project de esa página.
$git clone git://android.git.kernel.org/kernel/common
Comprobamos qué rama (branch) hemos descargado:
$git branch
Muestra * android-2.6.27, la cual no es la que estamos buscando:
Para listar todas las ramas remotas disponibles:
$git branch -r
origin/HEAD -> origin/android-2.6.27 origin/android-2.6.25 origin/android-2.6.27 origin/android-2.6.29 origin/android-2.6.32 origin/android-goldfish-2.6.27 origin/android-goldfish-2.6.29
¿Qué significa goldfish? (según la lista de correo android-kernel)
Goldfish es la rama hackeada del kernel que da soporte al emulador de android basado en qemu, así que es la que necesitamos.
Descargar la versión del kernel GOLDFISH
$git checkout --track -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$git branch
android-2.6.27 * android-goldfish-2.6.29
EJECUTANDO EL EMULADOR
Este enlace cuenta cómo descargar el emulador de android, y cómo ejecutarlo.
Compilar Android en Debian Sid
Averiguar la versión del kernel que se está ejecutando en el emulador
$adb shell
#cat /proc/version
Linux version 2.6.29-00261-g0097074 (digit@digit.mtv.corp.google.com) (gcc version 4.4.0 (GCC) ) #14 Tue Feb 2 15:49:02 PST 2010
OBTENER LA CONFIGURACIÓN DEL KERNEL
Vamos a obtener el fichero de configuración del kernel .config del emulador que se está ejecutando.
$cd common
# entramos en el directorio con las fuentes del kernel.$adb pull /proc/config.gz .
# obtenemos el fichero .config comprimido del emulador.$gunzip config.gz
# lo descomprimimos.$cp config .config
# lo renombramos a .configAhora podemos editar el fichero .config según nuestras necesidades.
COMPILANDO EL KERNEL
La variable de entorno CROSS_COMPILE almacena el path donde están situadas las herramientas(toolchain) necesarias para croscompilar para la arquitectura arm. Podemos usar el croscompilador que viene con el código fuente de android.
$ARCH=arm CROSS_COMPILE=/path/to/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- make
Ejecutamos make para compilar el kernel.
Las últimas líneas mostrarán:
Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready
Entonces, hemos obtenido los binarios del kernel: Image y zImage.
EJECUTAR EL EMULADOR UTILIZANDO LA IMAGEN DEL KERNEL QUE ACABAMOS DE COMPILAR
Necesitamos la opción -kernel:
$emulator -kernel /path/to/common/arch/arm/boot/zImage -show-kernel -verbose
Podemos comprobar la versión del kernel:
$adb shell
# cat /proc/version
Linux version 2.6.29-00262-gb0d93fb (user@myPC) (gcc version 4.4.0 (GCC) ) #1 Sun May 2 14:27:31 CEST 2010
Cuando no se especifica la opción kernel, suele utilizar el kernel que viene precompilado:
$emulator -show-kernel -verbose
emulator: argv[01] = "-kernel" emulator: argv[02] = "/path/to/mydroid/prebuilt/android-arm/kernel/kernel-qemu"
ACTIVAR EL SOPORTE PARA LA CARGA DINÁMICA DE MÓDULOS EN EL KERNEL
El soporte para cargar módulos está deshabilitado por defecto en el kernel de android, debemos habilitarlo si queremos cargar módulos en el kernel.
editamos el fichero .config y seleccionamos:
CONFIG_MODULES=y
$ ARCH=arm CROSS_COMPILE=/path/to/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- make
Nos preguntará sobre varias opciones más al ejecutar make. Respondemos "yes" para las opciones relacionadas con los módulos del kernel.
Despues de compilar observamos que aparecen algunos módulos.
MODPOST 6 modules CC drivers/video/fb_sys_fops.mod.o LD [M] drivers/video/fb_sys_fops.ko CC drivers/video/syscopyarea.mod.o LD [M] drivers/video/syscopyarea.ko CC drivers/video/sysfillrect.mod.o LD [M] drivers/video/sysfillrect.ko CC drivers/video/sysimgblt.mod.o LD [M] drivers/video/sysimgblt.ko CC drivers/video/vfb.mod.o LD [M] drivers/video/vfb.ko
Podemos subir los módulos al emulador e instalarlos:
$adb push drivers/video/fb_sys_fops.ko /data
$adb shell
#insmod /data/fb_sys_fops.ko
PUEDE QUE TAMBIÉN LE INTERESE
Compilar Android en Debian Sid
REFERENCIA
http://www.cianer.com/androidg1/28-building-android-kernel-images
TRADUCIDO DE
http://linuxclues.blogspot.com/2010/05/build-compile-linux-kernel-android.html
Un millón de Gracias .....
ResponderEliminarGracias a este tuto por fin he conseguido compilar mi primer kernel android (que arranca en el emulador).
Un saludo
Gracias por el comentario!
ResponderEliminar