No Android 12, o recurso bootconfig substitui a
Opções de cmdline do kernel androidboot.*
em uso com o Android 11
e menores. O recurso bootconfig é um mecanismo para transmitir configurações
detalhes do build e do carregador de inicialização para o Android 12.
Esse recurso fornece uma maneira de separar os parâmetros de configuração do espaço
do usuário do Android daqueles do espaço do kernel. Como mover o kernel androidboot.*
longo
para o arquivo bootconfig cria espaço na cmdline do kernel e faz
para disponibilizá-los para expansão futura.
O kernel e o espaço do usuário do Android precisam oferecer suporte a bootconfig
.
- Primeira versão com suporte: Android 12
- Primeira versão do kernel com suporte: 12-5.4.xx kernel
Implementar o recurso bootconfig para dispositivos novos lançados com a versão 12-5.10.xx versão do kernel. Não é necessário implementá-la se você estiver fazendo upgrade dos dispositivos.
Exemplos e origem
Ao visualizar os exemplos e o código-fonte nesta seção, observe que o formato
do código bootconfig
é apenas um pouco diferente do formato da
cmdline do kernel usada no Android 11 e em versões anteriores.
No entanto, a seguinte diferença é importante para o uso:
- Os parâmetros precisam ser separados pela sequência de escape de nova linha
\n
, e não por espaços
Exemplo de carregador de inicialização
Para conferir um exemplo de carregador de inicialização, consulte o carregador de referência do Cuttlefish U-boot implementação. Duas confirmações na referência estão listadas abaixo. Os primeiros uprevs suporte à versão do cabeçalho de inicialização para a versão mais recente. No exemplo, o primeiro confirmar atualizações (ou aumentar) o suporte da versão para a próxima, v4. A segunda faz duas coisas: ele adiciona a manipulação de bootconfig e demonstra a adição de parâmetros no tempo de execução:
- Usar a versão mais recente do cabeçalho de inicialização para a v4 mais recente versão.
- Adicionar o bootconfig de processamento.
Exemplo de build
Para um exemplo de build que mostra mudanças no mkbootimg
para criar o
vendor_boot.img
com cabeçalho de inicialização do fornecedor v4, consulte mkbootimg changes for
bootconfig
.
Consulte as mudanças do Cuttlefish para fazer o seguinte:
- Usar (ou aumentar) a versão do cabeçalho de inicialização do fornecedor v4.
- Adicione bootconfig à cmdline do kernel e mova os parâmetros selecionados para bootconfig
Implementação
Os parceiros devem adicionar suporte aos carregadores de inicialização e mover o tempo de compilação
Parâmetros androidboot.*
da linha de comando do kernel para o bootconfig
. A melhor maneira de implementar essa mudança é fazê-lo de forma incremental. consulte
Seção Implementação e validação incrementais
para saber como seguir um processo incremental.
Se você tiver mudanças que pesquisem androidboot.*
no arquivo /proc/cmdline
parâmetros, aponte-os para o arquivo /proc/bootconfig
. O ro.boot.*
são definidas com os novos valores bootconfig
.
mudanças no código usando essas propriedades.
Mudanças no build
Primeiro, aumente a versão do cabeçalho de inicialização para a versão 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
Adicione o parâmetro cmdline do kernel bootconfig
. Isso faz com que o kernel procure
seção bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
Os parâmetros bootconfig são criados a partir dos parâmetros no
A variável BOARD_BOOTCONFIG
, assim como a cmdline do kernel, é criada a partir de
BOARD\_KERNEL\_CMDLINE
.
Qualquer parâmetro androidboot.*
pode ser movido como está, semelhante ao seguinte:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
Mudanças no carregador de inicialização
O carregador de inicialização configura o initramfs
antes de pular para o kernel. O kernel
configuração de inicialização
procura pela seção bootconfig e procura ela estar no final do
initramfs,
pelo trailer esperado.
O carregador de inicialização recebe as informações de layout vendor_boot.img
do fornecedor.
no cabeçalho da imagem de inicialização.
Figura 1. Alocação de memória da configuração de inicialização do Android 12
O carregador de inicialização cria a seção bootconfig na memória. Seção bootconfig contém alocações de memória para o seguinte:
- Parâmetros
- 4 B tamanho
parameters size
- 4 B tamanho
parameters checksum
- String mágica de bootconfig 12 B (
#BOOTCONFIG\n
)
Os parâmetros têm duas origens: parâmetros conhecidos no tempo de build e parâmetros que não são conhecidos no tempo de build. Parâmetros desconhecidos precisam ser adicionados.
Os parâmetros conhecidos no tempo de build são empacotados no final do vendor_boot
imagem na seção bootconfig. O tamanho da seção é armazenado (como bytes)
no campo vendor_bootconfig_size
do cabeçalho de inicialização do fornecedor.
Os parâmetros que não são conhecidos no tempo de build só são conhecidos no ambiente de execução carregador de inicialização. Eles precisam ser adicionados ao final da seção de parâmetros bootconfig antes da aplicação do trailer do bootconfig.
Se for preciso adicionar parâmetros depois da aplicação do trailer bootconfig, substituir o trailer e aplicá-lo novamente.
Implementação e validação incrementais
Implemente o recurso bootconfig incrementalmente, seguindo o processo fornecido em nesta seção. Deixe os parâmetros cmdline do kernel inalterados enquanto o parâmetros bootconfig foram adicionados.
Estas são as etapas de uma implementação incremental com validação:
- Faça as alterações no carregador de inicialização e no build. Em seguida, faça o seguinte:
- Usar a variável
BOARD_BOOTCONFIG
para adicionar um novo bootconfig . - Mantenha os parâmetros cmdline do kernel como estão, para que o dispositivo poderá continuar inicializando corretamente. Isso torna a depuração e a validação muito mais fácil.
- Usar a variável
- Verifique seu trabalho conferindo o conteúdo de
/proc/bootconfig
. Verificar o parâmetro recém-adicionado após a inicialização do dispositivo é mostrado. - Mova os parâmetros
androidboot.*
do cmdline do kernel para bootconfig usando a variávelBOARD_BOOTCONFIG
e o carregador de inicialização. - Verifique se cada um dos parâmetros existe em
/proc/bootconfig
E se eles não estão em/proc/cmdline
. Se for possível confirmar isso, a implementação deu certo.
Considerações sobre upgrade e downgrade OTA
Ao gerenciar upgrades e downgrades OTA entre diferentes versões do No Android ou em diferentes versões do kernel, é preciso ter cuidado especial.
O Android 12 é a primeira versão com bootconfig suporte. Se fizer downgrade para qualquer versão anterior, os parâmetros cmdline do kernel precisa ser usada no lugar do bootconfig.
As versões 12 a 5.4 e mais recentes do kernel oferecem suporte ao bootconfig. Se fizer downgrade para qualquer versão anterior a ela(incluindo a 11-5.4), os parâmetros de cmdline do kernel devem ser usados.
Upgrades do Android 11 e versões anteriores para o Android 12 e versões mais recentes podem continuar usando parâmetros cmdline do kernel. O mesmo se aplica ao upgrade de versões do kernel.
Solução de problemas
Ao realizar a etapa de verificação, se você não encontrar os parâmetros esperados.
em /proc/bootconfig
, verifique os registros do kernel em logcat
. Sempre há um registro
entrada presente para bootconfig se o kernel permitir.
Exemplo de saída de registro
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
Se um registro de erros for retornado, significa que houve um problema ao carregar o bootconfig. Para conferir diferentes tipos de erro, consulte init/main.c padrão.