Android 11 introduce el concepto de imagen genérica del kernel y la partición de inicio del proveedor. La partición de arranque del proveedor almacena módulos del kernel compatibles con GKI y se carga con la inicialización de primera etapa. Los módulos del kernel anteriores al lanzamiento de Android 11 también se almacenan en las particiones del proveedor y del ODM, y los cargan los procesos del proveedor.
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 del 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 nueva partición llamada Vendor DLKM (módulo del kernel cargable de forma dinámica). Luego, puedes actualizar esta partición de forma independiente. Del mismo modo, puedes mover todos los módulos del kernel almacenados en la partición ODM a una nueva partición 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.
Contenido de vendor_dlkm en /vendor/lib/modules
- Módulos de kernel del proveedor
- Archivos de configuración de
modprobe
- Un archivo
modules.load
Contenido de odm_dlkm en /odm/lib/modules
- Módulos de kernel del ODM
- Archivos de configuración de
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.
Consigue ayuda
La creación de vendor_dlkm
y odm_dlkm
es un proceso similar al 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 adecuado 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 CL 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 virtuales, 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 CL Add odm_dlkm
to CF como ejemplo.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Copia módulos del kernel en una partición
Para seleccionar los módulos del kernel que deseas copiar en la partición vendor_dlkm
, inclúyelos en BOARD_VENDOR_KERNEL_MODULES
.
Si deseas anular el contenido de modules.load
, puedes especificarlo en BOARD_VENDOR_KERNEL_MODULES_LOAD
.
En el momento de la compilación, los módulos que se indican 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
, enuméralos 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 indican en BOARD_ODM_KERNEL_MODULES
.
Si deseas anular el contenido de modules.load
, puedes especificarlo en BOARD_ODM_KERNEL_MODULES_LOAD
.
En el momento de la 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 lleva a /odm_dlkm/lib/modules
.
Siempre usa /vendor/lib/modules
y /odm/lib/modules
para los módulos del kernel del ODM y del proveedor.
Nunca uses /vendor_dlkm/lib/modules. Los dispositivos sin una partición de vendor_dlkm
instalan BOARD_VENDOR_KERNEL_MODULES
directamente en /vendor/lib/modules
. 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
directamente en /odm/lib/modules
. Esto es problemático, ya que /odm_dlkm/lib/modules
no existe.
Carga de módulos y montaje de particiones
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 vínculos simbólicos en /vendor/lib/modules
y /odm/lib/modules
están disponibles.
Luego, un proceso del proveedor (como una secuencia de comandos .rc
) puede cargar los módulos del 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 arranque del proveedor (que contiene el RAMDisk del proveedor), consulta Compatibilidad con módulos del kernel.