O Android 11 apresenta o conceito de imagem genérica do kernel e partição de inicialização do fornecedor. A partição de inicialização do fornecedor armazena módulos do kernel compatíveis com GKI e é carregada pelo init do primeiro estágio. Os módulos do kernel anteriores ao lançamento do Android 11 também são armazenados em partições de fornecedor e ODM e carregados por processos de fornecedor.
Para Android 11 ou superior, o kernel e todos os módulos do kernel podem ser atualizados independentemente do restante das partições. Para habilitar atualizações para módulos de kernel armazenados na partição do fornecedor (sem uma atualização da partição do fornecedor), mova todos os módulos de partição do fornecedor para uma nova partição chamada Vendor DLKM (módulo de kernel carregável dinamicamente). Você pode então atualizar esta partição de forma independente. Da mesma forma, é possível mover todos os módulos do kernel armazenados na partição ODM para uma nova partição chamada ODM DLKM . Esta partição também pode ser atualizada de forma independente.
Localização da partição
As partições vendor_dlkm
e odm_dlkm
estão localizadas na superpartição como outra partição dinâmica.
conteúdo vendor_dlkm em /vendor/lib/modules
- Módulos de kernel do fornecedor
- arquivos de configuração
modprobe
- Um arquivo
modules.load
Conteúdo do odm_dlkm em /odm/lib/modules
- Módulos do kernel ODM
- arquivos de configuração
modprobe
- Um arquivo
modules.load
Consulte Suporte ao módulo do kernel para obter mais detalhes sobre os arquivos de configuração do módulo do kernel.
Construir suporte
A construção de vendor_dlkm
e odm_dlkm
é um processo semelhante à construção de outras partições dinâmicas.
exemplo de construção vendor_dlkm
Construa vendor_dlkm
conforme mostrado no exemplo abaixo.
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
Substitua <GROUP_NAME>
pelo nome apropriado do grupo de atualização. O grupo de atualização deve ser o grupo no qual a partição do fornecedor está.
Para dispositivos A/B e Virtual A/B, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Adicione a seguinte entrada para vendor_dlkm
ao fstab. Altere as bandeiras de acordo com o dispositivo. Use o CL Adicionar vendor_dlkm
ao CF como exemplo.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
exemplo de construção odm_dlkm
Construa odm_dlkm
conforme mostrado no exemplo abaixo.
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 e Virtual A/B, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Adicione a seguinte entrada para odm_dlkm
ao fstab. Altere as bandeiras de acordo com o dispositivo. Use o CL Adicionar odm_dlkm
ao CF como exemplo.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Copiando módulos do kernel para uma partição
Para selecionar os módulos do kernel que você deseja copiar para a partição vendor_dlkm
, liste-os em BOARD_VENDOR_KERNEL_MODULES
.
Se quiser substituir o conteúdo de modules.load
, você pode especificá-lo em BOARD_VENDOR_KERNEL_MODULES_LOAD
.
No momento da construção, os módulos listados em BOARD_VENDOR_KERNEL_MODULES
são instalados em $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. Um link simbólico é criado em /vendor/lib/modules
que leva a /vendor_dlkm/lib/modules
.
Da mesma forma, para selecionar os módulos do kernel que você deseja copiar para a partição odm_dlkm
, liste-os em BOARD_ODM_KERNEL_MODULES
. A construção da plataforma executa depmod
nos módulos e copia os arquivos de saída depmod
na imagem. A compilação cria um arquivo modules.load
e o armazena na imagem. Este arquivo contém todos os módulos listados em BOARD_ODM_KERNEL_MODULES
.
Se quiser substituir o conteúdo de modules.load
, você pode especificá-lo em BOARD_ODM_KERNEL_MODULES_LOAD
.
No momento da construção, os módulos listados em BOARD_ODM_KERNEL_MODULES
serão instalados em $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Um link simbólico será criado em /odm/lib/modules
que leva a /odm_dlkm/lib/modules
.
Sempre use /vendor/lib/modules
e /odm/lib/modules
para módulos de fornecedor e kernel ODM.
Nunca use /vendor_dlkm/lib/modules. Dispositivos sem uma partição vendor_dlkm
instalam BOARD_VENDOR_KERNEL_MODULES
diretamente em /vendor/lib/modules
. Isso é problemático porque /vendor_dlkm/lib/modules
não existe.
Nunca use /odm_dlkm/lib/modules. Dispositivos sem uma partição odm_dlkm
instalam BOARD_ODM_KERNEL_MODULES
em /odm/lib/modules
diretamente. Isso é problemático porque /odm_dlkm/lib/modules
não existe.
Montagem de partição e carregamento de módulo
Durante first_stage_init
, as partições vendor_dlkm
e odm_dlkm
são montadas nas partições /vendor_dlkm
e /odm_dlkm
, respectivamente. Quando isso acontece, os links simbólicos em /vendor/lib/modules
e /odm/lib/modules
ficam disponíveis.
Um processo de fornecedor (como um script '.rc') pode então carregar os módulos do kernel com base na ordem especificada em modules.load
. O processo do fornecedor também pode carregar os módulos posteriormente, se necessário.
Documentação relacionada
Para obter documentação sobre a criação de uma partição de inicialização do fornecedor (que contém o RAMDisk do fornecedor), consulte Suporte ao Módulo Kernel .