Los módulos de GKI y GKI se pueden actualizar de forma independiente del resto de la partición.
porque los módulos de GKI residen en una partición dinámica independiente en la
llamada system_dlkm
. Google firma los módulos de GKI con el kernel
de tiempo de compilación y solo son compatibles con el GKI con el que se compilaron.
No hay estabilidad de ABI entre los módulos de GKI y GKI. para que los módulos se carguen
correctamente durante el tiempo de ejecución, los módulos de GKI y GKI deben compilarse y actualizarse.
entre sí.
Implementa la compatibilidad con la partición system_dklm
La partición system_dlkm
se encuentra en la superpartición como otro elemento dinámico.
por cada partición. Esta partición puede contener lo siguiente:
- Módulos de kernels firmados por el tiempo de compilación de Google
depmod
artefactos
Compilación system_dlkm
La compilación de system_dlkm
es un proceso similar a la compilación de otras
y particiones. Realiza los siguientes pasos para agregar system_dlkm
a tu compilación:
En
BoardConfig.mk
, agrega las siguientes entradas:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
En la lista de particiones, agrega
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(Opcional) Para dispositivos A/B y A/B virtuales, agrega la siguiente línea en el
device.mk
para tu dispositivo:AB_OTA_PARTITIONS += system_dlkm
Cómo identificar los módulos de kernel para copiar en system_dlkm
Para que los módulos se carguen correctamente en el tiempo de ejecución, se deben compilar los módulos de GKI y de GKI.
entre sí. Por lo tanto, debes identificar los módulos de kernel en la compilación de GKI para el
arquitectura de destino y la proporcionarás como origen para la partición system_dlkm
durante la compilación de la plataforma.
Para Android 13
Apuntar BOARD_SYSTEM_DLKM_SRC
a una carpeta que contenga los módulos de GKI obligatorios
archivos de objeto de kernel para el dispositivo como una entrada al sistema de compilación para generar
la partición system_dlkm
. Por ejemplo:
Proporciona la fuente de los módulos de GKI en una carpeta y apunta BOARD_SYSTEM_DLKM_SRC
a
esa carpeta. Por ejemplo:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Durante el tiempo de compilación, los módulos enumerados en BOARD_SYSTEM_DLKM_SRC
se instalan en
$ANDROID_PRODUCT_OUT/system_dlkm
Para Android 14
Optimizamos la implementación con las macros.
(BOARD_*_KERNEL_MODULES
) se están utilizando para otro
*_dlkm
particiones. La lista de módulos de GKI requeridos para el dispositivo debe ser
a la que hace referencia la macro BOARD_SYSTEM_KERNEL_MODULES
. Durante el tiempo de compilación, estos módulos
están instalados en $ANDROID_PRODUCT_OUT/system_dlkm
. Cualquier módulo en
La partición vendor_dlkm
que tiene dependencias de los módulos en system_dlkm
genera referencias correctas en el archivo modules.dep
para el
vendor_dlkm
. Debido a las dependencias entre particiones representadas
antes del modules.dep
, cuando un
proveedor del módulo se cargará y cualquier módulo de GKI requerido se cargará automáticamente.
Por ejemplo, para instalar todos los módulos de GKI en la partición system_dlkm
de GKI
Kernel 5.15
de arm64
de compilaciones previas:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Activa system_dlkm
en el tiempo de ejecución
Según el sistema de archivos que se use como sistema de archivos de solo lectura, agrega
lo siguiente en tu fstab
para activar la partición system_dlkm
en el entorno de ejecución:
ext4
como sistema de archivos de solo lectura
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
como sistema de archivos de solo lectura
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
Activación de particiones y carga de módulos
Durante first_stage_init
, la partición system_dlkm
se activa en el
/system_dlkm
como sistema de archivos de solo lectura. En un soporte exitoso, simbólico
los vínculos en /system/lib/modules
que dirigen a /system_dlkm/lib/modules
son
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 debe usar
el vínculo simbólico /system/lib/modules
para cargar los módulos
Si es necesario, el proceso del proveedor también puede cargar los módulos más adelante.
SELinux
Cada archivo de la partición system_dlkm
está etiquetado con el contexto de archivo de
system_dlkm_file
Para cargar el archivo de módulos de GKI en la partición system_dlkm
, haz lo siguiente:
el proceso del proveedor responsable de cargar los módulos necesita un sepolicy
en
el dominio del proveedor.
Por ejemplo, el objeto dlkm_loader
que usa Cuttlefish para cargar módulos de GKI tiene la siguiente información:
siguientes permisos en el archivo de políticas en
shared/sepolicy/vendor/dlkm_loader.te
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
Cómo validar la partición system-dlkm
Google proporciona un caso de prueba de VTS de GKI para verificar la partición system_dlkm
. Para
Invoca la prueba de forma manual, usa el siguiente comando atest
:
atest -c vts_dlkm_partition_test