Implementar DTOs

A implementação de sobreposições da árvore de dispositivos (DTOs, na sigla em inglês) envolve dividir, criar, particionar e executar a árvore de dispositivos (DT, na sigla em inglês). Depois de ter uma implementação funcional, você também precisa manter a compatibilidade entre as duas DTs e determinar uma estratégia para garantir a segurança de cada partição de DT.

Dividir a DT

Comece dividindo a DT em duas partes:

  • DT principal. A parte somente do SoC e as configurações padrão, fornecidas pelo fornecedor do SoC.
  • DT de sobreposição. As configurações específicas do dispositivo, fornecidas pelo ODM/OEM.

Depois de dividir as DTs, você precisa garantir a compatibilidade entre a DT principal e a DT de sobreposição para que a mesclagem delas resulte em uma DT completa para o dispositivo. Para detalhes sobre o formato e as regras de DTO, consulte Sintaxe de DTO. Para detalhes sobre várias DTs, consulte Usar várias DTs.

Criar DTs principal e de sobreposição

Para criar a DT principal:

  1. Compile a DT principal .dts em um arquivo .dtb.
  2. Faça o flash do arquivo .dtb em uma partição acessível ao ambiente de execução do bootloader (detalhada em [Particionar DTs](#partition)).

Para criar a DT de sobreposição:

  1. Compile a DT de sobreposição .dts em um arquivo .dtbo. Embora esse formato de arquivo seja o mesmo que o arquivo .dtb formatado como uma DT nivelada, a extensão de arquivo diferente o distingue da DT principal.
  2. Faça o flash do arquivo .dtbo em uma partição acessível ao ambiente de execução do bootloader (detalhada em [Particionar DTs](#partition)).

Para detalhes sobre a compilação com DTC e a verificação dos resultados de DTO no host, consulte Compilar e verificar.

Particionar DTs

Determine um local de confiança e acessível ao ambiente de execução do carregador de inicialização na memória flash para colocar .dtb e .dtbo.

Exemplos de locais para a DT principal:

  • Parte da partição de inicialização, anexada ao kernel (image.gz)
  • Blobs de DT separados (.dtb) na partição dedicada (dtb)

Exemplos de locais para a DT de sobreposição:

Figura 1. Coloque .dtbo em uma partição odm (faça isso somente se o bootloader tiver a capacidade de carregar dados do sistema de arquivos de uma partição odm).

Figura 2. Coloque .dtbo em uma partição exclusiva, como uma partição dtbo.

Observação:o tamanho da partição de DT de sobreposição depende do dispositivo e da quantidade de mudanças necessárias no blob da DT principal. Normalmente, 8 MB são mais do que suficientes e permitem espaço para crescimento no futuro, se necessário.

Para dispositivos que oferecem suporte a atualizações integradas (A/B), faça A/B nas partições de DT principal e de sobreposição:

Figura 3. Partição DTBO A/B, exemplo 1.

Figura 4. Partição DTBO A/B, exemplo 2.

Executar no bootloader

Para executar:

Figura 5. Implementação típica de ambiente de execução para DTO no bootloader.

  1. Carregue .dtb do armazenamento para a memória.
  2. Carregue .dtbo do armazenamento para a memória.
  3. Sobreponha .dtb com .dtbo para ser uma DT mesclada.
  4. Inicie o kernel com o endereço de memória da DT mesclada.

Manter a compatibilidade

O DTB principal (do fornecedor do SoC) é tratado como uma superfície de API para DTBOs. Depois de separar a DT em uma parte comum do SoC e uma parte específica do dispositivo, você precisa manter as duas partes mutuamente compatíveis no futuro, incluindo:

  • Definição de DT na DT principal. Por exemplo, nós, propriedades, rótulos. Qualquer mudança de definição na DT principal pode acionar mudanças na DT de sobreposição. Por exemplo, para corrigir um nome de nó na DT principal, defina um rótulo de "alias" que seja mapeado para o nome do nó original (para evitar a mudança da DT de sobreposição).
  • Local de armazenamento da DT de sobreposição. Por exemplo, nome da partição, formato de armazenamento.

Garantir a segurança

O bootloader precisa garantir que o DTB ou DTBO seja seguro, não modificado e não corrompido. Você pode usar qualquer solução para proteger o DTB ou DTBO, por exemplo, assinatura da imagem de inicialização no VBoot 1.0 ou rodapé do AVB HASH (VBoot 2.0).

  • Se o DTB ou DTBO estiver em uma partição exclusiva, você poderá adicionar essa partição à cadeia de confiança do AVB. A cadeia de confiança começa em uma raiz de confiança protegida por hardware e vai para o bootloader, que verifica a integridade e a autenticidade da partição DTB ou DTBO.
  • Se o DTB ou DTBO estiver em uma partição atual (como a partição odm), essa partição precisará estar na cadeia de confiança do AVB. A partição DTBO pode compartilhar uma chave pública com a partição odm.

Para mais detalhes, consulte Inicialização verificada.