Cómo construir Kernal de Android MediaTek desde la fuente



Pruebe Nuestro Instrumento Para Eliminar Los Problemas

Muchos usuarios de Android disfrutan de la instalación de kernels personalizados, que pueden ofrecer una variedad de ajustes que mejoran el rendimiento y la duración de la batería. Pero si no puede encontrar un kernel que le guste, o no hay ninguno disponible para su dispositivo, a veces solo tiene que construir el suyo. Esta guía se enfocará en cómo construir un kernel desde la fuente para dispositivos Mediatek.



Tenga en cuenta que esta guía no es para principiantes, está destinada a personas con conocimientos de personalización de ROM de Android, que trabajan en terminales Linux y, en general, un poco de conocimiento práctico sobre lo que estamos haciendo.



Requisitos:

  1. Un sistema operativo Linux
  2. Algunos conocimientos básicos de C y cómo trabajar con Makefiles
  3. NDK de Android

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



  • Pitón
  • Marca GNU
  • JDK
  • Vamos

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 zlib1g-dev: i386 libc6-dev lib232n5 lib32 x11proto-core-dev libx11-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-devreadadline6 lib32 -gplv2-dev libncurses5-dev lib32readline5 lib32readline6 libreadline-dev libreadline6-dev: i386 libreadline6: i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev png libsdl1.2-dev libesd0 herramientas-devw. 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 fastboot en stingray / 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 =” ”
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM == ”usb”, ATTR {idVendor} == ”18d1 ″, ATTR {idProduct} ==” d002 ″, MODE = ”0600 ″, OWNER =” ”
# protocolo fastboot 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 = ””
# usbboot protocol on 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 fastboot 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 de compilación. 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 para qué se construirá el kernel.
TARGET_PRODUCT / TARGET_KERNEL_PRODUCT: le dice a Linux qué archivos específicos de dispositivo usar.
MTK_ROOT_CUSTOM: especifica el directorio de la carpeta mediatek / custom. recuerde que esto también debe estar en el mismo directorio que la fuente del núcleo.
RUTA: establece los ejecutables de su cadena de herramientas a su ruta.
CROSS_COMPILE: Un compilador cruzado es un compilador capaz de crear código ejecutable para una plataforma distinta a aquella en la que se ejecuta el compilador. La cadena de herramientas facilita esta función
ARCH = arm, ARM es una familia de arquitecturas de conjuntos de instrucciones para procesadores informáticos basadas en una arquitectura de cálculo 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 = arm' en la terminal, básicamente le estamos diciendo a Linux que estamos construyendo para la arquitectura ARM.

Así que 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 cuidado.


Lo más probable es que encuentre la configuración base en kernel_source / mediatek / config / devicename / autoconfig / kconfig / platform.
Podemos usar esta configuración base y construirla con diferentes requisitos, por ejemplo, permisos de SELinux habilitados o deshabilitados. Siempre puedes crear una configuración base 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 creará una interfaz gráfica que le permitirá agregar funciones al kernel. Por ejemplo, puede modificar la programación de E / S, los reguladores de la CPU, la frecuencia de la GPU, etc.
Una vez que haya ajustado la configuración deseada, estará listo para compilar el kernel. Así que escribe en la terminal de Linux:
hacer zImage

Y debería devolver algo como:

Arch / arm / boot / zImage Ready

3 minutos de lectura