A implementação do DTO envolve dividir a árvore de dispositivos, construir, particionar e executar. Depois de ter uma implementação funcional, você também deverá manter a compatibilidade entre os dois DTs e determinar uma estratégia para garantir a segurança de cada partição do DT.
Dividindo o DT
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, de modo 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 múltiplas árvores de dispositivos, consulte Múltiplos DTs .
Construindo DTs principais e de sobreposição
Para construir o DT principal:
- Compile o DT principal
.dts
no arquivo.dtb
. - Flash arquivo
.dtb
em uma partição acessível em tempo de execução do bootloader (detalhado abaixo).
Para construir o DT de sobreposição:
- Compile o DT de sobreposição
.dts
no arquivo.dtbo
. Embora este formato de arquivo seja igual ao arquivo.dtb
formatado como uma árvore de dispositivos achatada, a extensão de arquivo diferente o distingue do DT principal. - Flash
.dtbo
arquivo em uma partição acessível em tempo de execução do bootloader (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 confiável e acessível em tempo de execução do bootloader na memória flash para colocar .dtb
e .dtbo
.
Exemplos de localizações para o DT principal:
- Parte da partição de inicialização, anexada ao kernel (
image.gz
). - Blobs DT separados (
.dtb
) na partição dedicada (dtb
).
Exemplos de locais para o DT de sobreposição:
Partição Única |
---|
![](https://source.android.com/docs/core/architecture/images/treble_dto_dtbo_partition_1.png?authuser=5&hl=pt)
.dtbo
em uma partição exclusiva, por exemplo, partição dtbo
. Partição ODM |
---|
![](https://source.android.com/docs/core/architecture/images/treble_dto_dtbo_partition_2.png?authuser=5&hl=pt)
.dtbo
na partição odm
(faça isso apenas se o seu gerenciador de inicialização tiver capacidade de 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 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 DT de sobreposição:
Exemplo 1 |
---|
![](https://source.android.com/docs/core/architecture/images/treble_dto_dtbo_ab_1.png?authuser=5&hl=pt)
Exemplo 2 |
---|
![](https://source.android.com/docs/core/architecture/images/treble_dto_dtbo_ab_2.png?authuser=5&hl=pt)
Executando no bootloader
Para correr:
![](https://source.android.com/docs/core/architecture/images/treble_dto_dtbo.png?authuser=5&hl=pt)
- Carregue
.dtb
do armazenamento na memória. - Carregue
.dtbo
do armazenamento na memória. - Sobreponha
.dtb
com.dtbo
para ser um DT mesclado. - Inicie o kernel dado o endereço de memória do DT mesclado.
Mantendo a compatibilidade
O DTB principal (do fornecedor 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ê deverá manter as duas partes mutuamente compatíveis no futuro, incluindo:
- Definição do DT no DT principal (por exemplo, nós, propriedades, rótulos) . Qualquer alteração na definição do DT principal pode provocar 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 o nome do nó original (para evitar a alteração do DT de sobreposição).
- Sobreposição do local de armazenamento do DT (por exemplo, nome da partição, formato do 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 DTB/DTBO, por exemplo, assinatura de imagem de inicialização em VBoot 1.0 ou rodapé AVB HASH (VBoot 2.0).
- Se DTB/DTBO estiver em uma partição exclusiva, você poderá adicionar essa partição à cadeia confiável 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 autenticidade da partição DTB/DTBO.
- Se 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çãoodm
).
Para obter detalhes, consulte Inicialização verificada .