Um bootloader é uma imagem proprietária do fornecedor responsável por trazer o kernel em um dispositivo. Ele protege o estado do dispositivo e é responsável por inicializar o Trusted Execution Environment e vincular sua raiz de confiança. O carregador de inicialização também verifica a integridade das partições de boot
e recovery
antes de mover a execução para o kernel e exibe avisos de estado de inicialização .
Operações de inicialização
Para iniciar a inicialização, o bootloader pode fazer o flash de uma nova imagem diretamente em uma partição apropriada ou usar a recovery
para iniciar o processo de reflash usado para uma atualização over-the-air (OTA). Alguns fabricantes de dispositivos criam carregadores de inicialização com várias partes e os combinam em um único arquivo bootloader.img
; na hora do flash, o bootloader extrai e exibe todos os bootloaders individuais.
Exemplo de fluxo de bootloader:
O bootloader é carregado primeiro e inicializa a memória.
Se as atualizações A/B forem usadas, o carregador de inicialização determinará o slot atual para inicializar.
O carregador de inicialização determina se o modo de recuperação deve ser inicializado (consulte Atualizações de suporte ).
O bootloader carrega a imagem de inicialização, que contém as imagens do kernel e do ramdisk.
O bootloader carrega o kernel na memória como um binário compactado auto-executável. O kernel então se descompacta e começa a ser executado na memória.
O carregador de inicialização carrega o
init
, seja da partiçãoramdisk
(em dispositivos mais antigos) ou da partição do sistema (em dispositivos mais recentes).A partir da partição do sistema, o
init
inicia e monta todas as outras partições (comovendor
,oem
eodm
) e então começa a executar o código para iniciar o dispositivo.
Linha de comando do kernel
Concatene a linha de comando do kernel dos seguintes locais:
Linha de comando do carregador de inicialização: conjunto de parâmetros estáticos e dinâmicos determinados pelo carregador de inicialização
Árvore de dispositivos: do nó escolhido/bootargs
defconfig
: deCONFIG_CMDLINE
boot.img
: de cmdline (para deslocamentos e tamanhos, consultesystem/core/mkbootimg/bootimg.h
Um motivo de reinicialização ou desligamento canônico compatível com o Documento de Definição de Compatibilidade do Android , conforme determinado a partir do circuito integrado de gerenciamento de energia (PMIC), outros recursos de hardware e mensagens de argumentos mágicos de reinicialização (
LINUX_REBOOT_CMD_RESTART2
). Sintaxe é:androidboot.bootreason=reason
Suporte para árvores de dispositivos e sobreposições de árvores de dispositivos
O bootloader pode suportar diferentes configurações identificando a revisão do produto/hardware do dispositivo e, em seguida, carregando o conjunto correto de sobreposições de árvore de dispositivos.
Suporte para randomização de layout de espaço de endereço do kernel
Para suportar a randomização do endereço virtual no qual a imagem do kernel é carregada (habilitada pela configuração do kernel RANDOMIZE_BASE
), o carregador de inicialização deve fornecer entropia passando um valor u64 aleatório no nó da árvore do dispositivo /chosen/kaslr-seed
.
Suporte para inicialização verificada
Para obter detalhes sobre como usar o bootloader para implementar a inicialização verificada, consulte Verifying Boot .