O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando DTOs

A implementação do DTO envolve a divisão da árvore do dispositivo, a construção, o particionamento e a execução. Depois de ter uma implementação funcional, você também deve manter a compatibilidade entre as duas DTs e determinar uma estratégia para garantir a segurança de cada partição da DT.

Dividindo o DT

Comece dividindo a árvore do dispositivo em duas (2) partes:

  • DT principal . A parte somente SoC e as configurações padrão, fornecidas pelo fornecedor SoC.
  • Overlay 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 a TD principal e a TD de sobreposição para que a fusão da TD principal e da TD de sobreposição resulte em uma TD completa para o dispositivo. Para obter detalhes sobre o formato e as regras do DTO , consulte Sintaxe do DTO . Para obter detalhes sobre árvores de vários dispositivos, consulte Múltiplos DTs .

Construindo DTs principais e de sobreposição

Para construir o DT principal:

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

Para construir o DT de sobreposição:

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

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

Particionando DTs

Determine um local acessível e confiável para o bootloader na memória flash para colocar .dtb e .dtbo .

Locais de exemplo para o DT principal:

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

Locais de exemplo para a sobreposição DT:

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

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

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

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

Executando no bootloader

Para correr:

Figura 5. Implementação típica de tempo de execução para sobreposição de árvore de dispositivo no bootloader.
  1. Carregue .dtb do armazenamento para a memória.
  2. Carregue .dtbo do armazenamento para a memória.
  3. .dtb com .dtbo para ser uma DT mesclada.
  4. Inicie o kernel com o endereço de memória da TD mesclada.

Manter a compatibilidade

O DTB principal (do fornecedor SoC) é tratado como uma superfície API para DTBOs. Depois de separar a árvore do dispositivo 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 TD na TD principal (por exemplo, nós, propriedades, rótulos) . Qualquer mudança de definição na TD principal pode desencadear mudanças na TD de sobreposição. Por exemplo, para corrigir um nome de nó na TD principal, defina um rótulo "alias" que mapeie para o nome do nó original (para evitar a mudança da TD de sobreposição).
  • Sobrepor o local de armazenamento da TD (por exemplo, nome da partição, formato de armazenamento) .

Garantindo a segurança

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

  • Se o DTB / DTBO estiver em uma partição exclusiva, você pode 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 bootloader, 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 deve 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 .