Cómo construir Kernal de Android MediaTek desde la fuente

A muchos usuarios de Android les encanta instalar un kernel personalizado, que puede ofrecer una variedad de ajustes de rendimiento y mejoras en la duración de la batería. Pero si no puede encontrar el kernel que desea, o si no hay uno disponible para su dispositivo, a veces solo necesita construir el suyo. Esta guía se centrará en cómo compilar el kernel desde el código fuente para dispositivos Mediatek.

Tenga en cuenta que esta guía no es para principiantes, está destinada a personas que entienden la personalización de ROM de Android, que trabajan en terminales Linux y tienen pocos conocimientos prácticos de lo que estamos haciendo.

Requisitos:

  1. Sistema operativo Linux
  2. Alguna información básica C y cómo trabajar con Makefiles
  3. NDK de Android

Para comenzar, deberá descargar los siguientes paquetes para Linux:

  • Pitón
  • GNU Do
  • JDK
  • Git

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev: i386 x11proto-core-dev libx11-dev: i386 libreadline6-dev: i386 libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ – multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev: i386 git-core lzop ccache gnupg flex bison gperf build-essential zip curl zlib1g-dev zlib1g-dev: i386 libc6-dev-l11-dev11 dev: i386 libreadline6-dev: i386 lib32z-dev libgl1-mesa-glx: i386 libgl1-mesa-dev g ++ – multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc readline-common libreadline6-dev libreadline6-dev libread -dev libncurses5 -dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev: i386 libreadline6: i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev libsdl1.2-dev libesf0-dev libesf 8-dev python gcc g ++ cpp gcc-4.8 g ++ – 4.8 && sudo ln -s / usr / lib / i386-linux-gnu / mesa / li bGL.so.1 / usr / lib / i386-linux- gnu / libGL.so

Ahora vaya a etc / udev / rules.d / 51-android.rules:

# protocolo adb sobre la pasión (Nexus One)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e12 ″, MODE = «0600 ″, OWNER =» «
# protocolo fastboot en passion (Nexus One)
SUBSYSTEM == «usb», ATTR {idVendor} == «0bb4 ″, ATTR {idProduct} ==» 0fff «, MODE =» 0600 ″, OWNER = «»
# protocolo adb en crespo / crespo4g (Nexus S)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e22 ″, MODE = «0600 ″, OWNER =» «
# protocolo fastboot en crespo / crespo4g (Nexus S)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e20 ″, MODE = «0600 ″, OWNER =» «
# protocolo adb en stingray / wingray (Xoom)
SUBSYSTEM == «usb», ATTR {idVendor} == «22b8 ″, ATTR {idProduct} ==» 70a9 ″, MODE = «0600 ″, OWNER =» «
# protocolo de fastingot en mantarraya / wingray (Xoom)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 708c «, MODE =» 0600 ″, OWNER = «»
# protocolo adb en maguro / toro (Galaxy Nexus)
SUBSYSTEM == «usb», ATTR {idVendor} == «04e8 ″, ATTR {idProduct} ==» 6860 ″, MODE = «0600 ″, OWNER =» «
# protocolo fastboot en maguro / toro (Galaxy Nexus)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e30 ″, MODE = «0600 ″, OWNER =» «
# protocolo adb en panda (PandaBoard)
SUBSYSTEM == «usb», ATTR {idVendor} == «0451 ″, ATTR {idProduct} ==» d101 ″, MODE = «0600 ″, OWNER =» «
# protocolo adb en panda (PandaBoard ES)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» d002 ″, MODE = «0600 ″, OWNER =» «
# protocolo fastdaot en panda (PandaBoard)
SUBSYSTEM == «usb», ATTR {idVendor} == «0451 ″, ATTR {idProduct} ==» d022 ″, MODE = «0600 ″, OWNER =» «
# protocolo usbboot en panda (PandaBoard)
SUBSYSTEM == «usb», ATTR {idVendor} == «0451 ″, ATTR {idProduct} ==» d00f «, MODE =» 0600 ″, OWNER = «»
# protocolo usbboot en panda (PandaBoard ES)
SUBSYSTEM == «usb», ATTR {idVendor} == «0451 ″, ATTR {idProduct} ==» d010 ″, MODE = «0600 ″, OWNER =» «
# protocolo adb sobre mero / tilapia (Nexus 7)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e42 ″, MODE = «0600 ″, OWNER =» «
# protocolo de arranque rápido en mero / tilapia (Nexus 7)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4e40 ″, MODE = «0600 ″, OWNER =» «
# protocolo adb en manta (Nexus 10)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4ee2 ″, MODE = «0600 ″, OWNER =» «
# protocolo fastboot en manta (Nexus 10)
SUBSYSTEM == «usb», ATTR {idVendor} == «18d1 ″, ATTR {idProduct} ==» 4ee0 ″, MODE = «0600 ″, OWNER =» «

Y en bash.rc:

exportar USE_CCACHE = 1
Ahora finalmente:

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
Así que ahora estamos listos para configurar el entorno construido. En la terminal, escriba:

exportar TARGET_BUILD_VARIANT = usuario TARGET_PRODUCT = nombre de dispositivo MTK_ROOT_CUSTOM = .. / mediatek / custom / TARGET_KERNEL_V
Esto es lo que van a hacer estos comandos:

BUILD_VARIANT: especifica de dónde se tomará el kernel.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: le dice a Linux qué archivos son específicos del dispositivo para usar.
MTK_ROOT_CUSTOM: especifica el directorio de carpetas personalizadas / mediatek. recuerde que este mide también estará en el mismo directorio que la fuente del kernel.
RUTA: establece sus herramientas ejecutables a su ruta.
CROSS_COMPILE: Un compilador cruzado es un compilador que puede generar código ejecutable para una plataforma distinta a aquella en la que se está ejecutando el compilador. Esta función se ve facilitada por una caja de herramientas
ARCH = arm, ARM es una familia de arquitecturas de conjuntos de instrucciones para procesadores informáticos basadas en una arquitectura informática de conjuntos de instrucciones reducidos (RISC) desarrollada por la empresa británica ARM Holdings. ARM también se usa en Android.

Entonces, cuando escribimos ‘exportar ARCH = arma’ en la terminal, básicamente le estamos diciendo a Linux que estamos construyendo para la arquitectura ARM.

Entonces ahora estamos listos para comenzar a configurar el kernel. Debe tener mucho cuidado, porque el kernel es básicamente el controlador de su teléfono. Así que síguelo con atención.

Lo más probable es que encuentre la configuración predeterminada en kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Podemos usar esta configuración básica y construirla con varios requisitos, como permisos habilitados o deshabilitados de SELinux. Siempre puedes crear una configuración básica desde cero, pero realmente no la recomiendo.

Así que ahora escriba en la terminal de Linux:

cd kernel_source
cp mediatek / config / devicename / autoconfig / kconfig / platform .config
hacer menuconfig

Esto es para crear una interfaz gráfica que le permitirá agregar funciones al kernel. Por ejemplo, puede modificar el programa de E / S, los reguladores de la CPU, la frecuencia de la GPU, etc.
Una vez que haya realizado los ajustes necesarios, estará listo para compilar el kernel. Así que escribe en la terminal de Linux:
hacer zImage

Y debería ser algo como:

Arch / arm / boot / zImage Ready