Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Implementación de Bootconfig en Android 12

En Android 12, la característica bootconfig sustituye a la androidboot.* Opciones de línea de órdenes del núcleo en uso con Android 11 y bajar. La función bootconfig es un mecanismo para pasar detalles de configuración desde la compilación y el cargador de arranque a Android 12.

Esta función proporciona una forma de separar los parámetros de configuración para el espacio de usuario de Android de los del kernel. Mover el largo androidboot.* Parámetros del kernel en el fichero de bootconfig crea un espacio en el línea_de_órdenes núcleo y lo hace disponible para una futura expansión fácil.

Tanto el núcleo como el espacio de usuario de apoyo deben Android bootconfig .

  • Primera versión que tiene este soporte: Android 12
  • Primera versión del kernel que tiene este soporte: kernel 12-5.4.xx

Implementar la función bootconfig para los nuevos dispositivos de lanzamiento con una versión del núcleo 12-5.10.xx. No es necesario implementarlo si está actualizando dispositivos.

Ejemplos y fuente

Al ver el código fuente y ejemplos en esta sección, nota que el formato de la bootconfig código es sólo ligeramente diferente del formato de la línea_de_órdenes núcleo utilizado en Android 11 y bajar. Sin embargo, la siguiente diferencia es importante para su uso:

  • Los parámetros deben ser separados por la secuencia de escape de nueva línea \n , no por espacios.

Ejemplo de cargador de arranque

Para ver un ejemplo de cargador de arranque, consulte la implementación del cargador de arranque de referencia Cuttlefish U-boot. A continuación se enumeran dos confirmaciones en la referencia. La primera actualiza el soporte de la versión del encabezado de arranque a la última versión. En el ejemplo, la primera confirmación actualiza (o actualiza) el soporte de la versión a la siguiente, v4. El segundo hace dos cosas; agrega manejo de bootconfig y demuestra cómo agregar parámetros en tiempo de ejecución:

Ejemplo de construcción

Para un ejemplo de construcción que muestra mkbootimg cambios para construir el vendor_boot.img con el proveedor de arranque cabecera v4, ver mkbootimg changes for bootconfig . Vea los cambios de Cuttlefish para hacer lo siguiente:

Implementación

Los socios deben añadir soporte a sus gestores de arranque, y pasar su tiempo de acumulación androidboot.* Parámetros del kernel línea_de_órdenes al archivo bootconfig. La mejor forma de implementar este cambio es hacerlo de forma incremental; ver la implementación y validación incremental sección para obtener información sobre el siguiente un proceso incremental.

Si tiene cambios que buscan el archivo / proc / cmdline para androidboot.* Parámetros, que apunte al archivo / proc / bootconfig lugar. El ro.boot.* Propiedades se establecen con los nuevos bootconfig valores, por lo que no es necesario hacer cambios para el código que utilizan esas propiedades.

Construir cambios

Primero, actualice la versión del encabezado de arranque a la versión 4:

- BOARD_BOOT_HEADER_VERSION := 3

+ BOARD_BOOT_HEADER_VERSION := 4

Añadir el bootconfig parámetro del núcleo cmdline. Esto hace que el kernel busque la sección bootconfig:

BOARD_KERNEL_CMDLINE += bootconfig

Los parámetros bootconfig se crean a partir de los parámetros en el BOARD_BOOTCONFIG variables, al igual que el núcleo cmdline se crea a partir BOARD\_KERNEL\_CMDLINE .

Cualquier androidboot.* parámetros se puede mover en que está, similar a la siguiente:

- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing

+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing

Cambios en el gestor de arranque

El gestor de arranque establece las initramfs antes de saltar al núcleo. Los arranque del núcleo de configuración busca la sección de bootconfig, y las miradas para que sea al final de initramfs, con el remolque se esperaba.

El gestor de arranque se pone el vendor_boot.img información de diseño de la cabecera de imagen Vendedor de arranque.

Diagram of bootconfig memory allocation layout

Figura 1. Android 12 bootconfig asignación de memoria

El cargador de arranque crea la sección de configuración de arranque en la memoria. La sección bootconfig contiene asignaciones de memoria para lo siguiente:

  • Parámetros
  • 4 B tamaño parameters size
  • 4 B tamaño parameters checksum
  • 12 B cadena mágica bootconfig ( #BOOTCONFIG\n )

Los parámetros provienen de dos fuentes: parámetros conocidos en el momento de la compilación y parámetros que no se conocen en el momento de la compilación. Deben agregarse parámetros desconocidos.

Parámetros conocidos en tiempo de compilación se empaquetan en el final de la vendor_boot imagen en la sección bootconfig. El tamaño de la sección se almacena (como bytes) en el proveedor de arranque campo de cabecera vendor_bootconfig_size .

Los parámetros que no se conocen en el momento de la compilación solo se conocen en el tiempo de ejecución en el cargador de arranque. Estos deben agregarse al final de la sección de parámetros de bootconfig antes de que se aplique el tráiler de bootconfig.

Si necesita agregar algún parámetro después de que se haya aplicado el avance de bootconfig, sobrescriba el avance y vuelva a aplicarlo.

Implementación y validación incrementales

Implemente la función bootconfig de forma incremental siguiendo el proceso que se proporciona en esta sección. Deje los parámetros de la línea de cmd del kernel sin tocar mientras se agregan los parámetros de bootconfig.

Estos son los pasos para una implementación incremental, con validación:

  1. Hacer el gestor de arranque y construir los cambios, a continuación, haga lo siguiente:
    1. Usar la BOARD_BOOTCONFIG variables para añadir un nuevo parámetro bootconfig.
    2. Mantenga los parámetros de la línea de cmd del kernel tal como están, para que el dispositivo pueda continuar arrancando correctamente. Esto facilita mucho la depuración y la validación.
  2. Verificar su trabajo mediante la comprobación de los contenidos de /proc/bootconfig . Verifique que vea el parámetro recién agregado después de que se haya iniciado el dispositivo.
  3. Mover el androidboot.* Parámetros del kernel para línea_de_órdenes bootconfig, utilizando el BOARD_BOOTCONFIG variable y el gestor de arranque.
  4. Compruebe que cada uno de los parámetros existe en /proc/bootconfig Y no es que están en /proc/cmdline . Si puede verificar esto, su implementación fue exitosa.

Consideraciones de actualización y degradación de OTA

Cuando administra actualizaciones y degradaciones de OTA entre diferentes versiones de Android o diferentes versiones del kernel, se debe tener especial cuidado.

Android 12 es la primera versión compatible con bootconfig. Si se degrada a cualquier versión anterior, se deben usar los parámetros de la línea de cmd del kernel en lugar de bootconfig.

Las versiones de kernel 12-5.4 y posteriores admiten bootconfig. Si se degrada a cualquier versión anterior (incluida la 11-5.4), se deben utilizar los parámetros de cmdline del kernel.

Las actualizaciones de Android 11 y anteriores a Android 12 y posteriores pueden seguir usando los parámetros de cmdline del kernel. Lo mismo ocurre con la actualización de versiones del kernel.

Solución de problemas

Cuando se realiza el paso de verificación, si usted no ve los parámetros esperados en /proc/bootconfig , compruebe los registros del núcleo en logcat . Siempre hay una entrada de registro presente para bootconfig si el kernel lo admite.

Salida de registro de ejemplo

$ adb logcat | grep bootconfig
02-24 17:00:07.610     0     0 I Load bootconfig: 128 bytes 9 nodes

Si ve un registro de error devuelto, entonces hubo un problema al cargar el archivo bootconfig. Para ver diferentes tipos de error, ver init / main.c .