O Android 11 introduz o conceito de imagem genérica do kernel e a 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 de primeiro estágio. Os módulos do kernel antes do lançamento do Android 11 também são armazenados em partições do fornecedor e ODM e são carregados por processos do fornecedor.
No Android 11 ou versões mais recentes, o kernel e todos os módulos do kernel podem ser atualizados independentemente do restante das partições. Para ativar atualizações para módulos do 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 DLKM do fornecedor (módulo do kernel carregável dinamicamente). Depois, você pode atualizar essa 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. Essa partição também pode ser atualizada de forma independente.
Local da partição
As partições vendor_dlkm
e odm_dlkm
estão localizadas na superpartição como
outra partição dinâmica.
Conteúdos de vendor_dlkm em /vendor/lib/modules
- Módulos do kernel do fornecedor
modprobe
arquivos de configuração- Um arquivo
modules.load
Conteúdos odm_dlkm em /odm/lib/modules
- Módulos do kernel do ODM
modprobe
arquivos de configuração- Um arquivo
modules.load
Consulte Suporte a módulos do kernel para mais detalhes sobre arquivos de configuração de módulos do kernel.
Suporte de build
A criação de vendor_dlkm
e odm_dlkm
é um processo semelhante à criação de outras
partições dinâmicas.
Exemplo de build de vendor_dlkm
Crie vendor_dlkm
, conforme mostrado nos exemplos a seguir.
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 adequado do grupo de
atualizações. O grupo de atualização precisa ser o grupo em que a partição do fornecedor está.
Para dispositivos A/B e A/B virtuais, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Adicione a seguinte entrada para vendor_dlkm
ao fstab. Mude as flags de acordo com
o dispositivo. Use a opção Adicionar vendor_dlkm
à
CF do CL como exemplo.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Exemplo de build de odm_dlkm
Crie odm_dlkm
, conforme mostrado nos exemplos a seguir.
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 A/B virtual, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab (em inglês)
Adicione a seguinte entrada para odm_dlkm
ao fstab. Mude as flags 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
Copiar módulos do kernel para uma partição
Para selecionar os módulos do kernel que você quer copiar para a partição vendor_dlkm
,
liste-os em BOARD_VENDOR_KERNEL_MODULES
.
Se você quiser substituir o conteúdo de modules.load
, especifique-o em
BOARD_VENDOR_KERNEL_MODULES_LOAD
.
No momento da criaçã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ê quer copiar para a partição odm_dlkm
, liste-os em BOARD_ODM_KERNEL_MODULES
. O build da plataforma executa
depmod
nos módulos e copia os arquivos de saída depmod
para a imagem.
O build cria um arquivo modules.load
e o armazena na imagem.
Esse arquivo contém todos os módulos listados em BOARD_ODM_KERNEL_MODULES
.
Se você quiser substituir o conteúdo de modules.load
, especifique-o em
BOARD_ODM_KERNEL_MODULES_LOAD
.
No momento da build, os módulos listados em BOARD_ODM_KERNEL_MODULES
são instalados em
$ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Um link simbólico é 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 kernel do fornecedor
e do ODM.
Nunca use /vendor_dlkm/lib/modules. Dispositivos sem uma partição vendor_dlkm
instalam BOARD_VENDOR_KERNEL_MODULES
para /vendor/lib/modules
diretamente. 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
no /odm/lib/modules
diretamente. Isso é
problemático, porque /odm_dlkm/lib/modules
não existe.
Montagem de partições e carregamento de módulos
Durante first_stage_init
, as partições vendor_dlkm
e odm_dlkm
são
montadas nos diretórios /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 do fornecedor (como um script .rc
) pode 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 mais tarde, se necessário.
Documentação relacionada
Para consultar a 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 do kernel.