¿Construyendo ROMs y Kernels?

He estado usando ROM personalizados y Kernels en mi GS5 por un tiempo, pero quiero obtener una explicación clara sobre cómo funciona. Aquí hay algunas preguntas:

  1. ¿Qué es 'construir' en Android? Escuché que el sistema de compilación es diferente de otros sistemas Linux.
  2. ¿Cuál es la diferencia entre una ROM y un Kernel?
  3. ¿Están separadas la 'parte ROM' y la 'parte Kernel'? Entonces, ¿puedo construirlos por separado e instalarlos por separado?
  4. ¿Cómo agrego controladores de dispositivos (como dongles WiFi) a mi Kernel?
  5. Dentro de un archivo zip de ROM personalizado, ¿se incluye el Kernel junto con la ROM?
  6. ¿Los kernels son compatibles con diferentes ROM? (Por ejemplo, usando un Kernel creado a partir de las fuentes de stock oficiales en CyanogenMod)

Estas pueden ser preguntas muy novatas, pero tengo mucha, mucha curiosidad.

Respuestas (1)

1) Construir en Android podría significar: - construir un entregable en el árbol de construcción de android - construir un entregable en una plataforma android con herramientas de construcción instaladas - construir el AOSP (Android OpenSource Project) Un poco más de contexto puede ayudar. De acuerdo con la siguiente pregunta 'el sistema de compilación es diferente de otros sistemas Linux', podría ser el AOSP. En realidad, Android es una distribución para el teléfono. Entonces, construir un firmware de Android para una plataforma móvil es equivalente a construir una distribución de Linux para una computadora de escritorio. Construye el cargador de arranque, el kernel, el sistema de archivos raíz y algunos entregables adicionales (por ejemplo, sistema de archivos de recuperación que es un sistema especial de Android, imagen del sistema de archivos del proveedor, SDK, NDK, Android CTS, etc.). La forma de construir todo esto es diferente de cualquier otro sistema de construcción existente.Sitio web de la fuente de Android . Échale un vistazo :)

2) Una ROM no es un término muy preciso. Puede significar varias cosas. Generalmente, ROM designa la parte del SISTEMA del firmware completo de Android para una plataforma móvil, siendo el núcleo otra parte de este firmware. Pero a veces, una ROM contiene todo: el SISTEMA, los DATOS, el CARGADOR DE ARRANQUE, los Parámetros del CARGADOR DE ARRANQUE, la RECUPERACIÓN y la parte del KERNEL.

3) Si la ROM designa el firmware completo, Kernel es parte de él, entonces el kernel se incluye en la ROM y la compilación de la ROM => la compilación del kernel. Si ROM designa la parte del SISTEMA de Android, ambos son independientes y se pueden compilar e instalar por separado.

4) Android es una plataforma móvil y, como tal, se ejecuta en teléfonos. Es posible instalar controladores de dispositivos, pero es un poco complicado ya que depende en gran medida del diseño de la plataforma de hardware. Para placas de referencia (plataformas de desarrollo), estos procedimientos están bien documentados por los fabricantes, lo que permite a los desarrolladores hacerlo por sí mismos. Para una plataforma cerrada (como un teléfono HTC o SAMSUNG), la documentación es mucho más difícil de obtener (la mayoría de las veces requiere al menos un NDA y, a veces, no hay documentación disponible, ya que sigue siendo información confidencial de la empresa).

5) Supongo que, por archivo zip de ROM, te refieres al paquete de actualización OTA. Este paquete puede contener cualquier cosa que la plataforma necesite actualizar y esto incluye (pero no se limita a) kernel, gestor de arranque, firmware de radio, firmware TEE, etc. Estos paquetes se basan en un lenguaje de secuencias de comandos (llamado edify) que permite hacer algunas operaciones de actualización.

6) El núcleo está vinculado a la plataforma de hardware (un teléfono <=> un núcleo). Sin embargo, algunos SISTEMAS pueden requerir que se habiliten algunas características específicas a nivel del kernel. Entonces, en general, sí, los núcleos son compatibles con cualquier partición del SISTEMA (suponiendo que el término ROM se use aquí con el significado de la partición del SISTEMA de Android).

Espero que esto haya ayudado ;-)

Objeción a 6): los núcleos generalmente no son compatibles, incluso si están diseñados para el mismo dispositivo pero para diferentes ROM. El resto está bien como yo lo veo. +1 solo por el esfuerzo de escribir una respuesta tan larga.
Con la restricción que mencioné (algunas características de los proveedores pueden depender de las características del núcleo), los núcleos son perfectamente compatibles entre sí. Un kernel es un kernel y no hay un kernel de cianógeno o un kernel AOSP. En realidad, todos los núcleos de Android están basados ​​​​en Hiky Linux. Consulte source.android.com/source/devices.html#hikey-boards si necesita estar convencido.
Tengo que moderar lo que dije. En realidad, Binder y otras modificaciones de Linux específicas de Android introducen algunas adherencias entre la versión de Android y la versión de Linux. Luego, el kernel y no son compatibles de una versión a otra pero en la misma versión, cualquiera que sea la 'distribución' (ROM como U lo llama), los kernel son intercambiables (creo que podríamos verificar pero deberían usar el mismo kernel para la misma plataforma ).
Más o menos, ya que las ROM de stock suelen ser la cabeza de las ROM personalizadas en la versión kernel hoy en día.
Seguro. Lo siento, pero leer lo que escribí no es muy claro y me disculpo por eso. Claramente baso mi razonamiento en términos indefinidos y poco claros que uso fuera de contexto. Me imagino que esto es realmente oscuro, entonces trato de reformular:
Google define un nivel de API de Android (vinculado a nombres de plataformas de Android como Nougat, Kitkat, etc.). Las versiones del kernel de Linux (y las modificaciones específicas de Android) están vinculadas a estos niveles de API. Cualquier kernel de Linux para una plataforma de hardware se ejecutará para cualquier usuario de Android con el nivel de API correcto. Las ROM son solo algunas personalizaciones de la parte de usuario de Android y las ROMS personalizadas están vinculadas a los niveles de API de Android.
Hmm... Si ese es el caso, aquí hay una pregunta algo relacionada que quería hacer: las versiones del kernel vinculadas a los niveles de API son bastante altas, pero ¿por qué las ROM personalizadas pueden tener el mismo nivel de API ejecutándose en un kernel mucho más bajo ? ¿versión? Algunos incluso tienen KitKat/Lollipop en un kernel 2.6.xx muy desactualizado. ¿Simplemente portaron manualmente todos los módulos adicionales necesarios?
Sí. En realidad, varias versiones del kernel de Linux están disponibles para cada nivel de API. Podrían estar disponibles una v2.x, una v3.x y una v4.x. Es solo una cuestión de portar los cambios específicos de Android. Aquí hay algunas buenas descripciones de estos cambios: quora.com/… elinux.org/Android_Kernel_Features
Ah, buena lectura para cuando tenga tiempo, gracias. Ojalá pudiera votar más de una vez.
¡bienvenido! mi placer :)