Android 11 presenta el concepto de la imagen genérica del kernel y la partición de arranque del proveedor. La partición de arranque del proveedor almacena los módulos del kernel compatibles con GKI y se carga mediante el inicio 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 de proveedores los cargan.
Para Android 11 o superior, el kernel y todos los módulos del kernel se pueden actualizar independientemente 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), mueva todos los módulos de la partición del proveedor a una nueva partición denominada DLKM del proveedor (módulo del kernel cargable dinámicamente). A continuación, puede 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 súper partición como otra partición dinámica.
contenido de vendor_dlkm en /vendor/lib/modules
- Módulos del núcleo del proveedor
- archivos de configuración
modprobe
- Un archivo de
modules.load
Contenido de odm_dlkm en /odm/lib/modules
- Módulos del núcleo ODM
- archivos de configuración
modprobe
- Un archivo de
modules.load
Consulte Compatibilidad con el módulo del kernel para obtener más detalles sobre los archivos de configuración del módulo del kernel.
Construir soporte
La creación de vendor_dlkm
y odm_dlkm
es un proceso similar al de la creación de otras particiones dinámicas.
ejemplo de compilación de vendor_dlkm
Cree vendor_dlkm
como se muestra en el ejemplo a continuación.
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. Cambiar banderas según el dispositivo. Utilice el CL Añadir 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 odm_dlkm
Genere 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. Cambiar 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 núcleo que desea copiar en la partición vendor_dlkm
, enumérelos 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
, enumérelos 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 de kernel de proveedor y ODM.
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 use /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 /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 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 en un momento posterior, 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), consulte Compatibilidad con el módulo del kernel .