Sobreposições da árvore de dispositivos

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

Uma sobreposição da árvore de dispositivos (DTO) permite que um DTB central seja sobreposto ao 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 chip (SoC, na sigla em inglês) 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 a DTB unificada ao kernel.

Carregar uma DT

Carregar uma DT no carregador de inicialização envolve criar, particionar e executar.

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 DTS (.dts) em um DTB (.dtb). O DTB é formatado como um DT achatado. 1b. Faça o flash do arquivo .dtb em um local acessível pelo carregador de inicialização (detalhes 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
    anexando à 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:

    • Carregar .dtb do armazenamento para a memória.
    • Inicie o kernel usando o endereço de memória do DT carregado.

Qual é a próxima etapa?

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