Partición DLKM de proveedor/ODM

Android 11 introduce el concepto de imagen de kernel genérica y la partición de arranque del proveedor. La partición de arranque del proveedor almacena módulos del kernel compatibles con GKI y se carga mediante el inicio de la primera etapa. Los módulos del kernel anteriores al lanzamiento de Android 11 también se almacenan en particiones de proveedor y ODM, y se cargan mediante procesos de proveedor.

Para Android 11 o superior, el kernel y todos los módulos del kernel se pueden actualizar independientemente del resto de 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), mueva todos los módulos de la partición del proveedor a una nueva partición llamada Vendor DLKM (módulo del kernel cargable dinámicamente). Luego podrá actualizar esta partición de forma independiente. De manera similar, puede 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 están ubicadas en la superpartición como otra partición dinámica.

contenido de seller_dlkm en /vendor/lib/modules

  • Módulos del kernel del proveedor
  • archivos de configuración modprobe
  • Un archivo modules.load

Contenido de odm_dlkm en /odm/lib/modules

  • Módulos del núcleo ODM
  • archivos de configuración modprobe
  • Un archivo modules.load

Consulte Soporte del módulo kernel para obtener más detalles sobre los archivos de configuración del módulo kernel.

Construir soporte

La creación de vendor_dlkm y odm_dlkm es un proceso similar al de otras particiones dinámicas.

ejemplo de compilación de seller_dlkm

Compile vendor_dlkm como se muestra en el siguiente ejemplo.

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

Reemplace <GROUP_NAME> con el nombre apropiado 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 Virtual A/B, device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

Agregue la siguiente entrada para vendor_dlkm a fstab. Cambie las banderas según el dispositivo. Utilice CL Agregar vendor_dlkm a 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

Compile odm_dlkm como se muestra en el siguiente ejemplo.

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 Virtual A/B, device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

Agregue la siguiente entrada para odm_dlkm a fstab. Cambie las banderas según el dispositivo. Utilice CL Agregar odm_dlkm a CF como ejemplo.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Copiar módulos del kernel en una partición

Para seleccionar los módulos del kernel que desea copiar en la partición vendor_dlkm , enumerelos en BOARD_VENDOR_KERNEL_MODULES .

Si desea anular el contenido de modules.load , puede especificarlo en BOARD_VENDOR_KERNEL_MODULES_LOAD .

En el momento de la compilación, los módulos enumerados en BOARD_VENDOR_KERNEL_MODULES se instalan en $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules . Se crea un enlace simbólico en /vendor/lib/modules que conduce a /vendor_dlkm/lib/modules .

De manera similar, para seleccionar los módulos del kernel que desea copiar en la partición odm_dlkm , enumerelos en BOARD_ODM_KERNEL_MODULES . La compilación de la plataforma ejecuta depmod en los módulos y copia los archivos de salida 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 enumerados en BOARD_ODM_KERNEL_MODULES .

Si desea anular el contenido de modules.load , puede especificarlo en BOARD_ODM_KERNEL_MODULES_LOAD .

En el momento de la compilación, los módulos enumerados en BOARD_ODM_KERNEL_MODULES se instalarán en $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules . Se creará un enlace simbólico en /odm/lib/modules que conduce a /odm_dlkm/lib/modules .

Utilice siempre /vendor/lib/modules y /odm/lib/modules para los módulos del kernel ODM y del proveedor.

Nunca use /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 utilice /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.

Montaje de particiones y carga de módulos.

Durante first_stage_init , las particiones vendor_dlkm y odm_dlkm se montan en las particiones /vendor_dlkm y /odm_dlkm , respectivamente. Cuando esto sucede, los enlaces simbólicos en /vendor/lib/modules y /odm/lib/modules quedan disponibles.

Un proceso de proveedor (como un script '.rc') puede luego 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.

Para obtener documentación sobre la creación de una partición de inicio del proveedor (que contiene el disco RAM del proveedor), consulte Soporte del módulo kernel .