lunes, 6 de enero de 2014

Compilar kernel linux MK908

Con el gran desarrollo de la tecnología ARM, ya muchos sistemas y opciones están abiertas, pero aun están un poco arduas para usuarios mas novatos. Algunos curiosos como yo buscan la forma de compilar un kernel o encontrar una IMG que se adapte a nuestras necesidades.

En mi caso en particular estaba buscando una IMG SD Boot de la MK908 V1, pero no encontré nada y busque de donde estaban obteniendo los SRC de los kernel y decidí ver si podía compilar uno. Tras unos 12 días de intensa búsqueda y ardua lectura, por fin les traigo un manual rápido y completo para compilar el ultimo kernel que he visto hasta la fecha para la MK908.

Nota: Puede que quiera hacer una boot IMG normal que utilice lo que se llama parameter y eso será explicado según estemos en los pasos requeridos.

Que necesito?
Luego de descargar lo necesario empezamos lo bueno:

Primero dentro de la carpeta del kernel abrimos una consola o terminal y procedemos a hacer un arreglo en el source, pues en los driver mali existen unos archivos que no esta incluidos en la carpeta que deben estar, por lo que pasaremos a copiarlos a su debida carpeta.

cp drivers/gpu/mali/include/* drivers/gpu/mali/ump/common/

Luego de hacer esto lo que debemos hacer es copiar nuestro archivo de configuración a el lugar correcto sobrescribiendo (o moviendo para dejarlo tranquilo y tener un backup rápido) el archivo que esta o simplemente modificando la linea que nos interesa.

mv arch/arm/configs/rk3188_mk908_defconfig arch/arm/configs/rk3188_mk908_defconfig.old
cp rk3188_mk908_defconfig arch/arm/configs/

Si lo que les interesa es modificar la linea, puesto quieren hacer un kernel que haga boot directo desde la nand o que use un archivo de parameter puede editar en el archivo de configuración la siguiente linea:

CONFIG_CMDLINE="console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init"

En las comillas debe reemplazar según su necesidad, pues que en SD Boot quiero que sea autónomo lo hago así, pero en caso de usar un archivo de parameter debemos alterar estas lineas:

#CONFIG_CMDLINE_FORCE  is not set
CONFIG_CMDLINE_FROM_BOOTLOADER=y

Ya con esto tenemos un archivo de configuración normal que necesita parameter y el archivo debe tener el siguiente contenido:

FIRMWARE_VER:4.0.5
MACHINE_MODEL:rk30sdk
MACHINE_ID:007
MANUFACTURER:RK30SDK
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3066
CHECK_MASK: 0x80
KERNEL_IMG: 0x60408000
#RECOVER_KEY: 1,1,0,20,0
CMDLINE:initrd=0x62000000,0x00800000 root=LABEL=linuxroot init=/sbin/init mtdparts=rk29xxnand:0x00008000@0x00002000(boot),0x00008000@0x0000A000(kernel),0x00200000@0x00012000(swap),-@0x00212000(linux)

La linea CMDLine es la que alteramos para obtener los resultados que deseamos. Asi no tenemos que volver a compilar el kernel.

Nota: Al hacer esto damos por hecho que linux esta instalado en la memoria NAND (interna) y el es quien administra la maquina dejando de lado a ANDROID.

Ya hecha la configuración de todo lo necesario solo debemos empezar a compilar con el siguiente comando:

./build_omegamoon_mk908 2

El 2 escrito lo que dice que haga 2 trabajos de compilación a la vez, por lo que si tenemos un procesador de 4 o mas núcleos le recomiendo que pongan el numero según tantos CPU tengan.

Mas adelante mostraré como flashear la maquina con un buen nivel de detalle (fotos). Al igual que preparar el boot de nuestro Linux necesitaremos una SD CARD que pueda usar nuestra MK908 y procederemos a instalar el sistema en ARMHF que nos guste (Anteriormente subí un manual, pero para este caso deberemos tener una sola consideración adicional).

Al final de este proceso de compilación obtendremos un archivo llamado kernel.img que para nuestro manejo debemos entender que si usan el archivo de configuración que subí obtendrán un kernel recovery para boot SD CARD (este inclusive debería funcionar para sistemas instalados en la NAND, puesto que el root que busca al prender es una partición con nombre linuxroot).

Lectura y guia basada en

http://linux-rockchip.info/mw/index.php?title=Linux_on_NAND
https://github.com/omegamoon/Rockchip-GPL-Kernel