Sobreposições de árvore de dispositivos

Uma árvore de dispositivos (DT) é uma estrutura de dados de nós nomeados e propriedades que descrevem hardware não detectável. Sistemas operacionais, como o kernel Linux usado no Android, usam DTs para dar suporte a uma ampla variedade de configurações de hardware usadas por dispositivos com Android. Os fornecedores de hardware fornecem seus próprios arquivos de origem DT, que o Linux compila no arquivo Device Tree Blob (DTB) usado pelo bootloader.

Uma sobreposição de árvore de dispositivos (DTO) permite que um blob de árvore de dispositivos central (DTB) seja sobreposto na árvore de dispositivos. Um carregador de inicialização usando DTO pode manter o DT do sistema no chip (SoC) e sobrepor dinamicamente um DT específico do dispositivo, adicionando nós à árvore e fazendo alterações nas propriedades da árvore existente.

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

Atualizações na versão Android 9

No Android 9, o bootloader não deve modificar as propriedades definidas nas sobreposições da árvore do dispositivo antes de passar o blob da árvore do dispositivo unificado para o kernel.

Carregando uma árvore de dispositivos

Carregar uma árvore de dispositivos no bootloader envolve construir, particionar e executar.

Figura 1. Implementação típica para carregar a árvore de dispositivos no bootloader.
  1. Construir:
    • Use o compilador de árvore de dispositivos ( dtc ) para compilar a origem da árvore de dispositivos ( .dts ) em um blob de árvore de dispositivos ( .dtb ), formatado como uma árvore de dispositivos achatada.
    • Atualize o arquivo .dtb em um local acessível ao tempo de execução do gerenciador de inicialização (detalhado abaixo).
  2. Para particionar, determine um local confiável e acessível em tempo de execução do gerenciador de inicialização na memória flash para colocar .dtb . Exemplos de locais:
    Partição de inicialização
    Figura 2. Coloque .dtb na partição de boot anexando image.gz e passando como " kernel " para mkbootimg .
    Partição única
    Figura 3. Coloque .dtb em uma partição única (por exemplo, partição dtb ).
  3. Para correr:
    • Carregue .dtb do armazenamento na memória.
    • Inicie o kernel dado o endereço de memória do DT carregado.

Terminologia

Esta seção usa os seguintes termos da árvore de dispositivos:

TD Árvore de dispositivos
DTB Blob da árvore do dispositivo
DTBO Blob de árvore de dispositivos para sobreposição
DTC Compilador de árvore de dispositivos
DTO Sobreposição de árvore de dispositivos
DTS Origem da árvore de dispositivos
FDT Árvore de dispositivos achatada, um formato binário contido em um arquivo .dtb blob