Android 11 introduce el concepto de la imagen genérica del kernel y la partición de inicio del proveedor. La partición de inicio del proveedor almacena módulos de kernel compatibles con GKI y se carga mediante la inicialización de la primera etapa. Los módulos de kernel anteriores al lanzamiento de Android 11 también se almacenan en particiones de proveedores y ODM, y los procesos del proveedor los cargan.
En Android 11 o versiones posteriores, el kernel y todos los módulos del kernel se pueden actualizar de forma independiente del resto de las particiones. Para habilitar las actualizaciones de los módulos de kernel almacenados en la partición del proveedor (sin una actualización de la partición del proveedor), mueve todos los módulos de la partición del proveedor a una partición nueva llamada Vendor DLKM (módulo de kernel cargable de forma dinámica). Luego, puedes actualizar esta partición de forma independiente. De manera similar, puedes mover todos los módulos de kernel almacenados en la partición de ODM a una partición nueva llamada ODM DLKM. Esta partición también se puede actualizar de forma independiente.
Ubicación de la partición
Las particiones vendor_dlkm
y odm_dlkm
se encuentran en la superpartición como otra partición dinámica.
Provider_dlkm contenido en /vendor/lib/modules
- Módulos de kernel del proveedor
- Archivos de configuración
modprobe
- Un archivo
modules.load
Contenido de odm_dlkm en /odm/lib/modules
- Módulos de kernel del ODM
- Archivos de configuración
modprobe
- Un archivo
modules.load
Consulta Compatibilidad con el módulo de kernel para obtener más detalles sobre los archivos de configuración del módulo de kernel.
Cómo obtener asistencia
La compilación de vendor_dlkm
y odm_dlkm
es un proceso similar a la compilación de otras particiones dinámicas.
Ejemplo de compilación de vendor_dlkm
Compila vendor_dlkm
como se muestra en los siguientes ejemplos.
BoardConfig.mk
BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm
Reemplaza <GROUP_NAME>
por el nombre correcto del grupo de actualización. El grupo de actualización debe ser el grupo en el que se encuentra la partición del proveedor.
Para dispositivos A/B y A/B virtuales, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Agrega la siguiente entrada para vendor_dlkm
a fstab. Cambia las marcas según el dispositivo. Usa el comando Add vendor_dlkm
to CF como ejemplo.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Ejemplo de compilación de odm_dlkm
Compila odm_dlkm
como se muestra en los siguientes ejemplos.
BoardConfig.mk
BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm
Para dispositivos A/B y A/B virtual, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Agrega la siguiente entrada para odm_dlkm
a fstab. Cambia las marcas según el dispositivo. Usa el comando Add odm_dlkm
to CF como ejemplo.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Cómo copiar módulos de kernel en una partición
Para seleccionar los módulos del kernel que deseas copiar en la partición vendor_dlkm
, indícalos en BOARD_VENDOR_KERNEL_MODULES
.
Si quieres anular el contenido de modules.load
, puedes especificarlo en BOARD_VENDOR_KERNEL_MODULES_LOAD
.
En el tiempo de compilación, los módulos que se enumeran en BOARD_VENDOR_KERNEL_MODULES
se instalan en $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. Se crea un vínculo simbólico en /vendor/lib/modules
que dirige a /vendor_dlkm/lib/modules
.
De manera similar, para seleccionar los módulos del kernel que deseas copiar en la partición odm_dlkm
, indícalos en BOARD_ODM_KERNEL_MODULES
. La compilación de la plataforma ejecuta depmod
en los módulos y copia los archivos de salida de depmod
en la imagen.
La compilación crea un archivo modules.load
y lo almacena en la imagen.
Este archivo contiene todos los módulos que se enumeran en BOARD_ODM_KERNEL_MODULES
.
Si quieres anular el contenido de modules.load
, puedes especificarlo en BOARD_ODM_KERNEL_MODULES_LOAD
.
En el tiempo de compilación, los módulos que se enumeran en BOARD_ODM_KERNEL_MODULES
se instalan en $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Se crea un vínculo simbólico en /odm/lib/modules
que dirige a /odm_dlkm/lib/modules
.
Siempre usa /vendor/lib/modules
y /odm/lib/modules
para los módulos de kernel del proveedor y del ODM.
Nunca uses /vendor_dlkm/lib/modules. Los dispositivos sin una partición vendor_dlkm
instalan BOARD_VENDOR_KERNEL_MODULES
en /vendor/lib/modules
directamente. Esto es problemático, ya que /vendor_dlkm/lib/modules
no existe.
Nunca uses /odm_dlkm/lib/modules
. Los dispositivos sin una partición odm_dlkm
instalan BOARD_ODM_KERNEL_MODULES
en /odm/lib/modules
directamente. Esto es problemático, ya que /odm_dlkm/lib/modules
no existe.
Activación de particiones y carga de módulos
Durante first_stage_init
, las particiones vendor_dlkm
y odm_dlkm
se activan en los directorios /vendor_dlkm
y /odm_dlkm
, respectivamente. Cuando esto sucede, los symlinks en /vendor/lib/modules
y /odm/lib/modules
están disponibles.
Un proceso de proveedor (como una secuencia de comandos .rc
) puede cargar los módulos de kernel según el orden especificado en modules.load
. El proceso del proveedor también puede cargar los módulos más adelante, si es necesario.
Documentación relacionada
Para obtener documentación sobre la creación de una partición de inicio del proveedor (que contiene el RAMDisk del proveedor), consulta Compatibilidad con módulos de kernel.