Sobreposições da árvore de dispositivos

Uma árvore de dispositivos (DT) é uma estrutura de dados de nós e propriedades nomeados que descrevem hardware não detectável. Kernels, como o do Linux usado no Android, usam DTs para oferecer suporte a uma ampla variedade de configurações de hardware usadas por dispositivos Android. Os fornecedores de hardware fornecem os próprios arquivos fonte da árvore de dispositivos (DTS), que são compilados no arquivo blob da árvore de dispositivos (DTB) usando o compilador da árvore de dispositivos. Esses arquivos são usados pelo bootloader. O arquivo DTB contém uma árvore de dispositivos simplificada formatada em binário.

Uma sobreposição da árvore de dispositivos (DTO) permite que um DTB central seja sobreposto à DT (um blob da árvore de dispositivos para sobreposição (DTBO)). Um carregador de inicialização que usa DTO pode manter o DT do sistema em um chip (SoC) e sobrepor dinamicamente um DT específico do dispositivo, adicionando nós à árvore e fazendo mudanças nas propriedades da árvore atual.

Atualizações na versão do Android 9

No Android 9, o carregador de inicialização não pode modificar as propriedades definidas nas DTOs antes de transmitir o DTB unificado para o kernel.

Carregar um DT

Carregar um DT no carregador de inicialização envolve criação, particionamento e execução.

Figura 1. Implementação típica para carregar a árvore de dispositivos no carregador de inicialização.

  1. Para criar e atualizar o DTB:

    1a. Use o DTC (dtc) para compilar o DTS (.dts) em um DTB (.dtb). O DTB é formatado como um DT achatado. 1b. Atualize o arquivo .dtb para um local acessível ao tempo de execução do carregador de inicialização (detalhado abaixo).

  2. Para particionar, determine um local confiável e acessível em tempo de execução do carregador de inicialização na memória flash para colocar .dtb. Exemplos de locais:

    Figura 2. Coloque .dtb em uma partição de inicialização
    adicionando a image.gz e transmitindo como
    "kernel" para mkbootimg.

    Figura 3. Coloque .dtb em uma partição exclusiva
    (por exemplo, partição dtb).

  3. Para carregar o DTB e iniciar o kernel:

    • Carregue .dtb do armazenamento para a memória.
    • Inicie o kernel usando o endereço de memória da DT carregada.

Quais são as próximas etapas?

Esta página detalha um fluxo de trabalho típico do carregador de inicialização para carregar um DT e fornece uma lista de termos comuns de DT. Outras páginas nesta seção descrevem como implementar suporte ao carregador de inicialização, como compilar, verificar e otimizar seu DTO e como usar várias DTs. Você também pode conferir detalhes sobre a sintaxe de DTO e a formatação de partição de DTO e DTBO necessária.