Implementando DTOs

A implementação do DTO envolve dividir a árvore de dispositivos, construir, particionar e executar. Depois de ter uma implementação em funcionamento, você também deve manter a compatibilidade entre os dois DTs e determinar uma estratégia para garantir a segurança de cada partição DT.

Dividindo o TD

Comece dividindo a árvore de dispositivos em duas (2) partes:

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

Depois de dividir as árvores de dispositivos, você deve garantir a compatibilidade entre o DT principal e o DT de sobreposição para que a fusão do DT principal e do DT de sobreposição resulte em um DT completo para o dispositivo. Para obter detalhes sobre o formato e as regras do DTO, consulte Sintaxe do DTO . Para obter detalhes sobre várias árvores de dispositivos, consulte Vários DTs .

Construindo DTs principais e de sobreposição

Para construir o DT principal:

  1. Compile o DT principal .dts no arquivo .dtb .
  2. Flash arquivo .dtb em uma partição acessível ao tempo de execução do gerenciador de inicialização (detalhado abaixo).

Para construir o DT de sobreposição:

  1. Compile DT .dts de sobreposição no arquivo .dtbo . Embora esse formato de arquivo seja o mesmo que o arquivo .dtb formatado como uma árvore de dispositivos achatada, a extensão de arquivo diferente o distingue do DT principal.
  2. Flash arquivo .dtbo em uma partição acessível em tempo de execução do bootloader (conforme detalhado abaixo).

Para obter detalhes sobre como compilar com o DTC e verificar os resultados do DTO no host, consulte Compilando e verificando .

Particionando DTs

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 e .dtbo .

Localizações de exemplo para o DT principal:

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

Localizações de exemplo para o DT de sobreposição:

Partição única
Figura 1. Coloque .dtbo em uma partição única, por exemplo, partição dtbo .
Partição ODM
Figura 2. Coloque .dtbo na partição odm (faça isso somente se seu bootloader tiver capacidade para carregar dados do sistema de arquivos da partição odm ).

Nota: O tamanho da partição de DT de sobreposição depende do dispositivo e da quantidade de alterações necessárias na parte superior do blob de DT principal. Normalmente, 8 MB é mais do que suficiente e permite espaço para crescer no futuro, se necessário.

Para dispositivos que suportam atualizações contínuas (A/B) , A/B o DT principal e as partições de DT de sobreposição:

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

Executando no bootloader

Para correr:

Figura 5. Implementação típica de tempo de execução para sobreposição de árvore de dispositivos no carregador de inicialização.
  1. Carregue .dtb do armazenamento na memória.
  2. Carregue .dtbo do armazenamento na memória.
  3. .dtb com .dtbo para ser um DT mesclado.
  4. Inicie o kernel dado o endereço de memória do DT mesclado.

Mantendo a compatibilidade

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

  • Definição de DT no DT principal (por exemplo, nós, propriedades, rótulos) . Qualquer alteração de definição no DT principal pode desencadear alterações no DT de sobreposição. Por exemplo, para corrigir um nome de nó no DT principal, defina um rótulo "alias" que mapeie para o nome do nó original (para evitar a alteração do DT de sobreposição).
  • Sobreposição de localização de armazenamento DT (por exemplo, nome da partição, formato de armazenamento) .

Garantindo a segurança

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

  • Se o DTB/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 a partir de uma raiz de confiança protegida por hardware e vai para o carregador de inicialização, que verifica a integridade e autenticidade da partição DTB/DTBO.
  • Se o DTB/DTBO estiver em uma partição existente (como a partição odm ), essa partição deverá estar na cadeia de confiança do AVB. (A partição DTBO pode compartilhar uma chave pública com a partição odm ).

Para obter detalhes, consulte Inicialização verificada .