Implementar DTOs

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

Divida o DT

Comece dividindo o DT em duas partes:

  • DT principal. A parte exclusiva 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 os DTs, é necessário garantir a compatibilidade entre o DT principal e o DT de sobreposição para que a mesclagem do DT principal e do DT de sobreposição resulte em um DT completo para o dispositivo. Para saber mais 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 principais e de sobreposição

Para criar o DT principal:

  1. Compile o DT .dts principal em um arquivo .dtb.
  2. Faça o flash do arquivo .dtb em uma partição acessível no momento de inicialização do carregador de inicialização (detalhes em [DTs de partição](#partition)).

Para criar o DT da sobreposição:

  1. Compile o DT .dts da sobreposição em um arquivo .dtbo. Embora esse formato de arquivo seja o mesmo que o arquivo .dtb formatado como um DT achatado, a extensão de arquivo diferente o diferencia do DT principal.
  2. Faça o flash do arquivo .dtbo em uma partição acessível no momento de inicialização do carregador de inicialização (detalhes em [DTs de partição](#partition)).

Para saber mais sobre como compilar com o DTC e verificar os resultados de DTO no host, consulte Compilar e verificar.

DTs de partição

Determine um local confiável e acessível pelo carregador de inicialização no tempo de execução na memória flash para colocar .dtb e .dtbo.

Exemplos de locais para o DT principal:

  • Parte da partição de inicialização, anexada ao kernel (image.gz)
  • Separa blobs de DT (.dtb) em uma 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 carregador de inicialização 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 sobre o blob de DT principal. Normalmente, 8 MB são mais do que suficientes e permitem que o espaço cresça no futuro, se necessário.

Para dispositivos compatíveis com atualizações integradas (A/B), faça A/B nas partições DT principais e DT de sobreposição:

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

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

Executar no carregador de inicialização

Para executar:

Figura 5. Implementação de execução típica para DTO no carregador de inicialização.

  1. Carregar .dtb do armazenamento para a memória.
  2. Carregar .dtbo do armazenamento para a memória.
  3. Sobrepor .dtb com .dtbo para criar um DT mesclado.
  4. Inicia o kernel com o endereço de memória do DT mesclado.

Manter a compatibilidade

O DTB principal (do fornecedor do SoC) é tratado como uma plataforma de API para DTBOs. Depois de separar o DT em uma parte comum do SoC e uma parte específica do dispositivo, é necessário manter as duas partes mutuamente compatíveis no futuro, incluindo:

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

Garantir a segurança

O carregador de inicialização precisa garantir que o DTB ou DTBO esteja seguro, não modificado e não corrompido. É possível usar qualquer solução para proteger o DTB ou o DTBO, por exemplo, assinatura de imagem de inicialização no VBoot 1.0 ou rodapé AVB HASH (VBoot 2.0).

  • Se o DTB ou o 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 com uma raiz de confiança protegida por hardware e vai até o carregador de inicialização, que verifica a integridade e a autenticidade da partição DTB ou DTBO.
  • Se o DTB ou o DTBO estiver em uma partição existente (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.