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.
Documentación relacionada
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 .