Logo es.nowadaytechnol.com
Androide 2023

Cómo Construir Un Kernel De Android Personalizado

Tabla de contenido:

Cómo Construir Un Kernel De Android Personalizado
Cómo Construir Un Kernel De Android Personalizado

Video: Cómo Construir Un Kernel De Android Personalizado

Video: Cómo Construir Un Kernel De Android Personalizado
Video: [PRO] Como ser DESARROLLADOR de Kernel LINUX para Android 2023, Mayo
Anonim

Si alguna vez se ha preguntado "cómo crear un kernel de Android", esta guía es para usted. Crear su propio kernel puede ser una experiencia gratificante, ya que le dará un mayor grado de control sobre su dispositivo Android, desde la CPU, RAM, GPU e incluso la batería.

Este es un proceso muy práctico que implica una gran cantidad de comandos de consola y compilación, pero si está familiarizado con Linux (o es bueno para seguir las instrucciones) no debería ser un problema.

Tenga en cuenta que esta guía es para dispositivos que no son de Mediatek. Appual tiene una guía de compilación de kernel específica para dispositivos Android basados en Mediatek aquí: Cómo construir el kernel de Mediatek Android desde la fuente

Otros artículos de interés de Appual incluyen:

  • Cómo construir una ROM personalizada desde un proyecto de código abierto de Android | Pt. 2
  • Cómo aplicar un tema manualmente a la interfaz de usuario del sistema Android

Si estás construyendo personalizado kernel, solo necesitará clonar el kernel de Git con los comandos que se proporcionan a continuación. Pero si está compilando kernel de stock, necesita saber dónde obtener el kernel original de la fuente (por todo tipo de razones).

Fuentes de kernel originales para varias marcas:

  • Google
  • LG
  • Samsung
  • HTC
  • OnePlus
  • Motorola
  • Sony

Para descargar el kernel, use git clone o descargue el archivo tarball y extráigalo.

Aquí está el comando git:

git clon -b

-O-

tar -xvf

Entonces, como ejemplo, este sería el comando para tomar el último kernel Nexus 6P Nougat 3.10 de Google: git clone -b android-msm-angler-3.10-nougat-mr2 https://android.googlesource.com/kernel/msm/ pescado

Esto debería clonar el repositorio de kernel / msm en una carpeta de pescador y automáticamente verificar el archivo android-msm-angler-3.10-nougat-mr2.

Ahora, debido a que la mayoría de los dispositivos Android están basados en ARM, necesitaremos usar un compilador que apunte a dispositivos ARM; esto significa que el compilador host / nativo no funcionará, a menos que esté compilando en otro dispositivo ARM. Tienes pocas opciones aquí. Puede compilar uno usted mismo si sabe cómo, usando algo como Crosstool-NG. Alternativamente, puede descargar un compilador prediseñado, como el que proporciona Google para Arm de 32 bits y Arm64.

Antes de descargar el compilador prediseñado, necesita conocer la arquitectura exacta de su dispositivo, así que use una aplicación como CPU-Z para determinarla.

Otra cadena de herramientas popular sería UberTC, pero para cualquier kernel superior a 4.9, deberá parchearlos, y la mejor práctica es compilar primero con la cadena de herramientas de Google.

En cualquier caso, una vez que se haya decidido por la cadena de herramientas, debe clonarla. clon de gi

Ahora apunte el Makefile a su compilador, ejecutándolo desde dentro de la carpeta de la cadena de herramientas.

exportar CROSS_COMPILE = $ (pwd) / bin / -

Ejemplo:

exportar CROSS_COMPILE = $ (pwd) / bin / aarch64-linux-android-

Ahora dígale al Makefile la arquitectura de su dispositivo.

exportar ARCH = && exportar SUBARCH =

Ejemplo:

exportar ARCH = arm64 && export SUBARCH = arm64

Localice su defconfig adecuado navegando a la carpeta arch // configs dentro de la fuente del kernel (por ejemplo, arch / arm64 / configs).

A continuación, busque el archivo de configuración adecuado del desarrollador para el kernel que está compilando. Por lo general, debe tener el formato _defconfig o _defconfig. El defconfig indicará al compilador qué opciones incluir en el kernel.

También se pueden encontrar configuraciones genéricas de Qualcomm, que generalmente serán algo como (msm-perf_defconfig, msmcortex-perf_defconfig).

Construyendo el Kernel

Código:

hacer limpia hacer mrproper fabricar hacer -j $ (nproc –todos

Cuando esos comandos tengan éxito, debería tener: un archivo Image, Image-dtb, Image.gz o Image.gz-dtb al final.

Si esos comandos fallaron, es posible que deba especificar el directorio de salida al crear un nuevo kernel basado en CAF, como este:

mkdir -p out hacer O = limpio hacer O = mr apropiado hacer O = fuera hacer O = out -j $ (nproc –all

Si aún no quiere funcionar, algo está roto, revise sus encabezados o háblelo con los desarrolladores del kernel.

Si el kernel se compiló correctamente, ahora debe actualizarlo. Hay dos formas diferentes de hacer esto: puede descomprimir y volver a empaquetar la imagen de arranque usando Android Image Kitchen o AnyKernel2.

También puede haber algunos matices basados en dispositivos específicos; si este es el caso, deberá pedir ayuda a los desarrolladores de su dispositivo.

Intermitente del kernel en la cocina de imágenes de Android

Descargar Android Image Kitchen

Extraiga la imagen de arranque de su dispositivo Android de la última imagen disponible (ya sea en stock o ROM personalizada).

Ahora descomprime la imagen usando este código: unpackimg.sh.im

A continuación, busque el archivo zImage y reemplácelo con la imagen del kernel compilada: cámbiele el nombre a lo que estaba en la imagen de arranque.

Ahora ejecute este código para volver a empaquetar la imagen: repackimg.s

Ahora puede actualizar la nueva imagen de arranque usando fastboot, TWRP, etc.

Intermitente del kernel en AnyKernel2

Descargue la última versión de AnyKernel2

Aplique este parche para eliminar todos los archivos de demostración. wget https://github.com/nathanchance/AnyKernel2/commit/addb6ea860aab14f0ef684f6956d17418f95f29a.diff parche -p1 <addb6ea860aab14f0ef684f6956d17418f95f29a.diff rm addb6ea860aab14f0ef684f6956d17418f95f29a.dif

Ahora coloque la imagen de su kernel en la raíz del archivo y abra anykernel.sh para modificar estos valores:

  • cuerda: el nombre de su núcleo
  • nombre#: Enumere todos los nombres en clave de su dispositivo (de /system/build.prop: ro.product.device, ro.build.product)
  • cuadra: La ruta de la imagen de arranque en su fstab. El fstab se puede abrir desde la raíz de su dispositivo y se verá así:

La primera columna es el valor al que desea establecer el bloque.

Ahora vuelva a comprimir el kernel y actualícelo en AnyKernel2: zip -r9 kernel.zip * -x README.md kernel.zi

Tenga en cuenta que muchos núcleos de CAF incluyen un script de Python que activará –Werror, que básicamente hace que su compilación arroje errores en las cosas más pequeñas. Entonces, para versiones de GCC más altas (que incluyen más advertencias), normalmente necesitará realizar cambios en el Makefile:

diff --git a / Makefile b / Makefile índice 1aaa760f255f..bfccd5594630 100644 --- a / Makefile +++ b / Makefile @@ -326,7 +326,7 @@ incluyen $ (srctree) /scripts/Kbuild.include AS = $ (CROSS_COMPILE) como LD = $ (CROSS_COMPILE) ld -REAL_CC = $ (CROSS_COMPILE) gcc + CC = $ (CROSS_COMPILE) gcc CPP = $ (CC) -E AR = $ (CROSS_COMPILE) ar NM = $ (CROSS_COMPILE) nm @@ -340,10 +340,6 @@ DEPMOD = / sbin / depmod PERL = perl CHECK = escaso

- # Usa el contenedor para el compilador. Este contenedor busca nuevos - # advertencias y hace que la compilación se detenga al encontrarlas. -CC = $ (árbol de origen) /scripts/gcc-wrapper.py $ (REAL_CC) - BANDERAS DE VERIFICACIÓN: = -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ -Wbitwise -Wno-return-void $ (CF) CFLAGS_MODULE =

El uso de una cadena de herramientas de GCC superior (5.x, 6.x, 7.xo incluso 8.x) requerirá que elimine el script de envoltura de GCC como se indicó anteriormente y use un archivo de encabezado de GCC unificado (elija lo siguiente si tiene un archivo include / linux /compiler-gcc#.h archivo):

3.4 / 3.10: 3.18

Incluso si recibe muchas advertencias, no es necesario corregirlas (normalmente).

¡Su kernel está construido y listo para funcionar!

Popular por tema