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

Soporte del módulo del kernel

Es posible que una imagen de kernel genérica (GKI) no contenga el controlador necesario para permitir que un dispositivo monte particiones. Para activar un dispositivo para montar particiones y para continuar el arranque, la primera etapa init se ha mejorado para cargar el núcleo módulos presentan en un disco RAM. El disco RAM se divide en discos RAM genéricos y de proveedor. Los módulos del núcleo del proveedor se almacenan en el disco RAM del proveedor. El orden en el que se cargan los módulos del kernel es configurable.

Ubicación del módulo

El disco RAM es el sistema de ficheros para la primera etapa init, y para la recuperación / imagen fastbootd en A / B y los dispositivos de A / B virtuales. Es un initramfs compuestas de dos cpio que consiguen concatenada con el gestor de arranque. El primer archivo cpio, que se almacena como el disco ram del proveedor en la partición de arranque del proveedor, contiene estos componentes:

  • La primera etapa init del proveedor módulos del núcleo, que se encuentra en /lib/modules/ .
  • modprobe archivos de configuración, que se encuentra en /lib/modules/ : modules.dep , modules.softdep , modules.alias , modules.options .
  • A modules.load archivo que indica qué módulos de carga durante el primero init etapa, y en qué orden, en /lib/modules/ .
  • Módulos de recuperación-kernel Vendedor, para A / B y los dispositivos de A / B virtuales, en /lib/modules/
  • modules.load.recovery que indica que los módulos de carga, y en qué orden, para A / B y los dispositivos de A / B virtuales, en /lib/modules .

El segundo archivo cpio, que se suministra con el GKI como el disco de memoria de la boot.img y se aplica en la parte superior de la primera, contiene first_stage_init y las bibliotecas de los que depende.

Carga del módulo en la inicialización de la primera etapa

La primera etapa init comienza por la lectura de los archivos de configuración de modprobe /lib/modules/ en el disco RAM. A continuación, se lee la lista de módulos especificados en /lib/modules/modules.load (o en el caso de la recuperación, /lib/modules/modules.load.recovery ) y los intentos para cargar cada uno de dichos módulos en orden, la siguiente configuración especificada en los archivos cargados previamente. El orden solicitado puede desviarse para satisfacer dependencias rígidas o blandas.

Soporte de compilación, inicio de primera etapa

Para especificar los módulos del núcleo que se copian en el disco de memoria cpio vendedor, lista en BOARD_VENDOR_RAMDISK_KERNEL_MODULES . Las carreras de construcción depmod en estos módulos y coloca los archivos de configuración de modprobe resultantes en el cpio proveedor disco RAM.

La construcción también crea un modules.load archivo y lo almacena en el disco de memoria cpio proveedor. Por defecto, contiene todos los módulos que figuran en BOARD_VENDOR_RAMDISK_KERNEL_MODULES . Para anular el contenido de ese archivo, uso BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD , como se muestra en este ejemplo:

BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \
    device/vendor/mydevice-kernel/first.ko \
    device/vendor/mydevice-kernel/second.ko \
    device/vendor/mydevice-kernel/third.ko

Soporte de compilación, Android completo

Como es el caso de Android 10 y menores emisiones, los módulos del núcleo que figuran en BOARD_VENDOR_KERNEL_MODULES se copian por el androide construir la plataforma en la partición vendedor en /vendor/lib/modules . Las carreras plataforma de construcción depmod sobre estos módulos, y copia los depmod archivos de salida en la partición de vendedor en el mismo lugar. El mecanismo para módulos de carga del núcleo desde /vendor sigue siendo el mismo como lo fue para las versiones anteriores de Android. Es su decisión de cómo y cuándo cargar estos módulos, aunque por lo general esto se hace usando init.rc guiones.

Comodines y compilaciones de kernel integradas

Los vendedores que combinan su construcción del kernel dispositivo con el Android construir la plataforma pueden encontrarse con un problema con el mencionado BOARD macros para especificar los módulos del núcleo que se copiarán en el dispositivo. Si el vendedor desea evitar listado de los módulos del núcleo en los archivos de plataforma de construcción del dispositivo, se puede utilizar un comodín ( $(wildcard device/vendor/mydevice/*.ko ). Tenga en cuenta que el comodín no funciona en el caso de un esclavo compilación del kernel, porque cuando se invoca make y las macros se expanden en makefiles, los módulos del kernel no se han compilado, por lo que las macros están vacías.

Para solucionar este problema, el proveedor puede hacer que la compilación del kernel cree un archivo zip que contenga los módulos del kernel que se copiarán en cada partición. Establecer la ruta de ese archivo zip en BOARD_*_KERNEL_MODULES_ARCHIVE donde * es el nombre de la partición (como BOARD_VENDOR_KERNEL_MODULES_ARCHIVE ). La plataforma Android acumulación extrae Este archivo zip en la ubicación adecuada y se ejecuta depmod en los módulos.

El archivo zip del módulo del kernel debe tener una regla de creación que garantice que la compilación de la plataforma pueda generar el archivo cuando sea necesario.

Recuperación

En versiones anteriores de Android, los módulos del núcleo necesarios para la recuperación se especificaron en BOARD_RECOVERY_KERNEL_MODULES . En Android 11, los módulos del kernel necesarios para la recuperación todavía se especifican mediante esta macro. Sin embargo, los módulos del kernel de recuperación se copian en el ramdisk cpio del proveedor, en lugar del ramdisk cpio genérico. Por defecto, todos los módulos del núcleo que figuran en BOARD_RECOVERY_KERNEL_MODULES se cargan durante la primera etapa init . Si sólo desea un subconjunto de estos módulos que se cargan, especificar el contenido de ese subconjunto de BOARD_RECOVERY_KERNEL_MODULES_LOAD .

Para aprender a crear una partición de arranque proveedor (que contiene el disco de memoria compañía mencionados en esta página), véase Boot particiones .