domingo, 14 de septiembre de 2014

Compilando un Kernel?



Hola estimados soy Chijure y en esta entrada aprenderemos como 
Compilar un kernel para el sistema operativo android
Tratare de hacerlo lo mas didactico y facil de comprender explicando hasta 
lo mas mínimo y pondré capturas de pantalla hasta donde no se necesiten

Antes de Empezar

¿Que es un kernel?
Un kernel o Núcleo es un software que constituye una parte fundamental del sistema operativo, y se define como la parte que se ejecuta en modo privilegiado. Es el principal responsable de facilitar a los distintos programas al hardware en forma básica, es el encargado de gestionar recursos, a través de servicios de llamada al sistema. Como hay muchos programas y el acceso al hardware es limitado, también se encarga de decidir qué programa podrá hacer uso de un dispositivo de hardware y durante cuánto tiempo, lo que se conoce como multiplexado. Acceder al hardware directamente puede ser realmente complejo, por lo que los núcleos suelen implementar una serie de abstracciones del hardware. Esto permite esconder la complejidad, y proporciona una interfaz limpia y uniforme al hardware subyacente, lo que facilita su uso al programador.

¿Por que compilar un Kernel?

Esta pregunta probablemente a pasado por su mente
 "por que compilar uno si mi terminal ya funciona bien con el que trae de fabrica"
para añadir nuevas características que se adapten a lo que usted necesita

Ahora si empecemos 

Necesitamos una PC con Ubuntu 12.04 de 32 o 64 bits
 (no otra versión ya que este tutorial contiene solo los paquetes 
de ubuntu 12.4 LTS)
con un procesador decente recomiendo un Intel Core 2 Duo 
pero puedes compilar sin ningun problema desde una Pentium 4
una cierta cantidad de Memoria RAM recomiendo 2 Gb y mínimo 739 mb
tener instalado Ubuntu en una particion de minimo 10 Gb no se necesita 
mucho espacio pero lo recomendable es 50 Gb mas espacio siempre es mejor

(imagen de Ejemplo) 

Desde este punto del tutorial empesaremos por pasos


Iniciamos en Ubuntu
y abrimos la terminal pulsando las teclas control + alt + t


se abrirá la terminal

instalamos los paquetes necesarios para la compilacion 

escribimos o simplemente copiamos lo siguiente

sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2 bin86 libqt3-headers libqt3-mt-dev wget libncurses5 git-core nautilus-open-terminal synaptic abootimg

y pulsamos enter les pedirá su contraseña no se asusten si no aparece nada 
si esta escribiendo


una vez instalados descargaremos las sources de nuestro kernel


 ¿Que son las Sources?
las sources en android son las funtes la informacion en este caso
archivos necesarios para cierto fin (kernel,recovery,rom, etc)

 Aqui hos dejo unas de ellas:
-HTC Dev
-Samsung
-Sony
-LG
-Huawei

Una vez tengamos las sources de nuestro kernel continuamos.
para este tutorial elegire el LG Optimus L3



Las Toolchains

cerramos la terminal y la volvemos a  abrir
y escribimos o copiamos lo siguiente:

git clone git://github.com/DooMLoRD/android_prebuilt_toolchains.git toolchains


 y pulsamos enter para comenzar a descargar

 una vez descargadas las toolchains las tendremos en la ruta

home/nombredeusuario/toolchains

en mi caso
home/chijure/toolchains




Poniendo todo en su lugar

ya tenemos nuestras sources de nuestro kernel las tollchins
pero estan esparcidas por toda nuestra carpeta personal
para tener todo mas ordenado crearemos un carpeta llamada
"android" y dentro de ella dos mas "kernel" y "toolchain"


 en la carpeta kernel pondremos nuestras sources yo soy muy ordenado y las tengo en una carpeta llamada "L3" asiendo referencia al terminal

 y como es obvio en la carpeta "toolchain" nuestras toolchains


 listo ya tenemos las sources en su lugar las toolchains en su lugar y todos los paquetes instalados empecemos el siguiente y penultimo paso



"Compilar"

abrimos la terminal
 y entramos a la carpeta donde estan nuestras sources
con el comando "cd"
 cd android/kernel/nombredetuterminal

en mi caso 

cd android/kernel/L3
   

dentro de la carpeta le diremos a la terminal que se prepare para compilar
para la arquitectura arm con:

export ARCH=arm


luego le indicaremos a la terminal donde o con que toolchains queremos que compile.
ESTE PASO ES MUY IMPORTANTE POR QUE SI ESCRIBIMOS MAL LA RUTA NO COMPILARA Y SI LAS TOOLCHAINS NO SON COMPATIBLES CON NUESTRAS SOURCES TENDREMOS QUE USAR OTRAS

ejecutamos el comando 

export CROSS_COMPILE=~/android/toolchain/arm-eabi-4.4.3/bin/arm-eabi-



como podrán observar decidí usar las sources 
"arm-eabi-4.4.3" si a ustedes no les compila elijan otra (cambiando la ruta)

 
listo ya pasamos los pasos mas importantes
ahora limpiaremos las sources de basura o erores con el comando: 

make clean && make mrproper  

este comando dejara las sources limpias y libres de basura para iniciar una compilación segura


 ahora necesitas nuestra defconfig (configuracion por defecto de nuestro terminal)

este archivo se encuentra en un comprimido en un config.gz en la ruta
/proc/config.gz en nuestro terminal


y lo podemos obtener manualmente con un explorador de archivos con acceso root
como root explorer o es file manager
pero yo recomiendo obtenerlo por ADB ya que es mas sencillo

para continuar con este tutorial necesitas tener instalado el ADB 
puedes ver el tutorial de la manera mas facil de instalarlo en Ubuntu aqui.

ejecutamos:

adb pull /proc/config.gz

 con esto obtendremos el archivo config.gz
lo descomprimos con:


gunzip config.gz



ahora colocamos y cambiamos el nombre de nuestro "config" donde debería estar con:

mv config arch/arm/configs/nombredeterminal_defconfig

en mi caso

mv config arch/arm/configs/L3_defconfig


ahora hay que decirle a la terminal que use nuestra defonfig

en mi caso "L3_defconfig"

con el comando:
make nombredeterminal_defconfig

en mi caso

make L3_defconfig


con esto ya estamos listo para decirle a la terminal que empiece a compilar pero le pondremos un nombre ejecutamos:

make menuconfig

y se abrirá el menú de configuraciones por ahora no tocar nada explicare que hace cada opción y cual es recomendable usar y no usar en otro tutorial por ahora solo pondremos el nombre


 nos movemos con las teclas direccionales FLECHAS 
hasta "general setup" Ajustes Generales en español


y seleccionamos la opcion Local version - append to kernel release

y observamos que el kernel se llama -CM


ustedes le ponen el nombre que prefieran por motivo de este tutorial le pondre
tu..................trasero
"tutrasero-by-chijure"


y listo ya tendremos nuestro kernel con un nombre personalizado
pulsamos ok y luego salir y salir les aparecerá este menú

pulsan "yes" para guardar los cambios


A compilar ejecutamos:

make zImage


este proceso puede durar de 4 a 5 minutos o de 20 a 30 minutos segun tu la velocidad del procesador y la ram de tu PC


listo ya tendremos nuestro kernel comprimido en el zImage

¿Ahora que?
ahora debemos meter el zImage dentro del boot.img de nuestro terminal
para ello pondremos el boot.img de nuestro terminal en la "carpeta personal"


 abrimos una nueva terminal

 y ejecutamos el siguiente comando:

abootimg -u ~/boot.img -k ~/android/kernel/nombredetuterminal/arch/arm/boot/zImage

en mi caso
 
abootimg -u ~/boot.img -k ~/android/kernel/L3/arch/arm/boot/zImage

Este comando reemplaza el zImage original por el que acabamos de compilar


Listo ya tenemos nuestro zImage dentro del boot.img listo para instalar 

kernel tutrasero instalado en el LG OPTIMUS L3













2 comentarios: